簡體   English   中英

如何從 JSON 元素中提取所有值?

[英]How do I extract all of the values from a JSON element?

如何提取元素account_code的所有值? 下面的SELECT語句讓我提取與索引[x]關聯的任何單個值,但我想提取所有值(每個值都在它自己的行中),這樣 output 是:

account_codes
------------
1
2
3

SELECT
    JSON_EXTRACT_SCALAR(v, '$.accounting[0].account_code') AS account_codes
FROM (VALUES JSON '
    {"accounting":
        [
            {"account_code": "1", "account_name": "Travel"},
            {"account_code": "2", "account_name": "Salary"},
            {"account_code": "3", "account_name": "Equipment"},
        ]
    }'
) AS t(v)

您需要使用的運算符是 unnest ,它將展平數組並獲取所有列值。 下面是 hive 目錄中的查詢和 DDL 我用來創建表並獲取所有帳戶代碼

DDL:

CREATE EXTERNAL TABLE `sf_73515497`(
  `accounting` array<struct<account_code:string,account_name:string>> COMMENT 'from deserializer')
ROW FORMAT SERDE 
  'org.openx.data.jsonserde.JsonSerDe' 
WITH SERDEPROPERTIES ( 
  'paths'='accounting') 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://path-to-json-prefix/'

SQL 與未嵌套:

WITH dataset AS (
  SELECT accounting from "sf_73515497" 
)
SELECT t.accounts.account_code FROM dataset
CROSS JOIN UNNEST(accounting) as t(accounts)

暫無
暫無

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

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