我是一个完整的Hive noob,尝试使用EMR上的Hive查询解析转义的JSON数组字符串。从我的S3存储桶返回的每一行都是这样的:
["{\"code\": 14468278120, \"book_id\": \"rUkt3UHYyumTy7KCr7T72y\", \"description\": \”fantasyl\"}", "{\"code\": 14468304270, \"book_id\": \"wyyoenAWvmg3HhpZqVQr8i\", \"description\": \”sci fi\”}”, "{\"code\": 14468310080, \"book_id\": \"4UyygAduLhs3qyHTyJLZiD\", \"description\": \”history\”}”, "{\"code\": 14468313170, \"book_id\": \"6KPnPiTBViZJeG3eguUZig\", \"description\": \”architecture\”}”, "{\"code\": 14468313650, \"book_id\": \"U5zAirv3HYvGYANkmb64Yy\", \"description\": \”design\”}”]
到目前为止,任何使用Regex Serde和JSON SerDe从这些字符串中获取任何内容的尝试都会为每行返回NULL。
e.g。这将返回所有NULL
CREATE EXTERNAL TABLE kinesis_flagged (value STRING)
PARTITIONED BY (dt string)
ROW FORMAT SERDE 'com.amazon.elasticmapreduce.JsonSerde'
WITH SERDEPROPERTIES ('paths'='value')
LOCATION "s3n://S3_BUCKET_PATH";
其他令人尴尬的尝试包括:
CREATE EXTERNAL TABLE kinesis_flagged (value STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES ( 'input.regex'='\\{\\"code\\": (.+?), \\"book_id\\": \\"(.+?)\\", \\"description\\": \\"(.+?)\\"\\}"' )
LOCATION "s3n://S3_BUCKET_PATH";
关于我应该怎么做的任何想法?此外,如何创建一个包含列"代码"," book_id"和"说明"?
的表格答案 0 :(得分:0)
你不可能在JSON上使用正则表达式取得成功。你应该将其分解为两个任务;
1 - 使用库解析JSON 2 - 根据需要构建表格
除了一些虚假的双引号外,该示例看起来像普通的JSON。首先解决这个问题,否则你的JSON解析器会barf。