问题描述
我正在尝试使用 Athena 查询 Ion format 中由最近添加的 DynamoDB 备份导出到 S3 功能生成的一些文件。
这是一种非常愚蠢的格式,基本上是字符串 $ion_1_0
后跟 json。前面未加引号的 $ion_1_0
字符串使数据无效的 json。
我尝试使用来自 here 的 Ion Serde:
CREATE EXTERNAL TABLE mydb.mytable (
`myfields` string,...
)
ROW FORMAT SERDE 'com.amazon.ionhiveserde.IonHiveSerDe'
LOCATION 's3:/.../dynamodb-export/AWSDynamoDB/01608775578817-a6944d97/data/'
TBLPROPERTIES ('has_encrypted_data'='true');
但是得到了这个:
失败:执行错误,从 org.apache.hadoop.hive.ql.exec.DDLTask 返回代码 1。无法验证 serde:com.amazon.ionhiveserde.IonHiveSerDe
更新
其实格式比我想象的还要差一点。字段名称不加引号。所以即使去掉 $ion 前缀,它也不是完全有效的 json。
解决方法
ION 是一种开源文本格式,它是 JSON 的超集。您是否尝试过用胶水转换 ION 文件? ION 是支持的格式选项之一(用于输入):https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-format.html
此 QLDB 研讨会在其示例中使用 ION,您可以探索 cloudformation 模板/yaml 或部署工作流并深入挖掘它创建的爬虫和作业以获得一些想法:https://qldb-immersionday.workshop.aws/en/lab3/task3.html
查看 ION 食谱以获取更多信息:https://amzn.github.io/ion-docs/guides/cookbook.html