- How do i filter rows in bigquery, where a nested repeated field contains certain value? – Stack Overflow
- google bigquery – In Biqquery, how to filter an array of Struct on matching multiple fields in the Struct using Standard Sql? – Stack Overflow
SELECT *
#standardSQL WITH `table_name` AS ( SELECT 1 AS id, 'John' AS Name, 'LA' AS Location, [STRUCT<Company STRING, Months INT64>('Google', 24), ('Apple', 36)] AS Experience UNION ALL SELECT 2, 'Nick', 'SF', [STRUCT<Company STRING, Months INT64>('GE', 12), ('Microsoft', 48)] AS Experience UNION ALL SELECT 3, 'Mike', 'LV', [STRUCT<Company STRING, Months INT64>('Facebook', 24), ('Cloudera', 36)] AS Experience ) SELECT * FROM `table_name`
SELECT name, location
#standardSQL WITH `table_name` AS ( SELECT 1 AS id, 'John' AS Name, 'LA' AS Location, [STRUCT<Company STRING, Months INT64>('Google', 24), ('Apple', 36)] AS Experience UNION ALL SELECT 2, 'Nick', 'SF', [STRUCT<Company STRING, Months INT64>('GE', 12), ('Microsoft', 48)] AS Experience UNION ALL SELECT 3, 'Mike', 'LV', [STRUCT<Company STRING, Months INT64>('Facebook', 24), ('Cloudera', 36)] AS Experience ) SELECT name, location FROM `table_name`
WHERE NOT EXISTS
#standardSQL WITH `table_name` AS ( SELECT 1 AS id, 'John' AS Name, 'LA' AS Location, [STRUCT<Company STRING, Months INT64>('Google', 24), ('Apple', 36)] AS Experience UNION ALL SELECT 2, 'Nick', 'SF', [STRUCT<Company STRING, Months INT64>('GE', 12), ('Microsoft', 48)] AS Experience UNION ALL SELECT 3, 'Mike', 'LV', [STRUCT<Company STRING, Months INT64>('Facebook', 24), ('Cloudera', 36)] AS Experience ) SELECT name, location FROM `table_name` WHERE NOT EXISTS (SELECT 1 FROM UNNEST(Experience) WHERE Company = 'GE')
WHERE EXISTS
#standardSQL WITH `table_name` AS ( SELECT 1 AS id, 'John' AS Name, 'LA' AS Location, [STRUCT<Company STRING, Months INT64>('Google', 24), ('Apple', 36)] AS Experience UNION ALL SELECT 2, 'Nick', 'SF', [STRUCT<Company STRING, Months INT64>('GE', 12), ('Microsoft', 48)] AS Experience UNION ALL SELECT 3, 'Mike', 'LV', [STRUCT<Company STRING, Months INT64>('Facebook', 24), ('Cloudera', 36)] AS Experience ) SELECT name, location FROM `table_name` WHERE EXISTS (SELECT 1 FROM UNNEST(Experience) WHERE Company = 'GE')
How to filter an array of Struct on matching multiple fields in the Struct using Standard Sql?
#standardSQL WITH data AS ( SELECT STRUCT<name STRING, start_time INT64, end_time INT64>('jobA', 1, 2) AS job, [STRUCT<database STRING, schema STRING, table STRING, partition_time INT64> ('d1', 's1', 't1', 1), ('d1', 's2', 't2', 2), ('d1', 's3', 't3', 3) ] AS source UNION ALL SELECT STRUCT<name STRING, start_time INT64, end_time INT64>('jobB', 1, 2) AS job, [STRUCT<database STRING, schema STRING, table STRING, partition_time INT64> ('d1', 's1', 't1', 1), ('d2', 's4', 't2', 2), ('d2', 's3', 't3', 3) ] AS source ) SELECT * FROM data WHERE EXISTS ( SELECT 1 FROM UNNEST(source) AS s WHERE (s.schema, s.table) = ('s2', 't2') )