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



我正在尝试使用 JsonSerDe 属性在 Athena 上将两列映射到一列。

在这种情况下,我想将 jsons 1 和 2 的列conversionsRatecr映射到第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 在雅典娜表映射上实现这样的结果?

JSONSerDe不强制(限制(表中定义的列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 ;

最新更新