Способ, которым я хотел бы автоматизировать это, заключается в том, чтобы в основном читать все файлы из данного сегмента (или его подпапки) и (делая предположение), используя их «имя файла», чтобы быть целевым именем таблицы для приема.Вот как:
gsutil ls gs://mybucket/subfolder/*.csv | xargs -I{} echo {} | awk '{n=split($1,A,"/"); q=split(A[n],B,"."); print "mydataset."B[1]" "$0}' | xargs -I{} sh -c 'bq --location=US load --replace=false --autodetect --source_format=CSV {}'
Обязательно замените location
, mydataset
на нужные значения.Кроме того, обратите внимание на следующие предположения:
- Первая строка каждого CSV считается заголовком и, следовательно, обрабатывается как имена столбцов.
- Мы пишем с помощью
--replace=false
флаг, означающий, что данные будут добавляться при каждом запуске команды.Если вы хотите вместо этого перезаписать, просто установите его на true
, и данные всех таблиц будут перезаписываться при каждом запуске. - CSV-имена файлов (часть до
.csv
используется в качестве имени таблицы. Вы можетеизмените скрипт awk, чтобы изменить его на любую другую альтернативу.