hive ETL之物流行业-订单跟踪SLA sql

-- case1 --

--========== order_created ==========--
/*
10703007267488    2014-05-01 06:01:12.334+01
10101043505096    2014-05-01 07:28:12.342+01
10103043509747    2014-05-01 07:50:12.33+01
10103043501575    2014-05-01 09:27:12.33+01
10104043514061    2014-05-01 09:03:12.324+01
*/
CREATE EXTERNAL TABLE order_created (
    orderNumber STRING
  , event_time  STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
LOCATION '/tmp/db_case1/order_created';

CREATE EXTERNAL TABLE order_created_partition (
    orderNumber STRING
  , event_time  STRING
)
PARTITIONED BY (event_month string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
LOCATION '/tmp/db_case1/order_created_partition';

CREATE TABLE order_created_dynamic_partition (
    orderNumber STRING
  , event_time  STRING
)
PARTITIONED BY (event_month string)
;
insert into table order_created_dynamic_partition PARTITION (event_month)
select orderNumber, event_time, substr(event_time, 1, 7) as event_month from order_created;
set hive.exec.dynamic.partition.mode=nonstrict;

/*
    hive.exec.dynamic.partition=false
    hive.exec.dynamic.partition.mode=strict
    hive.exec.max.dynamic.partitions.pernode=100    Maximum number of dynamic partitions allowed to be created in each mapper/reducer node
    hive.exec.max.dynamic.partitions=1000           Maximum number of dynamic partitions allowed to be created in total
    hive.exec.max.created.files=100000              Maximum number of HDFS files created by all mappers/reducers in a MapReduce job
    hive.error.on.empty.partition=false
*/

select INPUT__FILE__NAME, ordernumber, event_time, BLOCK__OFFSET__INSIDE__FILE / (length(ordernumber) + length(event_time) + 2) + 1 from order_created_dynamic_partition;
select INPUT__FILE__NAME, ordernumber, event_time, round(BLOCK__OFFSET__INSIDE__FILE / (length(ordernumber) + length(event_time) + 2) + 1) from order_created_dynamic_partition;

desc formatted order_created_dynamic_partition;
desc formatted order_created_dynamic_partition partition (event_month='2014-05');

CREATE TABLE order_created_dynamic_partition_parquet (
    orderNumber STRING
  , event_time  STRING
)
PARTITIONED BY (event_month string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS parquet;

MSCK REPAIR TABLE order_created_dynamic_partition_parquet;

-- set to text file format, bug in hive
ALTER TABLE order_created_dynamic_partition_parquet PARTITION (event_month='2014-06') SET SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe';
ALTER TABLE order_created_dynamic_partition_parquet PARTITION (event_month='2014-06') SET FILEFORMAT textfile;
-- impala
ALTER TABLE order_created_dynamic_partition_parquet PARTITION (event_month='2014-06') SET FILEFORMAT textfile;

-- set to parquet file format, hive <= 0.12
ALTER TABLE order_created_dynamic_partition_parquet PARTITION (event_month='2014-07') SET SERDE 'parquet.hive.serde.ParquetHiveSerDe';
ALTER TABLE order_created_dynamic_partition_parquet PARTITION (event_month='2014-07') SET FILEFORMAT INPUTFORMAT 'parquet.hive.DeprecatedParquetInputFormat' OUTPUTFORMAT 'parquet.hive.DeprecatedParquetOutputFormat';
-- impala or hive 0.13
ALTER TABLE order_created_dynamic_partition_parquet PARTITION (event_month='2014-07') SET FILEFORMAT parquet;

insert into table order_created_dynamic_partition_parquet PARTITION (event_month='2014-07') select orderNumber, event_time from order_created;

--========== order_picked ==========--
/*
10703007267488    2014-05-01 07:02:12.334+01
10101043505096    2014-05-01 08:29:12.342+01
10103043509747    2014-05-01 10:55:12.33+01
*/
CREATE EXTERNAL TABLE order_picked (
    orderNumber STRING
  , event_time  STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
LOCATION '/tmp/db_case1/order_picked';

--========== order_shipped ==========--
/*
10703007267488    2014-05-01 10:00:12.334+01
10101043505096    2014-05-01 18:39:12.342+01
*/
CREATE EXTERNAL TABLE order_shipped (
    orderNumber STRING
  , event_time  STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
LOCATION '/tmp/db_case1/order_shipped';

--========== order_received ==========--
/*
10703007267488    2014-05-02 12:12:12.334+01
*/
CREATE EXTERNAL TABLE order_received (
    orderNumber STRING
  , event_time  STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
LOCATION '/tmp/db_case1/order_received';

--========== order_cancelled ==========--
/*
10103043501575    2014-05-01 12:12:12.334+01
*/
CREATE EXTERNAL TABLE order_cancelled (
    orderNumber STRING
  , event_time  STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
LOCATION '/tmp/db_case1/order_cancelled';

--=====================================--

CREATE TABLE order_tracking AS
SELECT orderNumber
     , max(CASE WHEN type_id="order_created"   THEN event_time ELSE '0' END) AS order_created_ts
     , max(CASE WHEN type_id="order_picked"    THEN event_time ELSE '0' END) AS order_picked_ts
     , max(CASE WHEN type_id="order_shipped"   THEN event_time ELSE '0' END) AS order_shipped_ts
     , max(CASE WHEN type_id="order_received"  THEN event_time ELSE '0' END) AS order_received_ts
     , max(CASE WHEN type_id="order_cancelled" THEN event_time ELSE '0' END) AS order_cancelled_ts
FROM (
    select orderNumber, "order_created"   as type_id, event_time FROM order_created
  UNION ALL
    select orderNumber, "order_picked"    as type_id, event_time FROM order_picked
  UNION ALL
    select orderNumber, "order_shipped"   as type_id, event_time FROM order_shipped
  UNION ALL
    select orderNumber, "order_received"  as type_id, event_time FROM order_received
  UNION ALL
    select orderNumber, "order_cancelled" as type_id, event_time FROM order_cancelled
) u
group by orderNumber;

select * from order_tracking order by order_created_ts limit 5;

--=====================================--

CREATE TABLE order_tracking_join AS
select t1.orderNumber
     , t1.event_time as order_created_ts
     , t2.event_time as order_picked_ts
     , t3.event_time as order_shipped_ts
     , t4.event_time as order_received_ts
     , t5.event_time as order_cancelled_ts
from (
  select ordernumber, max(event_time) as event_time from order_created group by ordernumber
) t1
left outer join (
  select ordernumber, max(event_time) as event_time from order_picked group by ordernumber
) t2
on t1.ordernumber = t2.ordernumber
left outer join (
  select ordernumber, max(event_time) as event_time from order_shipped group by ordernumber
) t3
on t1.ordernumber = t3.ordernumber
left outer join (
  select ordernumber, max(event_time) as event_time from order_received group by ordernumber
) t4
on t1.ordernumber = t4.ordernumber
left outer join (
  select ordernumber, max(event_time) as event_time from order_cancelled group by ordernumber
) t5
on t1.ordernumber = t5.ordernumber;

select * from order_tracking_join order by order_created_ts limit 5;

--=====================================--

select orderNumber
     , order_created_ts
     , order_picked_ts
     , order_shipped_ts
     , order_received_ts
     , order_cancelled_ts
  from order_tracking
 WHERE order_created_ts != '0' AND order_cancelled_ts = '0'
   AND (
    COALESCE(unix_timestamp(order_picked_ts, 'yyyy-MM-dd HH:mm:ss.S'), 0) - unix_timestamp(order_created_ts, 'yyyy-MM-dd HH:mm:ss.S') > 2 * 60 * 60
    OR
    COALESCE(unix_timestamp(order_shipped_ts, 'yyyy-MM-dd HH:mm:ss.S'), 0) - unix_timestamp(order_created_ts, 'yyyy-MM-dd HH:mm:ss.S') > 4 * 60 * 60
    OR
    COALESCE(unix_timestamp(order_shipped_ts, 'yyyy-MM-dd HH:mm:ss.S'), 0) - unix_timestamp(order_created_ts, 'yyyy-MM-dd HH:mm:ss.S') > 48 * 60 * 60
   )
;

select orderNumber
     , order_created_ts
     , order_picked_ts
     , order_shipped_ts
     , order_received_ts
     , order_cancelled_ts
  from order_tracking_join
 WHERE order_created_ts IS NOT NULL AND order_cancelled_ts IS NULL
   AND (
    COALESCE(unix_timestamp(order_picked_ts, 'yyyy-MM-dd HH:mm:ss.S'), 0) - unix_timestamp(order_created_ts, 'yyyy-MM-dd HH:mm:ss.S') > 2 * 60 * 60
    OR
    COALESCE(unix_timestamp(order_shipped_ts, 'yyyy-MM-dd HH:mm:ss.S'), 0) - unix_timestamp(order_created_ts, 'yyyy-MM-dd HH:mm:ss.S') > 4 * 60 * 60
    OR
    COALESCE(unix_timestamp(order_shipped_ts, 'yyyy-MM-dd HH:mm:ss.S'), 0) - unix_timestamp(order_created_ts, 'yyyy-MM-dd HH:mm:ss.S') > 48 * 60 * 60
   )
;

本文出自 “点滴积累” 博客,请务必保留此出处http://tianxingzhe.blog.51cto.com/3390077/1717573

时间: 2024-11-03 22:13:58

hive ETL之物流行业-订单跟踪SLA sql的相关文章

hive ETL之广告行业-用户行为归类sql

-- case2 -- --========== click_log ==========-- /* 11    ad_101    2014-05-01 06:01:12.334+01 22    ad_102    2014-05-01 07:28:12.342+01 33    ad_103    2014-05-01 07:50:12.33+01 11    ad_104    2014-05-01 09:27:12.33+01 22    ad_103    2014-05-01 09

物联网技术在物流行业的应用

物联网即将成为下一代互联网.会如同互联网一般得席卷整个世界,在波澜壮阔的物联网世界之中,我们的生活即将发生天翻地覆的变化.物流业是物联网很早就实实在在落地的行业之一,很多先进的现代物流系统已经具备了信息化.数字化.网络化.集成化.智能化.柔性化.敏捷化.可视化.自动化等先进的物联网技术特征. 物联网技术在物流行业的应用 概括起来,目前相对成熟的应用主要在如下四大领域: 一是产品的智能可追溯的网络系统:如食品的可追溯系统.药品的可追溯系统等等.这些智能的产品可追溯系统为保障食品安全.药品安全提供了

提升物流行业转化率 浅谈关键词的选取与分析

  做过物流网站的站长都知道,物流行业有太多的内容需要做,如果单纯的优化几个热门的关键词,想要让一个网站有流量.有转化率那是不可能的事,况且热门的关键词想要优化上去也不是一件轻松的事,全国那么多物流公司,竞争激烈不在话下,比如广州那边做物流网站的,我们可以到baidu搜索下找到相关结果约2,620,000个,还有一些百度推广的网站,从物流行业的发展趋势来看,它已成为一个热门的行业. 如今想要做好物流网站,光靠网站流量是不行的,有转化率能带来订单才是重点!很多站长就是有一种不满足的心理,从物流网站

当物流行业遇见MongoDB

简介 快递物流系统里最常见的一种业务类型就是订单的查询和记录.订单的特点是随着递送过程,订单数据需要随时更新路径.数据结构上需要可以灵活应对,这点非常符合Document模型,并且MongoDB支持GIS功能,非常适用于MongoDB来支撑物流业务.并且MongoDB具备Sharding能力,而物流行业里订单比较独立,夸订单的操作很少,而对单订单来说,更新追加的操作会较多,比如再物流中转处理上.所以物流业务模型上与MongoDB非常的匹配.以下讲解一个虚拟的DEMO,可供参考,用到的特性: Mo

最佳实践案例丨双十一来了,别让物流行业的敏感数据裸奔

双11购物狂欢节,阿里巴巴创造的节日,多少剁手党们翘首以盼.阿里更没让大家失望,原本24小时的狂欢,今年延长至24天,真是越玩越大的节奏.听到这个消息后,我想大概会有两个群体倍感压力,一个自然是负责清空购物车的老公们,另一个则是各大物流公司.稍等,我们今天要说的不是快递员,而是容易被大家遗忘的幕后英雄,物流行业的IT运维人. 几个月前,我们交流了一家来自上海的大型物流企业,现在,他们已经是安华金和的用户了.作为国内排名前三的大型物流企业,用户的信息系统建设起步较早,在2009年即启动建设以核心业

将物流行业送往智能时代,菜鸟网络的配送车已经上路了

过去十年,电子商务行业的高速发展有目共睹,网购已经成了年轻人日常生活中不可或缺的一部分,甚至衍生出了"6·18"."双11"这样的购物狂欢节,而且这股浪潮正逐渐渗透到线下.行业内关于"实体经济好,还是虚拟经济好"的论辩此起彼伏,答案莫衷一是.过去,实体经济和虚拟经济就像两个平行世界,一个漂浮在云端,一个立足于地面.但随着物流行业的崛起,这一现象正在发生改变. 在去年的全球智慧物流峰会上,马云曾表示,人们总说电子商务是过去十年最大的商业奇迹,但在他

互联网+”带给物流行业的8大变局

物流本身正在发生重大的战略性变局,过去我们一直把物流看作是其他产业支持性的产业,现在大家都说O2O,它的本质就是线上互联网,线下店铺.物流是什么?物流背后是在支持O2O发展的,实际上这个形态本身就会被颠覆,我们依然会看到线上,将来是没有线的.现在我们正进入移动互联时代,就是无线服务时代. 过去我们说线下,实际上将来是没有线下店的.线上是无线端的订单,线下就是物流端的递送.这里发生的最重要改变,就是国民经济产业的基本形态,是由无线端信息和物流端递送两者构成.这种业态发展对我们最重要的改变,就是颠覆

物流行业内部合理流程与管理

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 在供应链管理中,物流公司的作用在于以最低的总成本移动库存,在规定的时间内将其送往指定地点,并实现库存的定位.只有在恰当的时间将产品送到恰当的地点,完成所有权的转让或实现增值过程后,库存才具有了真正的价值.如果一家企业长期无法满足客户对交货时间和地点的要求,那么它最终将会失去所有客户.如果供应链希望借助天津物流来实现最大的战略收益,那么就必须将

物流行业驶进“春天里” 流通工作会议月底召开

每经记者 毛晋楠 唐强 继2011年国务院出台 <国务院办公厅关于促进物流业健康发展政策措施的意见>(以下简称物流国九条)后,物流行业有望再度迎来利好. 本周五,<每日经济新闻>从中国物流行业协会了解到,我国改革开放以来级别最高的一次全国流通工作会议将于下周举行.届时,会议将就物流行业中存在的诸多问题进行讨论解决,并将形成和出台一系列促进流通业发展的"实实在在"的政策. "是时候对物流行业进行合理规划了,随着政府紧锣密鼓地出台行业相关政策,有理由相信物