雅典娜:根据Json数据创建表时重命名列

时间:2019-08-28 03:21:58

标签: presto amazon-athena aws-glue

json数据中的某些键(在S3中)包含特殊字符(+)。因此,我想在Athena中创建表时重命名这些字段。我找到this个文档,该文档谈论一个ColumnToJsonKeyMappings,我尝试使用它,但是重命名的字段没有填充任何数据。

这是我尝试过的示例DDL:

CREATE EXTERNAL TABLE `table_name`(
  `st` string COMMENT 'from deserializer', 
  `eid` string COMMENT 'from deserializer', 
  `cid_sid_et` string COMMENT 'from deserializer', 
  `v` string COMMENT 'from deserializer')
ROW FORMAT SERDE 
  'org.openx.data.jsonserde.JsonSerDe' 
WITH SERDEPROPERTIES ( 
  'paths'='cid+sid+et,eid,st,v',
  'ignore.malformed.json'='true',
  'ColumnToJsonKeyMappings'='{"cid_sid_et":"cid+sid+et"}') 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://location-of-data'
TBLPROPERTIES (
  'classification'='json')

1 个答案:

答案 0 :(得分:2)

通过使用以下格式进行工作:

CREATE EXTERNAL TABLE `table_name`(
  `st` string COMMENT 'from deserializer', 
  `eid` string COMMENT 'from deserializer', 
  `cid_sid_et` string COMMENT 'from deserializer', 
  `v` string COMMENT 'from deserializer')
ROW FORMAT SERDE 
  'org.openx.data.jsonserde.JsonSerDe' 
WITH SERDEPROPERTIES ( 
  'paths'='cid_sid_et,eid,st,v',
  'ignore.malformed.json'='true',
  'mapping.cid_sid_et'='cid+sid+et') 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://location-of-data'
TBLPROPERTIES (
  'classification'='json')