[英]Create JSON from a subquery in snowflake
以下是如何將行轉換為單個 JSON 文檔或一個 JSON 數組的示例:
-- Get some rows from a sample table
select * from SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.NATION;
-- Get each row as its own JSON using object_construct
select object_construct
(
'NATION', N_NATIONKEY,
'NAME', N_NAME,
'REGION_KEY', N_REGIONKEY,
'COMMENT', N_COMMENT
) as MY_JSON
from "SNOWFLAKE_SAMPLE_DATA"."TPCH_SF1"."NATION";
-- Get all rows as a JSON array by adding array_agg
select array_agg(object_construct
(
'NATION', N_NATIONKEY,
'NAME', N_NAME,
'REGION_KEY', N_REGIONKEY,
'COMMENT', N_COMMENT
)) as MY_JSON
from "SNOWFLAKE_SAMPLE_DATA"."TPCH_SF1"."NATION";
對於任一選項,請記住 JSON 被視為 Snowflake 中的變體,並且有 16mb 的大小限制。
使用窗口函數array_agg
將列縮減為數組。
create table names (
last_name varchar,
first_name varchar
);
insert into names
(last_name, first_name)
values
('waterman', 'tom'),
('waterman', 'alex'),
('waterman', 'david'),
('barnett', 'rebecca'),
('barnett', 'anne');
select
last_name,
array_agg(first_name) over (partition by last_name) first_names
from names;
上面的查詢產生以下結果:
LAST_NAME FIRST_NAMES
waterman ["tom", "alex", "david" ]
waterman ["tom", "alex", "david" ]
waterman ["tom", "alex", "david" ]
barnett ["rebecca", "anne" ]
barnett ["rebecca", "anne" ]
然后,您可以使用distinct
運算符將其減少到唯一的last_name
, first_name
對。
select
distinct
last_name,
array_agg(first_name) over (partition by last_name) first_names
from names;
要將array_agg
返回的值數組轉換為 JSON,您可以使用::variant
簡單地轉換結果。
select
distinct
last_name,
array_agg(first_name) over (partition by last_name)::variant first_names
from names;
您可以使用 ARRAYAGG 函數將值轉換為數組,並使用 TO_JSON 函數將其進一步轉換為 JSON。
select
b.property_key PROPERTY_KEY,
to_json(( arrayagg(b.APPLICATION_ID) within group (order by b.APPLICATION_ID) ) ) APPLICATION_IDS from table_b b, table_a a where b.property_key = a.property_key group by 1;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.