计算配置单元数组中连续日期之间的差异

2w2cym1i  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(395)

我正在使用配置单元,需要计算存储在表的每一行中的数组中的连续日期之间的差异(以天为单位),以便获得记录时间之间的间隔。每一行代表一个客户,并包含他们的交易日期。例如(最后一列是所需的输出):

customer_id | dates                                                |output 
--------------------------------------------------------------------------
0001        | ["2016-09-01","2017-01-01","2017-02-05","2017-11-01"]|[122,35,269]

目标是遍历表中的所有行,生成这个新列。客户将有不同数量的交易,所以我需要循环查看日期列表。

vsmadaxz

vsmadaxz1#

假设输入表是 array_test 输出表为 output_table . 此外,array\u测试包含列 customer_id string 以及 dates Array<string> 我在输入表中插入的数据是:

insert into array_test select "0001",ARRAY("2016-09-01","2017-01-01","2017-02-05","2017-11-01")
insert into array_test select "0001",ARRAY("2016-09-01","2017-01-01","2017-02-05","2017-11-02")

我使用的输出表create语句是:

CREATE TABLE output_table(customer_id string,dates array<string>,output array<int>);

然后使用以下查询从输入表中选择并插入到输出表中:

insert into output_table select customer_id,dates, ARRAY(datediff(to_date(dates[1]), to_date(dates[0])),datediff(to_date(dates[2]), to_date(dates[1])),datediff(to_date(dates[3]), to_date(dates[2]))) from array_test;

以下是输出:

hive> select output from output_table;
OK
[122,35,269]
[122,35,269]
[122,35,270]
[122,35,270]
Time taken: 0.071 seconds, Fetched: 4 row(s)

相关问题