用红移频谱Map通用json字段

sr4lhrrt  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(447)

我试图将红移频谱中的变量类型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}}

我可以将代码与ddlMap为

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 .
到目前为止,我还没有找到解决办法。有人遇到过这样或类似的问题吗?

byqmnocz

byqmnocz1#

元数据字段它不是一个有效的varchar,要成为一个有效的varchar字段它应该如下所示 "metadata": '{"one": "two", "three": 4}}' 不是正确的json格式
我认为,如果您使用元数据作为struct创建外部表,您可以查询它

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

让我知道这是否适合你。

相关问题