Hive json serde - 没有填充白色空格的键

时间:2016-02-23 23:42:49

标签: json hadoop hive whitespace

我有一个由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_source(显示为NULL)之外,所有值都按预期显示。 json文件中event_source的原始形式是“event source”,没有单引号。 为了让密钥正常工作,我需要做些与WITH SERDEPROPERTIES设置不同的事情吗?

由于

2 个答案:

答案 0 :(得分:0)

你的意思是json有像

这样的数据
string

如果是这样,那就没有太多可以做的了,因为它只是破坏了JSON。 如果没有,你可以发布你想要阅读的JSON样本吗?

答案 1 :(得分:0)

我遇到了与上面类似的问题,但输入数据的变化很小json。

我有一个由json文件构建的外部表。除了一个msrp_currency之外,所有json密钥都被填充 这是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_currency(显示为NULL)之外,所有值都按预期显示。我需要引入下划线的原因是因为后来我需要使用brickhouse to_json UDF提取与msrpCurrecny相同的字段值。

样本值:

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