数组列值与配置单元中的正常列值之间的比较

Posted

技术标签:

【中文标题】数组列值与配置单元中的正常列值之间的比较【英文标题】:comparision between array column values with normal column values in hive 【发布时间】:2015-09-18 06:51:25 【问题描述】:

表1

列 1 列 2 1 1,2,10 2 11,12,13 3 1,2,14 4 20,1,10 5 11,12,13,14

表 2

列 1 列 2 1 次购买 2 产品视图 10 购物车打开 11 结帐 12 购物车 添加 13 购物车移除 14 购物车视图 20 广告系列视图

结果表应如下所示

Column1 Column2 DESC 1 1,2,10 购买,产品视图,购物车打开 2 11,12,13 结帐,购物车添加,购物车移除 3 1,2,14 购买,产品查看 4 20,1,10 广告系列查看、购买、购物车打开 5 11、12、13、14 结帐、购物车添加、购物车移除、购物车视图

注意:

Table1.column2[0]==table2.column1 然后它将在我们新添加的结果表的 desc 列中显示 table2.column2 的值。

我们可以在这个查询中使用 join 吗?如果是,我们如何在 hive 中做?

请帮忙解决这个要求。

提前致谢, 暗部k

【问题讨论】:

【参考方案1】:

查询

add jar /path/to/jars/brickhouse-0.7.1.jar;
create temporary function collect as "brickhouse.udf.collect.CollectUDAF";

select a.col1
  , collect(b.col1)
  , collect(b.col2)
from (
    select col1, exp_col2
    from db.tbl1
    lateral view explode(col2) exptbl as exp_col2 ) a
join db.tbl2 b
on b.col1=a.exp_col2
group by a.col1

输出

1       [1, 2, 10]         ["Purchase","Product View","Cart Open"]
2       [11, 12, 13]       ["Checkout","Cart Add","Cart Remove"]
3       [1, 2, 14]         ["Purchase","Product View","Cart View"]
4       [1, 10, 20]        ["Purchase","Cart Open","Campaign View"]
5       [11, 12 ,13 ,14]   ["Checkout","Cart Add","Cart Remove","Cart View"]

确保使用brickhouse collect 而不是内置collect_list(),因为后者不会(必然)保持顺序。

【讨论】:

您好,感谢您的回复。我是这个蜂巢的新手。我可以理解上面的查询,但你能告诉我如何创建临时函数 collect 作为“brickhouse.udf.collect.CollectUDAF”;。谢谢,Anbu k 你能把jar /path/to/jars/brickhouse-0.7.1.jar 的下载链接发给我吗?谢谢,Anbu k 它说明了如何在 repo 的主页上构建 jar。 你上面提到的brickhouse收集的链接没有打开。回购? 我想和你确认一下,table1 这意味着 a.column2 是一个数组而不是字符串。因为我在任何地方都没有看到 a.cloumn2[]。

以上是关于数组列值与配置单元中的正常列值之间的比较的主要内容,如果未能解决你的问题,请参考以下文章

将包含列表的记录值与 Postgres 中的列值进行比较

需要一种更好的方法来将一个列值与同一表行中的多个列值进行比较

将列值与第一行进行比较并保留 R 中的原始值

ExtJS 4.2网格单元格编辑如何将列值与组合显示值绑定

当行悬停并且列值与另一行匹配时显示工具提示

pyspark 将列值与另一列进行比较包含值范围