hive-json-serde-不填充空格的键

llew8vvj  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(335)

我有一个基于json文件构建的外部表。所有的json键都是列,按预期填充,只有一个键有空格。
以下是ddl: CREATE EXTERNAL TABLE foo.bar ( event ARRAY <STRUCT value:STRING ,info:STRUCT <id:STRING ,event_source:STRING>> ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' WITH SERDEPROPERTIES("mapping.event_source"="event source") STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 'foo/bar' 除event\ u source显示为null外,所有值都按预期显示。json文件中事件源的原始形式是没有单引号的“事件源”。我是否需要对with SERDEPROPERTYS设置执行一些不同的操作才能使密钥正常工作?
谢谢

6qfn3psc

6qfn3psc1#

你的意思是json有如下数据

{ id: "myid", event source: "eventsource" }

如果是这样的话,那就没什么可以做的了,因为它只是一个破json。如果没有,你能发布一个你想要阅读的json的示例吗?

ubby3x7f

ubby3x7f2#

我遇到了与上述类似的问题,但有一点变化,即输入数据是正确的json。
我有一个基于json文件构建的外部表。所有的json键都被填充,除了一个msrp\U货币,这里是ddl:

CREATE EXTERNAL TABLE foo.bar
( id string,
variants array<struct<pid:string, msrp_currency:string>>
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES ( "ignore.malformed.json" = "true" ,
'mapping.variants.msrp_currency' = 'variants.msrpcurrency')
LOCATION 'foo/bar'

除msrp\u currency显示为null外,所有值都按预期显示。我需要引入下划线的原因是因为稍后我需要使用brickhouse提取与msrpcurrecny相同的字段值。
样本值:

{ "pid": "mypid", "msrpCurrency": "USD" }

相关问题