【问题标题】:Map two columns into one on Athena using SerDe properties使用 SerDe 属性将 Athena 上的两列映射为一列
【发布时间】:2020-01-17 13:50:37
【问题描述】:

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

在这种情况下,我想将两个列 conversionsRatecr 从 jsons 1 和 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 在 athena 表映射上实现这样的结果?

【问题讨论】:

    标签: json hive amazon-athena hive-serde hiveddl


    【解决方案1】:

    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 ;
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多