hive ETL之订单物流系统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
   )
;
时间: 2024-11-04 09:56:01

hive ETL之订单物流系统sql的相关文章

集团公司(嵌入ETL工具)财务报表系统解决方案

集团公司(嵌入ETL工具)财务报表系统解决方案 一.项目背景: 某集团公司是一家拥有100多家子公司的大型集团公司,旗下子公司涉及各行各业,包括:金矿.铜矿.房产.化纤等.由于子公司在业务上的差异,子公司的财务报表也存在很多不同之处.因此,各个子公司需要根据自己的情况,制作符合自己个性化需求的报表模版,然后再部署到集团服务器进行统一管理. 集团使用的是SAP,所有子公司正是因这个系统而产生大量数据且这些数据保存在一起.此外,各子公司也有一些自己的系统,所以各自也会产生一些数据. 出于数据安全等因

插入订单并且输出订单号的sql存储过程

--插入订单-- create proc InsertOrders ( @OrderNumber varchar(300), @OrderState varchar(30), @OrderType varchar(30), @OrderTime DateTime, @OrderFirm varchar(300), @OrderMoney decimal(8,2), @SendWayMoney decimal(8,2), @RegisterId int, @CoalitionOrdersId in

Oracle EBS-SQL (OM-1):查询订单发货明细.sql

select mtrh.request_number                  发货单号,       mmt.transaction_date                  发货时间,       oola.creation_date                       下单时间,       nvl(fu.description, fu.user_name) 下单人员,       ott.name                                    订

Oracle EBS-SQL (OM-5):检查订单事务处理类型.sql

SELECT            HO.NAME OU                                                                           名称,           t.NAME                                                                   订单事务处理类型,           t.DESCRIPTION                           

数字化物流系统-北京开运联合

数字化物流系统,它融合了3G,4G通讯技术.智能移动终端.地理信息系统.GPS,RFID技术.商业智能等多种移动通讯.信息处理和计算机网络技术,以无线通讯技术为依托,使得系统的安全性和交互能力有了极大的提高,为物流行业用户提供了一种安全.快速的现代化数字物流解决方案.(更多关于数字化物流系统这个系统的相关情况,可以咨询手机号是:一三六六一二零四一四七)项目背景现代物流是社会化大生产条件下一种新的组织方式和管理技术,其核心是突出系统整合的理念,利用先进信息技术和供应链管理技术,对分散的运输.储存.

基于 HTML5 WebGL 的医疗物流系统

前言 物联网( IoT ),简单的理解就是物体之间通过互联网进行链接.世界上的万事万物,都可以通过数据的改变进行智能化管理.ioT 的兴起在医疗行业中具有拯救生命的潜在作用.不断的收集用户信息并且实时的进行诊断,所以未来 iot 肯定在医疗行业的应用会呈覆盖性.下面是我最近做的一个医疗物流系统,用来观察医疗物流过程. ht官网链接:http://www.hightopo.com/cn-index.html demo链接: https://www.hightopo.com/demo/pivas/

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

Hive| ETL清洗&amp; 查询练习

ETL清洗数据 导Jar包 <dependencies> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>RELEASE</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupI

仿5173游戏交易平台系统SQL注入(可直接脱裤)+Getshell

最近没事登登好几年前玩过的游戏看看,发现有人喊高价收号,这一看就是骗子,这等骗子还想骗我?我就来看看这逗逼是怎么骗人的,结果发现这人给了一个说是 5173平台交易的网站,叫我直接把号的信息填上去然后填好了之后就去他就会去购买,然后仔细看了一下平台,获取了源代码后看了一下~呵呵,漏洞还是有不 少的~ 仿5173网游交易平台游戏交易平台存在注入与getshell漏洞,可直接拖掉玩家数据~     发乌云上乌云不收,所以没事就发zone里给大家玩玩.其实这系统还是蛮多漏洞的,我最痛恨骗子了,大家能搞几