Tengo que fusionar dos (o más de dos) filas JSON con los mismos identificadores, pero ambas filas tienen valores únicos. P.ej.
create or replace table source(v variant); INSERT INTO source SELECT parse_json('{ "pd": { "extraction_date": "1644471240", "product_id": "357946", "retailerName": "retailer", "productName":"product" "unique1":"value" } }'); INSERT INTO source SELECT parse_json('{ "pd": { "extraction_date": "1644471242", "product_id": "357946", "retailerName": "retailer2", "productName":"product2", "unique2":"value" } }');
Mi resultado deseado es:
"pd": { "extraction_date": "1644471240", "product_id": "357946", "retailerName": "retailer", "productName":"product", "unique1":"value", "unique2":"value" } }');
Revisé las documentaciones y StackOverflow, pero ninguna solución funciona para este caso. Que puede ser una solucion.
Una UDF de JavaScript como esta fusionará objetos como el de la pregunta:
create or replace function merge_objects(X array) returns variant language javascript as $$ merged = {} X.forEach((item) => { keys = Object.keys(item['pd']); for (let i = 0; i < keys.length; i++) { merged[keys[i]] = item['pd'][keys[i]]; } }); return {'pd': merged}; $$
Luego puede usar ese UDF en SQL para realizar la combinación:
select count(*) , merge_objects(array_agg(v) within group (order by v:pd.extraction_date desc)) from source group by v:pd.product_id;