Date 如何在配置单元中的连续日期之间插入行数据?
样本数据:Date 如何在配置单元中的连续日期之间插入行数据?,date,hadoop,insert,hive,hiveql,Date,Hadoop,Insert,Hive,Hiveql,样本数据: customer txn_date tag A 1-Jan-17 1 A 2-Jan-17 1 A 4-Jan-17 1 A 5-Jan-17 0 B 3-Jan-17 1 B 5-Jan-17 0 需要填写2017年1月1日至2017年1
customer txn_date tag
A 1-Jan-17 1
A 2-Jan-17 1
A 4-Jan-17 1
A 5-Jan-17 0
B 3-Jan-17 1
B 5-Jan-17 0
需要填写2017年1月1日至2017年1月5日期间缺失的txn_日期。如下图所示:
输出应为:
customer txn_date tag
A 1-Jan-17 1
A 2-Jan-17 1
A 3-Jan-17 0 (inserted)
A 4-Jan-17 1
A 5-Jan-17 0
B 1-Jan-17 0 (inserted)
B 2-Jan-17 0 (inserted)
B 3-Jan-17 1
B 4-Jan-17 0 (inserted)
B 5-Jan-17 0
只需将增量内容(即fileinput.txt中缺少的数据)用创建表时提到的相同分隔符分隔即可
load data local inpath '/tmp/input.txt' into table tablename;
然后使用load data命令将这些记录插入表中
load data local inpath '/tmp/input.txt' into table tablename;
您的数据不会按照您提到的顺序排列,它会附加到最后一个。您可以通过在select查询中添加order by txn_date来检索订单
select c.customer
,d.txn_date
,coalesce(t.tag,0) as tag
from (select date_add (from_date,i) as txn_date
from (select date '2017-01-01' as from_date
,date '2017-01-05' as to_date
) p
lateral view
posexplode(split(space(datediff(p.to_date,p.from_date)),' ')) pe as i,x
) d
cross join (select distinct
customer
from t
) c
left join t
on t.customer = c.customer
and t.txn_date = d.txn_date
;
这是您实际使用的日期格式吗?任何日期格式都可以。缺少的日期对于每个客户都是不同的。假设我有一百万个客户,代码应该知道其中谁缺少日期,并将其填入,以便所有客户都有1-5个txn_日期。选择c.sub_id,d.txn_dt,coalesct.dwe_sms,0作为dwe_sms from select castdate_addto_date from_unixtimeux_timestampfrom_date,ddMMMyyyy,i作为日期作为txn_dt从选择castto_datefrom_unixtimeunix_时间戳'2017年1月1日',ddMMMyyyy作为日期作为日期作为日期从日期,castto_datefrom_Unix_时间戳'2017年1月31日',ddmmmyyyyy作为日期作为日期作为日期作为日期作为日期p横向视图posexplodesplitspacedatediffp.到日期,p.from_date-1,pe作为i,这是一个经过测试的代码,我的答案中的结果是实际的执行结果。您遇到了什么问题?交叉连接从JBD_DOSSWE_T2_B中选择不同的sub_id c左连接JBD_DOSSWE_T2_B on t.sub_id=c.sub_id和t.txn_dt=d.txn_dt抱歉代码失真。是的,代码没问题。当我将其更新为包含日期操纵时,正是a出现问题的时候。您不需要操纵from_日期和to_日期,可能是txn_日期