Json 使用SerDe属性将雅典娜上的两列映射为一列

Json 使用SerDe属性将雅典娜上的两列映射为一列,json,hive,amazon-athena,hive-serde,Json,Hive,Amazon Athena,Hive Serde,我试图使用JsonSerDe属性将雅典娜上的两列映射为一列 在本例中,我希望将两列conversionsRate和cr从JSON1和2映射到列cr\u new(像合并一样) json1 json2 雅典娜的预期结果是: |deviceType|day |cr_new|clicksCount| |TABLET |2018-10-27|0 |3 | |TABLET |2018-10-29|2 |5 | 使用SerDe在at

我试图使用JsonSerDe属性将雅典娜上的两列映射为一列

在本例中,我希望将两列
conversionsRate
cr
从JSON1和2映射到列
cr\u new
(像合并一样)

json1

json2

雅典娜的预期结果是:

|deviceType|day       |cr_new|clicksCount|
|TABLET    |2018-10-27|0     |3          |
|TABLET    |2018-10-29|2     |5          |

使用SerDe在athena表映射上是否可能实现这样的结果?

JSON SerDe不强制(限制)表DDL中定义的列应该存在于JSON记录中。如果没有这样的属性,JSONSerDe将返回NULL。因此,您可以定义这两个列并在查询中应用合并:

CREATE EXTERNAL TABLE json_table (
  devicetype      string,
  `day`           date,
  cr              int,
  conversionsrate int,
  clickscount     int
 )
 ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
 LOCATION 's3://bucket/path/'; --JSON files location
                               --make sure JSONs are in separate lines each

select deviceType, `day`, coalesce(conversionsRate ,cr) as cr_new, clicksCount 
  from json_table ;

JSON SerDe不强制(限制)表DDL中定义的列应该存在于JSON记录中。如果没有这样的属性,JSONSerDe将返回NULL。因此,您可以定义这两个列并在查询中应用合并:

CREATE EXTERNAL TABLE json_table (
  devicetype      string,
  `day`           date,
  cr              int,
  conversionsrate int,
  clickscount     int
 )
 ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
 LOCATION 's3://bucket/path/'; --JSON files location
                               --make sure JSONs are in separate lines each

select deviceType, `day`, coalesce(conversionsRate ,cr) as cr_new, clicksCount 
  from json_table ;

您还可以在表的顶部定义一个视图,这样用户就不需要自己合并。Athena VIEW docs:,Presto VIEW docs:您还可以在表的顶部定义一个视图,这样用户就不需要自己合并。雅典娜查看文档:,Presto查看文档:
CREATE EXTERNAL TABLE json_table (
  devicetype      string,
  `day`           date,
  cr              int,
  conversionsrate int,
  clickscount     int
 )
 ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
 LOCATION 's3://bucket/path/'; --JSON files location
                               --make sure JSONs are in separate lines each

select deviceType, `day`, coalesce(conversionsRate ,cr) as cr_new, clicksCount 
  from json_table ;