скопируйте таблицу из разных проектов и вставьте ее в проект результатов ЕС

# #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:

Одним из подходов, который вы можете использовать, может быть:

  1. Только запрос покупает таблицы с набором данных, расположенным в ЕС (с использованием UNION ALL ). Установите целевую таблицу в наборе данных, также расположенном в ЕС.
  2. Только запрос покупает таблицы с набором данных, расположенным в США (с использованием UNION ALL ). Установите целевую таблицу в наборе данных, также расположенном в США.
  3. Используя копирование набора данных объектов (служба переноса BQ), переместите (скопируйте) набор данных США, созданный на шаге 2, в ЕС.
  4. Создайте представление, объединяющее таблицу, созданную на шаге 1, с таблицей, созданной на шаге 3.

Комментарии:

1. Спасибо вам за ваш комментарий. Есть некоторые ограничения на проект результата, поэтому нет кластера, и мы не можем запланировать какую-либо задачу. Этот окончательный проект предназначен только для ввода в него данных.

2. Это должно быть прекрасно. Вместо представления у вас может быть запрос расписания для отправки данных в результирующий проект. Вы можете использовать его в том же проекте шага 3.