我正在尝试使用 JsonSerDe 属性在 Athena 上将两列映射到一列。
在这种情况下,我想将 jsons 1 和 2 的列conversionsRate
和cr
映射到第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 ;