我正在通过使用该代码转换JSON中的数据并获得结果,这很好。但是我需要另一种格式,以便我们的代理机构能够使用数据。
这是我使用的代码:
SELECT *
from(
SELECT ARRAY_CONSTRUCT(
OBJECT_CONSTRUCT(
'sku',ID,
'price',price,
'bigImageLink', bigImageLink,
'attributes',
OBJECT_CONSTRUCT(
'make',make,
'model',model,
'submodel',submodel,
'classification',classification,
'year',"year",
'mileage',mileage,
'colour',colour,
'fuel',fuel,
'gearbox',gearbox,
'ps',ps,
'emission-class', emissionclass,
'enginedisplacement',enginedisplacement,
'offertype',offertype)
)) from
--
(select * from (select
REPLACE(parse_json(OFFER):"spec":"im:offerID",'"')::varchar AS ID,
.,
.,
.,
'USED' offertype,
REPLACE(parse_json(OFFER):"spec":"price":"consumerPriceGross",'"')::integer AS price,
Split_part(substring(REPLACE(parse_json(OFFER):"spec":"images",'"')::varchar,11),',',0) AS bigimagelink
FROM "DL_Datatap"."PUBLIC"."DT_Garage_garage_vehicle_inventory_raw"
WHERE status='published'
)))
我得到的结果是每一行都是带有方括号的JSON,这绝对有道理:
[{...}]
[{...}]
[{...}]
[{...}]
但是我/我们的代理机构需要的是{}中的每一行,并以逗号和[[]括起来的所有行)进行限制:
[
{...},
{...},
{...},
]
这很简单...但是我找不到将所有行放在另一个数组中的方法。
谢谢
答案 0 :(得分:3)
我敢肯定,您只是想使用ARRAY_AGG()函数来获得所需的内容,例如以下示例。 但是请注意,如果要提取大量数据,则可能会达到大小限制,因此必须考虑另一种选择:
create table demo_table_1 (province varchar, created_date date);
insert into demo_table_1 (province, created_date) values
('Manitoba', '2020-01-18'::date),
('Alberta', '2020-01-19'::date);
select object_construct(*) as record from demo_table_1;
RECORD
{ "CREATED_DATE": "2020-01-18", "PROVINCE": "Manitoba" }
{ "CREATED_DATE": "2020-01-19", "PROVINCE": "Alberta" }
select array_agg(record) one_record FROM (
select object_construct(*) as record
from demo_table_1);
ONE_RECORD
[{"CREATED_DATE": "2020-01-18", "PROVINCE": "Manitoba"},{"CREATED_DATE": "2020-01-19", "PROVINCE": "Alberta"}]
有用的链接:
https://docs.snowflake.com/en/sql-reference/functions/object_construct.html
https://docs.snowflake.com/en/sql-reference/functions/array_agg.html
我希望这可以帮助...丰富
p.s。如果这个(或另一个)答案对您有帮助,请花一点时间“接受”对您有帮助的答案 通过单击答案旁边的复选标记,将其从“灰色”切换为“填充”。