AWS Athena 查询镶木地板数据到 return JSON 输出

AWS Athena query on parquet data to return JSON output

我有以下设置。

  1. 应用程序将序列化的 JSON 数据发送到 Firehose。
  2. Firehose 配置为使用胶水 table 定义将数据转换为 praquet,以实现高效的查询执行。
  3. 我可以 运行 在 Athena 中查询并查看结果。

现在我需要创建另一个可以使用 AWSSDK (C#) 查询 Athena 并以 JSON 格式读回数据的应用程序。

是否可以使用 Athena SDK 以某种方式使用 table 的 input/output 格式和 serde 以 JSON 格式读回数据?或者我需要实现自定义逻辑以将数据转换回 JSON?

Athena 基于 Presto 0.172 版本,所以你会在 Presto documentation.For 实例中找到答案,本章对你有用:

https://prestodb.io/docs/current/functions/json.html

问题很旧,但可能会帮助那些试图将结果从 Athena table 导出为不同输出格式的人。 AWS CTAS 可用于使用简单的 Athena CTAS (https://docs.aws.amazon.com/athena/latest/ug/create-table-as.html) 语句将数据导出为不同格式(ORC、PARQUET、AVRO、JSON 或 TEXTFILE)。您还可以指定用于保存输出数据的压缩格式。

以下示例会将数据导出为 s3 上的 JSON 格式。
output_location='s3://s3_bucket/output.json'

CREATE TABLE output
 WITH (
 format = 'JSON',
 external_location = output_location) AS SELECT * FROM target_table     

这种方法的缺点:输出总是被压缩。

所以我从雅典娜那里得到了这样的东西:

SELECT output FROM "test"."prod" limit 10;

{score=41, avg_time_solving={double=17439.333333333332, long=null}

如果我对这个字段使用强制转换,我得到:

SELECT CAST(output AS JSON) FROM "test"."prod" limit 10;

[51, [8205.57142857143,null], [null,5159], 7, [0.8571428571428571,null], null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]