hive 如何在配置单元中使用collec_set为null生成0

nbysray5  于 2022-11-05  发布在  Hive
关注(0)|答案(1)|浏览(233)

我们要求收集所有不同横切的值,并显示在“|“分隔,并且对于不可用的商家显示0。
表格_1
| 列1|第2列|第3列|
| - -|- -|- -|
| 小行星129867|支付|四个|
| 小行星18945|支付|五个|
| 小行星129867|付费频道|六个|
| 小行星18945|付费频道|四个|
| 小行星456312|支付|三个|

我们需要读取表1并将其转换为表2,如下所示:
表格_2
| 列1|第2列|
| - -|- -|
| 小行星129857| 4l6|
| 小行星18945| 5l4|
| 小行星456312| 3l 0个|

假设我们有两个商家,即PayTM和PayZAP,如何在Hive中实现这一点。
我试过了:

SELECT col1,
       Nvl(Concat_ws('|', Collect_set(col3)), 0) AS col2
FROM   table_1
GROUP  BY col1;

但我没有得到想要的结果。

fslejnso

fslejnso1#

如果您使用sql server,则使用string_agg

SELECT col1,
       CASE
         WHEN col2 NOT LIKE '%|%' THEN Concat(col2, '|0')
         ELSE col2
       END AS col2
FROM   (SELECT col1,
               String_agg(col3, '|') col2
        FROM   table
        GROUP  BY col1) B

在Hivesql中,我为您提供了

SELECT col1,
       CASE
         WHEN col2 NOT LIKE '%|%' THEN Concat_ws(col2, '|0')
         ELSE col2
       END AS col2
FROM   (SELECT col1,
               Concat_ws('|', Collect_set(col3)) AS col2
        FROM   table_1
        GROUP  BY col1) A

相关问题