Athena是否支持类似于STRING_AGG的函数来查询表格?

0

【以下的问题经过翻译处理】 我想用SQL中的STRING_AGG函数将来自Athena的不同行的字符串值连接起来。 Athena报错说STRING_AGG未注册。

语法错误:第1行8处:函数string_agg未注册。

有没有注册STRING_AGG函数的方法? 或者,是否有其他方法可以实现我想要的效果?

以下是我的SQL语句:

select STRING_AGG(item,“,”), STRING_AGG(event_subtype,“,”), STRING_ADD(event_dt_utc,“,”) from ( (select user_id as user,advertiser_id as advertiser,tracked_item as item,event_subtype,event_dt_utc from fact_mouse_conversions_glue where total_product_sales > 0 and user_id IS NOT NULL and tracked_item IS NOT NULL) union all (select user_id as user,advertiser_id as advertiser,tracked_item as item,event_subtype,event_dt_utc from fact_clickstream_conversions_glue where user_id IS NOT NULL and tracked_item IS NOT NULL)) group by user

profile picture
EXPERTE
gefragt vor 6 Monaten1 Aufrufe
1 Antwort
0

【以下的回答经过翻译处理】 在Athena中不支持STRING_AGG函数。如果要查看Athena支持哪些函数,请根据您使用的引擎的V2或V3版本,查看https://docs.aws.amazon.com/athena/latest/ug/functions.html。也许在V3中可以使用LISTAGG函数解决您的问题,请参阅https://trino.io/docs/current/functions/aggregate.html#listagg

让我回答您的另一个问题。是的,您可以在Amazon Athena中注册自定义函数。Athena允许您创建自定义标量函数,这些函数定义在Java或Scala JAR文件中,并且已在Athena中进行注册。然后,您可以在Athena查询的SELECT、FROM、WHERE和HAVING子句中使用这些自定义函数。

要创建自定义函数,您需要按照以下步骤进行操作:

  1. 用Java或Scala编写函数代码,并将其打包成JAR文件。函数必须实现org.apache.hadoop.hive.ql.exec.UDF接口,并包含@UDFType@Description注释。

  2. 创建Amazon S3存储桶以存储JAR文件。

  3. 将JAR文件上传到S3存储桶中。

  4. 运行CREATE FUNCTION语句在Athena中创建函数。此语句的语法如下:

    CREATE FUNCTION [function_name]
    AS 'com.example.MyFunction'
    USING JAR 's3://[bucket_name]/[jar_file_name]';
    

    将function_name替换为您要给函数取的名称,将com.example.MyFunction替换为JAR文件中函数类的完全限定名称,将s3://[bucket_name]/[jar_file_name]替换为S3中JAR文件的位置。

函数创建后,您可以像使用其他函数一样在Athena查询中调用它。例如:

SELECT my_function(column) FROM table;

希望这可以帮助您!

profile picture
EXPERTE
beantwortet vor 6 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen