I have an object in bigQuery that stores all possible parameters in the system. Therefore somewhere under the hood the 'parameter' object, has a lot of keys, and when I build a query to SELECT param it returns a lot of columns with null, and maybe only 1 with a value, which makes it impossible to analyze as the output table is incredibly wide.
How can I write the query so that it returns 1 column, with only the non null key/value pair?
i.e.
instead of returning:
param.phone, param.lob, param.destination, param.id, param.1, param.2 etc with null values
i want to see one column with value {"e_line_of_business":"internet"} or any other non-null key/values.
It's ok to be stringified.
CodePudding user response:
You might consider below approach.
WITH sample_data AS (
SELECT STRUCT(STRING(null) AS phone, STRING(null) AS lob, STRING(null) AS destination, 'internet' AS e_line_of_business, STRING(null) AS param1) params
UNION ALL
SELECT STRUCT(STRING(null) AS phone, STRING(null) AS lob, STRING(null) AS destination, 'internet' AS e_line_of_business, 'value_1' AS param1)
UNION ALL
SELECT STRUCT('01012345678' AS phone, 'web' AS lob, STRING(null) AS destination, null AS e_line_of_business, null AS param1)
)
SELECT params, REPLACE(REGEXP_REPLACE(TO_JSON_STRING(params), r'"[^,{] "\:null,?', ''), ',}', '}') non_nulls
FROM sample_data;
Query results


