I’m transforming Data in a JSON by using that code and get a result, that is pretty okay. But I need it in another format, so that our agency is able to use the data.
This is the Code I use:
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' )))
The Result I get is every row as a JSON with squared brackets, which makes absolutely sense:
[{...}] [{...}] [{...}] [{...}]
But what I/our agency needs is every row in {}, limited by comma and all rows enclosed by []:
[ {...}, {...}, {...}, ]
Think that’s pretty easy…but I cant find a way to put all rows in another array.
Advertisement
Answer
I’m pretty sure you’ll simply want to use the ARRAY_AGG( ) function to get to what you are looking for, example as follows. Note however, if you are pulling lots of data, you might hit a size limit, and have to think of an alternative:
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"}]
Helpful links:
https://docs.snowflake.com/en/sql-reference/functions/object_construct.html
https://docs.snowflake.com/en/sql-reference/functions/array_agg.html