[英]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.