簡體   English   中英

創建 sql 表並讀取 json 數組中的值

[英]Creating sql table and reading values inside json array

我編寫了一個查詢,它根據 json 文件生成表。 json 文件有一個 json 數組小節,我似乎無法讓我的表從 json 數組中獲取值。

這是我嘗試從以下位置創建表的 json 示例:

{"student": "1", "ai": [{"grade": "a", "term": 1}, {"grade": "b", "term": 2}], "year": "2017"}

桌子:

CREATE EXTERNAL TABLE student(
  student string COMMENT 'from deserializer', 
  grade string COMMENT 'from deserializer', 
  term string COMMENT 'from deserializer', 
  year string COMMENT 'from deserializer')
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' 
LOCATION 'students.json'

我也試過做ai.grade但這沒有幫助。

我得到的當前輸出是:學生年級學期第 1 年 2017 年 1 2017 年

我想要的是:

student      grade      term      year
1            a          1         2017
1            b          2         2017

請看圖片,因為上面的結構可能沒有顯示。

您應該能夠使用以下 Hive 語法創建表:

CREATE EXTERNAL TABLE student(
  student string COMMENT 'from deserializer', 
  ai array<struct<grade:string,tinyint>> COMMENT 'from deserializer', 
  year tinyint COMMENT 'from deserializer')
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' 
LOCATION 'students.json'

獲得表后,您可以使用以下 Presto 查詢,該查詢將數組UNNEST轉換為列。 注意示例查詢中的WITH子句僅用於模擬上面的student表,一旦創建了student表就應該將其刪除。

WITH student AS (
    SELECT
        1 AS student,
        CAST(ARRAY[ROW('a', 1), ROW('b', 2)] AS ARRAY(ROW(grade VARCHAR, term TINYINT))) AS ai,
        2017 AS year
)
SELECT student, grade, term, year 
FROM student 
  CROSS JOIN UNNEST(ai)
 student | grade | term | year 
---------+-------+------+------
       1 | a     |    1 | 2017 
       1 | b     |    2 | 2017 
(2 rows)

暫無
暫無

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

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