我正在尝试使用aws数据管道将一些jsonl文件从s3导出到dynamodb。我们正在使用配置单元脚本来执行此操作。
数据本身如下: {"property":{"type":"retail","code":"A"},"comments":{"country":"UK","city":"Bristol"},"id":"7659403"}
我的配置单元脚本如下:
ADD JAR s3://bucket/json-serde-1.3.8-jar-with-dependencies.jar;
DROP TABLE IF EXISTS json_export_ddb;
CREATE EXTERNAL TABLE json_export_ddb (
property map<string,string>,
comments map<string,string>,
id string)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES ( 'paths'='property, comments, id' )
STORED AS TEXTFILE
LOCATION 's3:/bucket/subdirectory';
DROP TABLE IF EXISTS json_hive;
CREATE EXTERNAL TABLE json_hive (
property map<string,string>,
comments map<string,string>,
id string)
STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'
TBLPROPERTIES (
"dynamodb.table.name" = "dynamoTableName",
"dynamodb.column.mapping" = "property:property,comments:comments,id:id");
INSERT OVERWRITE TABLE json_hive SELECT * FROM json_export_ddb;
如果数据类型是primitive(string、double等),那么这个脚本执行得很好。但在本例中,有两个Map,我在执行同一个脚本时遇到了问题。
我得到的错误是:
Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error while processing row {"property":{"type":"retail","code":"A"},"comments":{"country":"UK","city":"London"},"id":"7659403"}
Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1
我一整天都在犯这个错误,仍然不知道自己做错了什么。错误本身很明显,它需要一个json对象,但得到的却是一个字符串。那东西,绳子在哪里?json似乎以 {
(如错误日志中所示)。
我看了其他类似的帖子,但他们直接使用gson,而在这个例子中,它是一个外部服务导入gson,所以我不知道我要做什么。
谢谢您。
暂无答案!
目前还没有任何答案,快来回答吧!