【问题标题】:Amazon Athena - Nested JSON ReadAmazon Athena - 嵌套 JSON 读取
【发布时间】:2019-09-17 13:30:00
【问题描述】:

我有以下 json 对象结构

{
  "id": "1",
  "media": {
    "twitter": "",
    "facebook": "{\"id\":\"9999\",\"first_name\":\"abc\",\"last_name\":\"xyz\",\"name\":\"abc xyz\"}"
  }
}

以下是表定义

CREATE EXTERNAL TABLE Ext_JSON_data(
id string,
media map<string,struct<id:string,first_name:string,last_name:string,name:string,email:string>>
  )
ROW FORMAT SERDE 
  'org.openx.data.jsonserde.JsonSerDe' 
WITH SERDEPROPERTIES (  
'serialization.format' = '1'
  )
LOCATION
  's3://bucket/folder/'

谁能帮我在 Athena 中读取这个 JSON 数据

【问题讨论】:

  • 你有点少了一层抽象,不是吗? { id, media: { facebook : { id, first, last } } } 在您的媒体地图 定义
  • 对不起,我无法得到你的提示。请您详细解释一下吗?
  • 我没有时间形成正确的答案,但是你显示的数据sn-p,有数据:{“id”:“”,“媒体”:{“facebook”:{“ id": "", "name": "" }, "twitter": "" } } ,在你的 Athena 定义中就像你假设 { "id": "", "media": { "id": "" , "名称": "" } }
  • 我猜你正在寻找类似json_parse (prestosql.io/docs/current/functions/json.html#json_parse) 的东西,对吗?
  • 我正在寻找类似这个线程的东西,也尝试过相同的查询,但在我的情况下它不起作用stackoverflow.com/questions/48553340/…

标签: json amazon-web-services amazon-s3 amazon-athena


【解决方案1】:

我在外部表中创建了一个基于字符串的列,并在外部表的示例查询下方应用以获得所需的结果。 它可能对某人有帮助!!!

CREATE EXTERNAL TABLE Ext_JSON_data(
id string,
media string
  )
ROW FORMAT SERDE 
  'org.openx.data.jsonserde.JsonSerDe' 
WITH SERDEPROPERTIES (  
'serialization.format' = '1'
  )
LOCATION
  's3://bucket/folder/'  

以下是示例查询:

WITH the_table AS (
SELECT CAST(social AS MAP(VARCHAR, JSON)) AS social_data
  FROM (
    VALUES
    (JSON '{
    "twitter": "",
    "facebook": "{\"id\":\"9999\",\"first_name\":\"abc\",\"last_name\":\"xyz\",\"name\":\"abc xyz\"}"}')
) AS t (social)    
)  
SELECT 
    first_level_key AS first_level_key
   ,json_extract_scalar(first_level_value,'$')
   ,json_extract_scalar(json_extract_scalar(first_level_value,'$'), '$.id')
   ,json_extract_scalar(json_extract_scalar(first_level_value,'$'), '$.first_name')
  FROM the_table
  CROSS JOIN UNNEST (social_data) AS t (first_level_key, first_level_value)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-23
    • 1970-01-01
    • 2020-11-11
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    相关资源
    最近更新 更多