Amazon web services 将Amazon Athena与DynamoDB备份集成

Amazon web services 将Amazon Athena与DynamoDB备份集成,amazon-web-services,amazon-dynamodb,amazon-athena,Amazon Web Services,Amazon Dynamodb,Amazon Athena,我有备份到S3中的DynamoDB表,需要一种(相当简单的)方式对数据进行定制查询,而Dynamo不支持这种方式。Athena似乎是使用S3备份作为proto DW/BI工具源代码的好方法 问题是,DyanmoDB备份到S3会以这种格式存储每一行 {"Column1":{"n":"1234"},"Column2":{"n":"5678"},"Column3":{"s":"abcd"}} 这使得雅典娜/普雷斯托很难阅读它。我可以使用 CREATE EXTERNAL TABLE test_tabl

我有备份到S3中的DynamoDB表,需要一种(相当简单的)方式对数据进行定制查询,而Dynamo不支持这种方式。Athena似乎是使用S3备份作为proto DW/BI工具源代码的好方法

问题是,DyanmoDB备份到S3会以这种格式存储每一行

{"Column1":{"n":"1234"},"Column2":{"n":"5678"},"Column3":{"s":"abcd"}}
这使得雅典娜/普雷斯托很难阅读它。我可以使用

CREATE EXTERNAL TABLE test_table (
    column1 struct<n:string>
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
创建外部表测试\u表(
第1列结构
)
行格式SERDE'org.openx.data.jsonserde.jsonserde'
但这并不理想,因为“数字”仍然被视为字符串。我考虑过下载文件,将JSON展平并重新上传到另一个地方,但这也不是有效的JSON。只有文件的每一行是有效的JSON


雅典娜有没有办法读取文件中的数据,以便正确导入字段类型?或者理想情况下,雅典娜有没有办法将{“n”:“1234”}整平为整数?

我不相信这是最理想的答案,但这是我找到的答案

Presto
允许您提取json和强制转换值。因此,您可以创建表并将列转换为正确的格式,而不是在读取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
您可以在此处了解更多信息:

另一种方法(尚未形成解决方案)是使用离子导出而不是JSON:
SELECT userid.s timestamp.n FROM tableToCreate WHERE reason.s = 'REASON'