greenplum STRING_AGG 函数转换为 hiveSQL

Posted

技术标签:

【中文标题】greenplum STRING_AGG 函数转换为 hiveSQL【英文标题】:greenplum STRING_AGG functions convert to hiveSQL 【发布时间】:2021-10-20 11:54:51 【问题描述】:

我们必须将 greenplum sql 迁移到 hivesql 并且下面的查询不支持 string_agg 关键字。请帮助我们。

select data_date, subscriber_id, msisdn, product, validity,
    STRING_AGG(d0,'xx') d0, STRING_AGG(d1,'') d1, STRING_AGG(d2,'') d2, STRING_AGG(d3,'') d3, STRING_AGG(d4,'') d4,
    STRING_AGG(d5,'') d5, STRING_AGG(d6,'') d6, STRING_AGG(d7,'') d7, STRING_AGG(d8,'') d8, STRING_AGG(d9,'') d9, STRING_AGG(d10,'') d10,
    STRING_AGG(d11,'') d11
from tmp_subscription_base_02
group by 1,2,3,4,5

hivesQL 中不支持 string_agg。

【问题讨论】:

【参考方案1】:

string_agg(expression, delimiter) 聚合函数可以在 Hive 中替换为

concat_ws(delimiter,collect_list(cast(expression as string))

或者如果您需要连接 DISTINCT 值:

concat_ws(delimiter,collect_set(cast(expression as string))

注意:如果expression是字符串类型,cast(expression as string)不是必须的,直接使用expression

【讨论】:

请验证以下查询是否正确 选择data_date、subscriber_id、msisdn、product、validity、concat_ws('xx',collect_list(cast(d0 as string))) d0, concat_ws('',collect_list(cast(d1 as string) )) d1, concat_ws('',collect_list(cast(d2 as string))) d2, concat_ws('',collect_list(cast(d3 as string))) @karthikelavan 是的,它应该可以工作。 非常感谢您的帮助,是的,它工作正常

以上是关于greenplum STRING_AGG 函数转换为 hiveSQL的主要内容,如果未能解决你的问题,请参考以下文章

GreenPlum之按月份或季度实现行转列

MS SQL Server的STRING_SPLIT和STRING_AGG函数

Greenplum plpgsql 函数在输入结束时返回语法错误

将 T-SQL string_agg 转换为 LINQ C#

PG 函数-string_agg

oracle 新建的用户很多函数用不了,如何赋权?例如10g某个用户用不了STRING_AGG,STRING_AGG