将 Amazon Athena 与 DynamoDB 备份集成
Integrating Amazon Athena with DynamoDB backups
我有备份到 S3 中的 DynamoDB 表,需要一种(相当少的)方法以 Dynamo 不支持的方式对我们的数据进行定制查询。 Athena 似乎是使用我们的 S3 备份作为原型 DW/BI 工具来源的好方法。
问题是 DyanmoDB 备份到 S3 以这种格式存储每一行
{"Column1":{"n":"1234"},"Column2":{"n":"5678"},"Column3":{"s":"abcd"}}
这让 Athena / Presto 难以阅读。我可以使用
导入数据
CREATE EXTERNAL TABLE test_table (
column1 struct<n:string>
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
但这并不理想,因为 'number' 仍被视为字符串。我考虑过下载文件,将 JSON 展平并重新上传到其他地方,但这也无效 JSON。只有文件的每一行有效 JSON.
Athena 是否有办法读取文件中的数据,以便正确导入字段类型?或者理想情况下,Athena 是否可以将 {"n":"1234"} 扁平化为 int?
我不认为这是最理想的答案,但这是我找到的答案。
Presto
允许您提取 json 以及转换值。因此,您可以创建 table 并将列转换为正确的格式,而不是在从 Athena 读取之前改变数据的存储方式:
CREATE EXTERNAL TABLE IF NOT EXISTS tableToCreate (
userid struct<s:string> ,
timestamp struct<n:bigint> ,
reason struct<s:string>
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://some-place
那么在查询的时候,在column.s或者column.n
上查询
SELECT userid.s timestamp.n FROM tableToCreate WHERE reason.s = 'REASON'
您可以在这里阅读更多相关信息:https://prestodb.io/docs/current/functions/json.html
我有备份到 S3 中的 DynamoDB 表,需要一种(相当少的)方法以 Dynamo 不支持的方式对我们的数据进行定制查询。 Athena 似乎是使用我们的 S3 备份作为原型 DW/BI 工具来源的好方法。
问题是 DyanmoDB 备份到 S3 以这种格式存储每一行
{"Column1":{"n":"1234"},"Column2":{"n":"5678"},"Column3":{"s":"abcd"}}
这让 Athena / Presto 难以阅读。我可以使用
导入数据CREATE EXTERNAL TABLE test_table (
column1 struct<n:string>
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
但这并不理想,因为 'number' 仍被视为字符串。我考虑过下载文件,将 JSON 展平并重新上传到其他地方,但这也无效 JSON。只有文件的每一行有效 JSON.
Athena 是否有办法读取文件中的数据,以便正确导入字段类型?或者理想情况下,Athena 是否可以将 {"n":"1234"} 扁平化为 int?
我不认为这是最理想的答案,但这是我找到的答案。
Presto
允许您提取 json 以及转换值。因此,您可以创建 table 并将列转换为正确的格式,而不是在从 Athena 读取之前改变数据的存储方式:
CREATE EXTERNAL TABLE IF NOT EXISTS tableToCreate (
userid struct<s:string> ,
timestamp struct<n:bigint> ,
reason struct<s:string>
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://some-place
那么在查询的时候,在column.s或者column.n
上查询SELECT userid.s timestamp.n FROM tableToCreate WHERE reason.s = 'REASON'
您可以在这里阅读更多相关信息:https://prestodb.io/docs/current/functions/json.html