gpt4 book ai didi

hadoop - Pig Latin等同于PostgreSQL generate_series()函数?

转载 作者:行者123 更新时间:2023-12-02 21:46:06 25 4
gpt4 key购买 nike

我正在使用Pig处理数据以每天创建一个小时报告。 (因此,我每天晚上发布该报告,其中包含代表过去24小时的24行。)从根本上讲,我正在执行以下操作:

REGISTER /path/to/pig/contrib/piggybank/java/piggybank.jar;                         
DEFINE ISOToUnix org.apache.pig.piggybank.evaluation.datetime.convert.ISOToUnix();
DEFINE UnixToISO org.apache.pig.piggybank.evaluation.datetime.convert.UnixToISO();
DEFINE ISOToHour org.apache.pig.piggybank.evaluation.datetime.truncate.ISOToHour();

absdata = LOAD 'absdata.csv' USING PigStorage(",") AS (ts:datetime, a:int, b:int);
reldata = FOREACH absdata GENERATE HoursBetween(ToDate(ISOToUnix(ISOToHour(UnixToISO(1000L*ToUnixTime(CurrentTime()))))), ToDate(ISOToUnix(ISOToHour(UnixToISO(1000L*ToUnixTime(ts)))))) AS hs, a, b;
aggdata = GROUP reldata BY hs;
report = FOREACH aggdata GENERATE group AS hs, SUM(aggdata.a) AS a, SUM(aggdata.b) AS b;
STORE report INTO '/my/reports' using PigStorage(',','-schema');

该报告应始终准确地包含24个数据行:过去24小时每小时1行。但是,我发现某些时候一天中的一个小时中,输入数据没有任何事件,因此缺少输出行。

在PostgreSQL中,我只需要使用 generate_series()生成我关心的所有时间,并使用一个快速的 LEFT OUTER JOIN来确保我在报表中拥有所有行。我发现在pig中 LEFT OUTER JOIN位很简单,但是 generate_series()位不是。

有相当于 generate_series()的 pig 吗?直接生成 datetime对象将是理想的选择,但是生成 int序列也将很好。

最佳答案

如果您有另一个具有> 24行的关系,请对该关系使用RANK函数,然后按等级列排序,限制为24,然后仅选择等级列。现在,您有一个精确的24行关系,每行代表1小时。
左外部将这个关系与您的最终报告关系合并。

关于hadoop - Pig Latin等同于PostgreSQL generate_series()函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25211504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com