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_日期