使用serde属性将雅典娜上的两列Map为一列

332nm8kg  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(271)

我试图使用jsonserde属性将雅典娜上的两列Map为一列。
在这种情况下,我想Map这两列 conversionsRate 以及 cr 从JSON1和2到列 cr_new (像聚结一样)。
json1公司

{
  "deviceType": "TABLET",
  "day": "2018-10-27",
  "conversionsRate": 0,
  "clicksCount": 3
}

json2公司

{
  "deviceType": "TABLET",
  "day": "2018-10-29",
  "cr": 2,
  "clicksCount": 5
}

雅典娜的预期结果:

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

在使用serde的雅典娜表Map上有可能实现这样的结果吗?

vqlkdk9b

vqlkdk9b1#

json serde并不强制(限制)表ddl中定义的列应该存在于json记录中。如果没有这样的属性,jsonserde将返回null。因此,您可以定义这两个列并在查询中应用coalesce:

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 ;

相关问题