AWS Athena 查询镶木地板数据到 return JSON 输出
AWS Athena query on parquet data to return JSON output
我有以下设置。
- 应用程序将序列化的 JSON 数据发送到 Firehose。
- Firehose 配置为使用胶水 table 定义将数据转换为 praquet,以实现高效的查询执行。
- 我可以 运行 在 Athena 中查询并查看结果。
现在我需要创建另一个可以使用 AWSSDK (C#) 查询 Athena 并以 JSON 格式读回数据的应用程序。
是否可以使用 Athena SDK 以某种方式使用 table 的 input/output 格式和 serde 以 JSON 格式读回数据?或者我需要实现自定义逻辑以将数据转换回 JSON?
Athena 基于 Presto 0.172 版本,所以你会在 Presto documentation.For 实例中找到答案,本章对你有用:
问题很旧,但可能会帮助那些试图将结果从 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]
我有以下设置。
- 应用程序将序列化的 JSON 数据发送到 Firehose。
- Firehose 配置为使用胶水 table 定义将数据转换为 praquet,以实现高效的查询执行。
- 我可以 运行 在 Athena 中查询并查看结果。
现在我需要创建另一个可以使用 AWSSDK (C#) 查询 Athena 并以 JSON 格式读回数据的应用程序。
是否可以使用 Athena SDK 以某种方式使用 table 的 input/output 格式和 serde 以 JSON 格式读回数据?或者我需要实现自定义逻辑以将数据转换回 JSON?
Athena 基于 Presto 0.172 版本,所以你会在 Presto documentation.For 实例中找到答案,本章对你有用:
问题很旧,但可能会帮助那些试图将结果从 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]