mysql计算时间差⼩时_MySQL、MongoDB、hive查询语法笔
记
⼀ MongoDB 语法
查询去重⽤户量
Collection('user_app_action_display_20190314').distinct("user_id").length
MySQL:select count(distinct user_id from user_app_action_display_20190314
LIKE语句的使⽤⽅法
mongo:
find({"event_object.eventCategory":{$regex:/⾸页_display/}}) #求曝光量数据
MySQL:
select * from tablename where 字段名 like '%⾸页_display%'
注意:event_object在mongo中以json字符串的形式存在存储,eventCategory是json中的⼀个字段,在这⾥普及⼀下json字符串: 注意
json 就是⼀个根据某种约定格式编写的纯字符串,不具备任何数据结构的特征。 其形态类似python中字典表现规则,但字典本⾝是⼀个完整的数据结构,实现了⼀切⾃⾝该有的算法,⽽json只是字符串
mongodb和mysql结合聚合查询1
mongo:
db.user_app_action_20190128.aggregate( [
{ "$match": { "event_object.eventCategory": "⾸页_click" } },
{
"$group": {
"_id": "$grade",
"count": {"$sum": 1}
}
}
] )
MySQL:
select
grade,count(1)
from tablename
where event_object.eventCategory="⾸页_click"
group by grade
⼆ HIVE SQL
查看分区信息
show partitions table_name;
根据分区查询数据
select table_coulm from table_name where partition_name = '20190317'
hive时间控制常⽤是转成时间戳再加减
/*将create_at往后加8个⼩时:常⽤于时区转化*/
SELECT
from_unixtime(unix_timestamp(create_at)+28800,'yyyy-MM-dd') as date,
count(DISTINCT user_id) as cnt
FROM dw_fac_user_app_action_display
GROUP BY from_unixtime(unix_timestamp(create_at)+28800,'yyyy-MM-dd')
/*两个时间函数不可直接相减,同样要转化为秒再相减*/
(unix_timestamp(time1)-unix_timestamp(time2))/24/3600 ---求time1与time2相差的天数计算时间差
select datediff('2019-03-20','2019-03-05') #15 单位为day
* 在MySQL中可是可以执⾏的
获取当前时间的⽅式
case1:select date_format(current_timestamp,'yyyy-MM-dd')
case2:select from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss')
* MySQL中⽤curdate() & now()函数
获取⼏天前、⼏⼩时前的时间
select from_unixtime(unix_timestamp(current_timestamp)-86400,"yyyy-mm-dd")
正则匹配
grade REGEXP '[^0-9.]')=1; //查询grade列不是数字的数据
grade REGEXP '[^0-9.]')=0; //查询grade列是数字的数据
CAST()函数
把⼀个字段转成另⼀个字段,⽐起orcale,MySQL相⽐之下就简单得多了,只需要⼀个cast()函数就能搞定。其语法为:(字段名 as 类型 ),其中类型可以为:
CHAR[(N)] 字符型
DATE ⽇期型
DATETIME ⽇期和时间型
DECIMAL float型
SIGNED int
TIME 时间型
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论