簡體   English   中英

AWS Athena 取消嵌套

[英]AWS Athena Unnesting

我在 Athena 中有一張表,使用 JSON SerDe 從 S3 讀取數據。 DDL 如下;

CREATE EXTERNAL TABLE `mbta_lines`(
  `data`  array<
            struct<
               attributes:struct<
                  color:string,
                  long_name:string,
                  short_name:string,
                  sort_oder:string,
                  text_colo:string
               >,
               id:string,
               links:struct<self:string>,
               relationships:struct<
                  routes:string
               >,
               type:string
            >
          >,
  jsonapi struct<
     version:string
  > 
)
ROW FORMAT SERDE 
  'org.openx.data.jsonserde.JsonSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat'
LOCATION
  's3://free-dp/transportation/mbta/lines'

JSON 正在通過 API 獲得,JSON 響應如下所示;

{
  "data": [
    {
      "attributes": {
        "color": "DA291C",
        "long_name": "Red Line",
        "short_name": "",
        "sort_order": 10010,
        "text_color": "FFFFFF"
      },
      "id": "line-Red",
      "links": {
        "self": "/lines/line-Red"
      },
      "relationships": {
        "routes": {}
      },
      "type": "line"
    },
    ....

API 方法為波士頓地鐵系統中的每條“線”返回一個“行”......“紅線”、“綠線”等。所有數據都包含在一個數組“數據”中,所以DDL 實際上只有 1 個字段,因為這是一個數組,所以它只有 1 行。

我知道我需要使用 unnest 來展平這個數組,但是將“屬性”傳遞給 unnest 是行不通的。 我不知道如何引用數組下的結構,因為它沒有命名?

select 來自 mbta_lines 的行交叉連接 unnest(data) as t(lines)

我沒有嘗試過顯而易見的,傳入數組本身就是訣竅。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM