首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用红移频谱映射通用JSON字段

用红移频谱映射通用JSON字段
EN

Stack Overflow用户
提问于 2019-09-06 16:25:13
回答 1查看 949关注 0票数 0

我试图将红移频谱中的变量类型JSON字段转换为平面字符串,但一直得到column type VARCHAR for column STRUCT is incompatible

我试图查询的JSON数据有几个字段,这些字段的结构是固定的和预期的。但是,有一个字段包含元数据,它是一个没有特定格式的JSON (任何格式都是有效的)。例如:

代码语言:javascript
复制
{"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映射为

代码语言:javascript
复制
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

到目前为止,我还没有找到解决它的方法。有没有人遇到过这个或类似的问题?

EN

回答 1

Stack Overflow用户

发布于 2019-09-07 00:40:26

元数据字段不是有效的varchar,要成为有效的varchar字段,应如下所示

"metadata": '{"one": "two", "three": 4}}'

这不是正确的json格式。

我认为如果使用元数据作为结构来创建外部表,就可以对其进行查询

代码语言:javascript
复制
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>'

查询元数据字段时,需要指定。

代码语言:javascript
复制
SELECT metadata.details FROM my_data 

如果这对你有效,请告诉我。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57818334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档