我有一个包含JSON column_A的表。
我没有将column_A设置为结构,而是将column_A设置为查询JSON的字符串。
问题是当我查询column_A时,我收到的数据都是小写的。
CREATE EXTERNAL TABLE `table_test`(
`userid` string COMMENT 'from deserializer',
`column_a` string COMMENT 'from deserializer',
`createdat` string COMMENT 'from deserializer',
`updatedat` string COMMENT 'from deserializer')
ROW FORMAT SERDE
'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
'paths'='column_a,userId')
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://test-stackoverflow/'
TBLPROPERTIES (
'classification'='json',
'transient_lastDdlTime'='1567353697')
我知道这与SerDe有关,但是我不知道应该更改为什么。
我该怎么解决?
我未将column_A设置为struct的原因是:
1.密钥每次都在变化,据我所知,定义结构时需要设置密钥值。
2.我的字符串和键为空-以“”为键的查询结构出现错误。
谢谢。
答案 0 :(得分:0)
找到了解决方案。
问题出在SerDe
https://docs.aws.amazon.com/athena/latest/ug/json.html
需要在Serde属性中添加'case.insensitive'=“ FALSE”。
CREATE EXTERNAL TABLE `table_test`(
`userid` string COMMENT 'from deserializer',
`column_a` string COMMENT 'from deserializer',
`createdat` string COMMENT 'from deserializer',
`updatedat` string COMMENT 'from deserializer')
ROW FORMAT SERDE
'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
'case.insensitive'= "FALSE",
'paths'='column_a,userId')
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://test-stackoverflow/'
TBLPROPERTIES (
'classification'='json',
'transient_lastDdlTime'='1567353697')
希望这会对某人有所帮助。