Запрос может вернуть пустую таблицу в BigQuery.Примером такого случая может быть, если я join
несколько таблиц в запросе на BigQuery и результатом объединений будет пустая таблица, или если совпадений на основе предложения where
нет.
Вот глупый пример запроса, который всегда будет возвращаться в пустом соединении:
#standardSQL
WITH query1 AS (
SELECT 1 AS number, "one" AS message
), query2 AS (
SELECT 2 AS number, "two" AS message)
SELECT "query result" AS result, query1.*
FROM query1
JOIN query2 ON query1.number = query2.number;
Запрос покажет этот вывод: Query returned zero records.
Если это так, я хочу вернуть либосообщение или строка по умолчанию.Но я не знаю, как это сделать.Я попытался использовать IFNULL
, но это можно использовать только для одного столбца, а не для количества столбцов.Использование оператора IF
дало мне ошибки, поскольку вы не можете вернуть строки из оператора if.Я думаю, что ошибка, которую он мне дал, была Scalar subquery cannot have more than one column unless using SELECT AS STRUCT to build STRUCT values
.
Еще одна вещь, о которой я мог подумать, но я не знаю, как реализовать, это добавить UNION
в конце, который будет срабатывать только в том случае, еслипредыдущие части ничего не возвращали.Или оберните существующий запрос в подзапрос оператора WITH
и, если он ничего не возвращает, выведите сообщение, в противном случае выполните SELECT * FROM sub_query
.
. Я бы хотел либо просто отобразить сообщение, когда пустая таблица являетсярезультат или вернуть строку с некоторыми значениями по умолчанию.Я понимаю, что ответ, скорее всего, будет содержать оператор UNION
и, следовательно, отображать только сообщение будет невозможно.В этом случае я хотел бы отобразить строку по умолчанию вместо.Для приведенного выше примера запроса строка по умолчанию будет выглядеть так: "No results found", NULL, NULL
.Когда запрос возвращает непустую таблицу, я хочу, чтобы она выглядела точно так же, как и в исходном запросе.Поэтому не должно быть никаких добавленных столбцов или изменений в схеме результата.