8288分类目录 8288分类目录 8288分类目录
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

Hive 常见函数

来源:本站原创 浏览:78次 时间:2022-01-27
1. HQL 判断空的函数

https://www.w3school.com.cn/sql/func_date_format.asp

2. 时间转换函数

year(string date):返回年份部分的日期或时间戳字符串:year("1970-01-01 00:00:00") = 1970, year("1970-01-01") = 1970

https://blog.csdn.net/wzzfeitian/article/details/55097563

https://www.y�ɼ�,�ɾ�iibai.com/hive/hive_built_in_functions.html

3. group by 函数,需要多次进行分组

数据类型转换:https://blog.csdn.net/qq_31573519/article/details/100139218

4. hive获取上个月第一天和最后一天的时间
//获取上个月第一天date('Y-m-01',strtotime('-1 month')); //获取上个月最后一天date('Y-m-t',strtotime('-1 month'));

SELECT--上个月第一天concat(SUBSTR(DATE_SUB(FROM_UNIXTIME(UNIX_TIMESTAMP()),DAY(FROM_UNIXTIME(UNIX_TIMESTAMP()))),1,7) ,'-01'),--上个月最后一天DATE_SUB(FROM_UNIXTIME(UNIX_TIMESTAMP()),DAY(FROM_UNIXTIME(UNIX_TIMESTAMP())))select--上个月第一天trunc(add_months(CURRENT_TIMESTAMP,-1),'MM'),--上个月第一天concat(substr(add_months(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),-1),1,7),'-01'),--上个月最后一天date_sub(trunc(CURRENT_TIMESTAMP,'MM'),1);

5. 当月第一天
-- 当月第一天SELECT TRUNC(sysdate(0), 'MM') ;

6. 前两个月第一天
-- 前两个月第一天select TRUNC(add_months(CURRENT_TIMESTAMP, -2), 'MM');

7. CAST 转换小数保留位数
cast(column_name as decimal(10,2)) cast函数四舍五入(推荐使用)select cast(68.666666666666668 as decimal(10,2));_c068.67select cast(68.666666666666668 as decimal(10,3));_c068.667

8. 求两数除数,保留两位小数
ROUND((SUM(delivered_num) / SUM(plan_num) * 100),2)cast(column_name as decimal(10,2)) cast函数四舍五入(推荐使用)CAST((SUM(delivered_num) / SUM(plan_num) * 100) AS DECIMAL(10, 2))

9. Presto 引擎的数值转换
SELECT CAST(    CAST('913' AS DOUBLE) / CAST('1000' AS DOUBLE) * cast('100' as DOUBLE) as DECIMAL(10,2));先转成 double,在进行乘除运算,最后再转成 decimal==> 91.3列别名一定要用"双引号"

10. if 语句

if null 判断语句

函数:1. coalesce( value1,value2,… )2. if( value1 is null, value2, value1)IF( Test Condition, True Value, False Value ) 例子:hive> select coalesce(col1, col2, cols) as res1, if(col1 is null, if(col2 is null, col3, col2), col1) as res2    > from(    >     select 1 as col1, 2 as col2, 3 as col3     >     union all    >     select null as col1, 2 as col2, 3 as col3     >     union all    >     select null as col1, null as col2, 3 as col3     >     union all     >     select null as col1, null as col2, null as col3    > ) as test结果:    res1   res2    1      1    2      2    3      3    null   null

11. 一对多表关联去重统计

背景:假设我们是一个电商网站,用用户下单,订单有来源数据,每个订单会有多个订单明细,订单明细记录了商品相关信息、以及商品的出库、发货、收货时间都不同。

需求:想要统计订单维度相关的数据,要求统计出订单不同来源下的出库单量、发货单量、收货单量。

分析:订单和订单明细是一对多的关系,一个订单有多个明细,每个明细的商品都有各自的出库、发货、收货时间,也有可能未及时发货、出库、收货之类的导致为空,想要按照订单维度统计这些量,只需要判断订单中对应的多个明细中,只有出库、发货。收货时间即可,然后再汇总。

实现:

  1. 先统计基础的数据,订单与订单明细关联,查询订单id、订单来源、以及根据出库时间、发货时间、收货时间是否存在来判断是否出库、是否发货、是否收货;
  2. 根据订单来源、订单id进行分组,然后利用单行函数 max 取出具体id分组下的是否出库、发货、收货值;
  3. 最后在统计上一步查的数据,再按照订单来源分组,利用单行函数 sum 来求订单总数、出库、发货、收货总单量。

此时就需要使用 group by 进行分组,同时,分组完毕之后,在 select 列上需要针对未分组的字段进行单行函数,比如 max、min、sum等等。

with base_data as (selectsource, -- 下单来源max(if_out) if_out, -- 是否出库max(if_send) if_send, -- 是否发货max(if_received) if_received -- 是否收货from (selecto.id, -- 订单ido.source, -- 来源(case when od.out_time is not null then 1else 0end) as if_out, -- 是否出库(case when od.send_time is not null then 1else 0end) as if_send, -- 是否发货(case when od.received_time is not null then 1else 0end) as if_received -- 是否收货from order oleft join order_detail od on o.id = od.order_idwhere o.create_time > '2021-04-01') a group by source,id)selectsource, -- 下单来源sum(1), -- 订单数量sum(if_out), -- 出库总单量sum(if_send), -- 发货总单量sum(if_received) -- 收货总单量from base_datagroup by source

其实就是一个订单包含多个商品数据,每个商品的三种不同的时间都不同,想要算按照整个订单来统计三个时间,只需要取订单对应的多个商品数据,取它们的最小或最大时间来进行分组统计。

注意 distinct 只是针对整行数据去重,如果查询结果有多列,比如 user_id、name、age、order_id 等等,查询的数据中 user_id、name、age 都是一样的,但是 order_id 有多个,那么使用 distinct 只会去除四个字段相同的行数据。

  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net