如何在hive中使用collec_set为null生成0

发布于 2025-01-14 14:58:16 字数 1247 浏览 1 评论 0原文

我们需要收集所有不同横断面的值并显示在“|”中分隔并显示 0 表示不可用的商家。

table_1

col1col2col3
129867paytm4
18945paytm5
129867payzap6
18945payzap4
456312paytm3

在此处输入图像描述

我们需要读取 table1 并将其转换为 tabl2,如下所示:

table_2

col1col2
1298574l6
189455l4
4563123l0

在此处输入图片描述

假设我们有两个商家,即 paytm 和 payzap,如何实现这一点蜂巢。

我已经尝试过:

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

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

We have requirement to collect the values for all the different transection and display in "|" delimited and display 0 for the not available merchant.

table_1

col1col2col3
129867paytm4
18945paytm5
129867payzap6
18945payzap4
456312paytm3

enter image description here

we need to read the table1 and transform it into tabl2 as given below:

table_2

col1col2
1298574l6
189455l4
4563123l0

enter image description here

suppose we have two merchant i.e paytm and payzap, how to achieve this in hive.

I have tried like:

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

but I am not getting desired result.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

伤痕我心 2025-01-21 14:58:16

如果您使用 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  

If you using sql server then use 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  

In Hivesql I have provided you with syntax

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  
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文