# #sql #google-bigquery
Вопрос:
У меня есть несколько проектов bigquery, некоторые регионы ЕС и некоторые регионы США. Все проекты имеют набор данных «клиенты» и таблицу внутри набора данных «клиенты» под названием «покупки«. Я хочу написать запрос, чтобы скопировать все содержимое таблицы покупок в другую таблицу в другом проекте, который называется «Результаты«, и это регион ЕС. Поэтому я создал этот запрос:
SELECT
*
FROM
`customers.purchases`
WHERE
{{param.location}}='EU'
AND _PARTITIONTIME = TIMESTAMP('{{ ds }}')
UNION ALL
SELECT
*
FROM
`customers_EU.purchases`
WHERE
_PARTITIONTIME = TIMESTAMP('{{ ds }}')
AND {{param.location}}='EU'
Поскольку проект результатов находится в ЕС, я не могу скопировать из США в ЕС, поэтому для проектов в регионе США я создал набор данных customers_EU и скопировал таблицу покупок из набора данных customers в customers_EU в том же проекте. Затем приведенный выше запрос проверяет, является ли проект регионом ЕС, затем копирует из набора данных customers, либо копирует из набора данных customers_EU.
Но проблема в том, что он терпит неудачу и выдает ошибку для американского проекта:
клиенты.покупки не были найдены в местоположении «ЕС»
Да, это верно, он не расположен в ЕС, но параметр местоположения-это США, и я ожидаю, что он пропустит первую часть запроса и ничего не вернет из первой части запроса, так как условие не выполнено
Комментарии:
1. Вы хотите
if
, чтобы в сценарии было, а неunion all
. Либо это, либо создайте фиктивную таблицу, возможно, в виде представления.
Ответ №1:
Одним из подходов, который вы можете использовать, может быть:
- Только запрос покупает таблицы с набором данных, расположенным в ЕС (с использованием
UNION ALL
). Установите целевую таблицу в наборе данных, также расположенном в ЕС. - Только запрос покупает таблицы с набором данных, расположенным в США (с использованием
UNION ALL
). Установите целевую таблицу в наборе данных, также расположенном в США. - Используя копирование набора данных объектов (служба переноса BQ), переместите (скопируйте) набор данных США, созданный на шаге 2, в ЕС.
- Создайте представление, объединяющее таблицу, созданную на шаге 1, с таблицей, созданной на шаге 3.
Комментарии:
1. Спасибо вам за ваш комментарий. Есть некоторые ограничения на проект результата, поэтому нет кластера, и мы не можем запланировать какую-либо задачу. Этот окончательный проект предназначен только для ввода в него данных.
2. Это должно быть прекрасно. Вместо представления у вас может быть запрос расписания для отправки данных в результирующий проект. Вы можете использовать его в том же проекте шага 3.