我正在尝试将 Redshift Spectrum 中的变量类型 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
.到目前为止,我找不到解决方法。
有没有人遇到过这个或类似的问题?
最佳答案
元数据字段不是有效的 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
让我知道这是否适合您。
关于hadoop - 使用 Redshift Spectrum 映射通用 JSON 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57818334/