У меня в BigQuery есть следующая схема:
Вся таблица выглядит следующим образом:
SELECT * FROM `...nested`
Теперь я просто хочу запросить все строки, в которых есть комментарий под названием «Привет», и ломаю себе голову, как это сделать.
SELECT * FROM `...nested` WHERE comments.title = 'Hello'
# Error: Cannot access field title on a value with type ARRAY<STRUCT<title STRING, message STRING>> at [1:69]
SELECT * FROM `...nested` WHERE comments.title IN ('Hello')
# Error: Cannot access field title on a value with type ARRAY<STRUCT<title STRING, message STRING>> at [1:69]
comments.title СОДЕРЖИТ «Hello», похоже, доступен устаревший SQL, поэтому мне интересно, что это за эквивалент.





Попробуй это:
SELECT *
FROM dataset.nested
WHERE EXISTS (
SELECT 1 FROM UNNEST(comments)
WHERE title = 'Hello'
)
Это возвращает все строки, в которых заголовок хотя бы одного комментария - Hello. Вы также можете использовать LIKE вместо равенства, например, для поиска подстрок. Для получения дополнительной информации о работе с массивами см. соответствующая документация.
Именно то, что мне нужно!