在 JSON 中讀取陣列元素
- 使用 ARRAY 建立示例 JSON
create table car_sample(dim_id integer,info varchar(2000)
); 插入 car_sample 值(200,’{cars
:[{製造商:日產,模型:[{名稱:Sentra
,門:4},{名稱:“千里馬“,”門“:4}]},{”製造商“:”福特“,”模特“:[{”姓名“:”金牛座“,”門“:4},{”姓名“:”護送“ ,門:4}]}]}’)
- 為 CROSS JOIN 建立支援表
create table series1_10(數字整數);
插入到 series1_10 的值(1);
插入 series1_10 值(2);
插入 series1_10 values(3);
插入 series1_10 values(4);
插入 series1_10 values(5);
插入 series1_10 值(6);
插入到 series1_10 的值(7);
插入到 series1_10 的值(8);
插入 series1_10 values(9);
插入 series1_10 值(10);
- 用於將 JSON 陣列提取為一個^分隔字串的 UDF
CREATE OR REPLACE FUNCTION f_extractJson(jsonVar varchar)RETURNS varchar IMMUTABLE as $$
def myfunc(myParm)
:
import json
cars = json.loads(jsonVar)
parsedString =’’
for car in cars [cars
]:
用於汽車中的模型[Models
]:
parsedString = parsedString + car [Manufacturer
] +’〜’+ model [Name
] +’^’
返回 parsedString
return myfunc(jsonVar)
$$ LANGUAGE plpythonu ;
- 檢查資料
從 car_sample 中選擇 dim_id,f_extractJson(info);
- 透視行
使用 w1 AS(從 car_sample 選擇 dim_id,f_extractJson(info)
資訊)
選擇 dim_id,number,info,split_part(split_part(info,’^’,number),’〜’,1)
製造商,split_part(split_part(info,’ ^’,數字),’〜’,2)模型
來自 w1 交叉連線系列 1_10
,其中數字<= regexp_count(info,’[= ^ =]’);