В рамках ограничений экспорта BigQuery упоминается, что CSV не поддерживает вложенные и повторяющиеся данные. Таким образом, попробуйте экспортировать в Avro или JSON:
from google.cloud import bigquery
client = bigquery.Client()
bucket_name = 'your_bucket'
project = 'bigquery-public-data'
dataset_id = 'samples'
table_id = 'shakespeare'
destination_uri = 'gs://{}/{}'.format(bucket_name, '')
dataset_ref = client.dataset(dataset_id, project=project)
table_ref = dataset_ref.table(table_id)
configuration = bigquery.job.ExtractJobConfig()
#For AVRO
#configuration.destination_format ='AVRO'
#For JSON
#configuration.destination_format ='NEWLINE_DELIMITED_JSON'
extract_job = client.extract_table(
table_ref,
destination_uri,
job_config=configuration,
location='US')
extract_job.result()
Надеюсь, это поможет.
Вообще говоря, GNU делают, не поддерживает цели с несколькими выводами. Однако существует исключение к тому правилу: правила шаблона. Если можно структурировать make-файл, таким образом, что он использует правила шаблона генерировать объектные файлы, Вы можете достигать своих целей. Например:
.DELETE_ON_ERROR:
all: foo.o
%.o %.d: %.c
@touch $*.d
@touch $*.o
@exit 1
Вы будете видеть, что с этим make-файлом, когда "ошибка" обнаруживается в правиле, и.d и.o файл удалены. Преимущество для этого подхода состоит в том, что он более точно выражает граф зависимостей путем описания, как.d файл должен быть сгенерирован и какое правило произведет его.
С другой стороны, общая парадигма в этом случае - как Вы предположили: имейте GCC, генерируют.d файл во временное имя файла и только перемещают его в место после того, как команда GCC завершилась успешно. Обычно это выполняется с приемом оболочки:
all: foo.o
%.o: %.c
gcc -o $@ -MMD -MF $(basename $@).d.tmp -c $< \
&& mv $(basename $@).d.tmp $(basename $@).d
Здесь "волшебный" прием является использованием флагов GCC -MMD
, который генерирует файл зависимости как побочный эффект компиляции, и -MF
, который позволяет Вам указать выходное название файла зависимости; и использование оболочки cmd1 && cmd2
синтаксис, который заставляет оболочку только выполняться cmd2
если cmd1
выходы успешно.