如何在配置单元中的连续日期之间插入行数据?

7vux5j2d  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(364)

样本数据:

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\ U日期。如下所示:
输出应为:

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
amrnrhlw

amrnrhlw1#

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
;
c.customer  d.txn_date  tag
A   2017-01-01  1
A   2017-01-02  1
A   2017-01-03  0
A   2017-01-04  1
A   2017-01-05  0
B   2017-01-01  0
B   2017-01-02  0
B   2017-01-03  1
B   2017-01-04  0
B   2017-01-05  0
k2arahey

k2arahey2#

只需将增量内容(即文件(input.txt)中缺少的数据)用创建表时提到的相同分隔符分隔即可。
然后使用load data命令将这些记录插入表中。

load data local inpath '/tmp/input.txt' into table tablename;

你的数据不会按照你提到的顺序排列,它会附加到最后一个。您可以通过在select查询中添加orderbytxn\u date来检索订单。

相关问题