雅典娜问题-小写查询字符串

时间:2020-06-02 09:56:11

标签: amazon-web-services amazon-athena hive-serde

我有一个包含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.我的字符串和键为空-以“”为键的查询结构出现错误。

谢谢。

1 个答案:

答案 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')

希望这会对某人有所帮助。