Json 使用SerDe属性将雅典娜上的两列映射为一列
我试图使用JsonSerDe属性将雅典娜上的两列映射为一列 在本例中,我希望将两列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
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 ;