Я пытаюсь использовать AWS Data Pipeline для экспорта некоторых файлов jsonl из S3 в DynamoDB. Мы используем сценарии Hive для этого.
Сами данные выглядят следующим образом:
{"property":{"type":"retail","code":"A"},"comments":{"country":"UK","city":"Bristol"},"id":"7659403"}
Сценарий My Hive имеет следующий вид:
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;
Этот сценарий выполняется нормально, если данные типы являются примитивными (string, double и c). Но в этом случае есть 2 карты, и у меня возникают проблемы с выполнением одного и того же скрипта.
Я получаю ошибку:
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, поэтому я не уверен, что мне нужно делать.
Спасибо.