Согласно документации для Копирование нескольких исходных таблиц : "Исходные таблицы должны быть указаны в виде списка через запятую."
Поэтому я могу предложить вам 3 варианта:
Первый: Если в ваших секционированных таблицах есть столбец с датой секционирования, вы можете создать команду bq, чтобы выбрать нужные даты секционирования, сохранить список в файле и выполните его с помощью команды bash. Следовательно, вы сможете добавить все таблицы в нужную таблицу назначения. Синтаксис будет следующим:
bq query --format=csv --nouse_legacy_sql '
SELECT
CONCAT('bq cp -a <sourceproj>:<dataset>.<table>$', partition_name, ' <testproj>:<dataset>.Partitioned_Destination_Table')
FROM (
SELECT
DISTINCT FORMAT_DATETIME('%Y%m%d',
CAST(_PARTITIONDATE AS datetime)) partition_name
FROM
`<sourceproj>.<dataset>.<table>`
WHERE
_PARTITIONTIME >= "start_date"
AND _PARTITIONTIME < "end_date")' > output.csv
Затем выполните файл со всеми командами копирования bq.
bash output.csv
Вы можете прочитать больше о командных строках bq здесь .
Секунда: В сценарии оболочки создайте список всех временных меток разделов и выполните запрос, добавив каждую таблицу в уже созданную многораздельную таблицу назначения. Синтаксис будет следующим:
tables=("20200107" "20200106" "20200105" "20200104")
for val in ${tables[*]}; do
bq cp -a <project1>:<dataset1>.<table1_$val> <project2>:<dataset2>.<Partitioned_Destination_Table>
done
Третий: Если ваш набор данных содержит только таблицы, которые вы хотите скопировать, вы можете скопировать весь набор данных, вы можете узнать больше об этом здесь , это будет выглядеть следующим образом:
bq mk --transfer_config --project_id=[PROJECT_ID] --data_source=[DATA_SOURCE] --target_dataset=[DATASET] --display_name=[NAME] --params='[PARAMETERS]'
Надеюсь, это поможет.