Grouping/Windowing 在配置单元中
Grouping/Windowing in hive
在下图中,第一个是有问题的 table(提供的脚本),第二个是预期的输出。
在 C 列中,我们有不同的项目,如 T1、T2、T3,记录将按组提供,T1 记录然后是 T2 或 T3。这些之间不应该有任何间隙,T1 将开始和结束,然后只有 T2 项目可以出现。但如果 T1 在其他项目之后重新出现,我想换个角度考虑。 hive/spark的结果有哪些选择?
我尝试在一列中使用排名,然后在其他列中使用下一个值,并尝试 运行 进行一些比较,但这没有帮助。
请指点
CREATE TABLE TEST_A (A STRING, B STRING, C STRING);
INSERT INTO TEST_A (A, B, C) VALUES ('a','1-Jan','T1'), ('a','2-Jan','T1'),('a','3-Jan','T2'),('a','4-Jan','T3') ,('a','5-Jan','T1'),('a','6-Jan','T1')
这是一个间隙和孤岛问题。我打算建议将每个 "island" 相邻行放入单独的行中。
在这种情况下有效的一种方法是使用行号的差异:
select a, c, min(b), max(b)
from (select t.*,
row_number() over (partition by a order by b) as seqnum,
row_number() over (partition by a, c order by b) as seqnum_2
from t
) t
group by a, c, (seqnum - seqnum_2);
如果确实需要,您可以将其分为多列。但是,我认为这只会混淆问题,因为您可能不知道给定的 a
/c
组合有多少组。
在下图中,第一个是有问题的 table(提供的脚本),第二个是预期的输出。 在 C 列中,我们有不同的项目,如 T1、T2、T3,记录将按组提供,T1 记录然后是 T2 或 T3。这些之间不应该有任何间隙,T1 将开始和结束,然后只有 T2 项目可以出现。但如果 T1 在其他项目之后重新出现,我想换个角度考虑。 hive/spark的结果有哪些选择?
我尝试在一列中使用排名,然后在其他列中使用下一个值,并尝试 运行 进行一些比较,但这没有帮助。
请指点
CREATE TABLE TEST_A (A STRING, B STRING, C STRING);
INSERT INTO TEST_A (A, B, C) VALUES ('a','1-Jan','T1'), ('a','2-Jan','T1'),('a','3-Jan','T2'),('a','4-Jan','T3') ,('a','5-Jan','T1'),('a','6-Jan','T1')
这是一个间隙和孤岛问题。我打算建议将每个 "island" 相邻行放入单独的行中。
在这种情况下有效的一种方法是使用行号的差异:
select a, c, min(b), max(b)
from (select t.*,
row_number() over (partition by a order by b) as seqnum,
row_number() over (partition by a, c order by b) as seqnum_2
from t
) t
group by a, c, (seqnum - seqnum_2);
如果确实需要,您可以将其分为多列。但是,我认为这只会混淆问题,因为您可能不知道给定的 a
/c
组合有多少组。