我试图将红移频谱中的变量类型JSON字段转换为平面字符串,但一直得到column type VARCHAR for column STRUCT is incompatible。
我试图查询的JSON数据有几个字段,这些字段的结构是固定的和预期的。但是,有一个字段包含元数据,它是一个没有特定格式的JSON (任何格式都是有效的)。例如:
{"fixed_integer": 1, "fixed_date": "2019-01-01", "metadata": {"one": "two", "three": 4}}
{"fixed_integer": 1, "fixed_date": "2019-01-01", "metadata": {"five": [1, 2], "six": false}}我可以将代码与DDL映射为
CREATE EXTERNAL TABLE my_data(
fixed_integer int,
fixed_date varchar,
metadata varchar
)没有抱怨,但是当我尝试用一个简单的SELECT metadata FROM my_data查询数据时,我得到
declared column type VARCHAR for column STRUCT is incompatible。
到目前为止,我还没有找到解决它的方法。有没有人遇到过这个或类似的问题?
发布于 2019-09-07 00:40:26
元数据字段不是有效的varchar,要成为有效的varchar字段,应如下所示
"metadata": '{"one": "two", "three": 4}}'
这不是正确的json格式。
我认为如果使用元数据作为结构来创建外部表,就可以对其进行查询
CREATE EXTERNAL TABLE my_data(
fixed_integer int,
fixed_date varchar,
metadata struct <details:varchar(4000)>
)
row format serde 'org.openx.data.jsonserde.JsonSerDe'
with serdeproperties (
'dots.in.keys' = 'true',
as location '<s3 location>'查询元数据字段时,需要指定。
SELECT metadata.details FROM my_data 如果这对你有效,请告诉我。
https://stackoverflow.com/questions/57818334
复制相似问题