Воздушный поток - GoogleCloudStorageToBigQueryOperator не отображает шаблонные исходные объекты - PullRequest
0 голосов
/ 10 сентября 2018

Документация утверждает, что аргумент source_objects принимает шаблонные значения.Однако, когда я пытаюсь сделать следующее:

gcs_to_bq_op = GoogleCloudStorageToBigQueryOperator(
    task_id=name,
    bucket='gdbm-public',
    source_objects=['entity/{{ ds_nodash }}.0.{}.json'.format(filename)],
    destination_project_dataset_table='dbm_public_entity.{}'.format(name),
    schema_fields=schema,
    source_format='NEWLINE_DELIMITED_JSON',
    create_disposition='CREATE_IF_NEEDED',
    write_disposition='WRITE_TRUNCATE',
    max_bad_records=0,
    allow_jagged_rows=True,
    google_cloud_storage_conn_id='my_gcp_conn',
    bigquery_conn_id='my_gcp_conn',
    delegate_to=SERVICE_ACCOUNT,
    dag=dag
    )

я получаю сообщение об ошибке: Exception: BigQuery job failed. Final error was: {u'reason': u'notFound', u'message': u'Not found: URI gs://gdbm-public/entity/{ ds_nodash }.0.GeoLocation.json'}.

Я нашел пример , где переменная {{ ds_nodash }} используется втак же.Поэтому я не уверен, почему это не работает для меня.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Эта проблема точно такая же, как описал Дастин, вызов .format в строке приводит к удалению одного набора двойных скобок. Однако вместо того, чтобы удвоить скобку, которая является 1 решением:

'entity/{{{{ ds_nodash }}}}.0.{}.json'.format(filename)

Мне кажется, проще отформатировать строку, чтобы избежать путаницы:

"entity/{0}.0.{1}.json".format("{{ ds_nodash }}", filename)
0 голосов
/ 10 сентября 2018

Проблема в том, что вызов .format в строке приводит к удалению одного набора двойных скобок:

>>> 'entity/{{ ds_nodash }}.0.{}.json'.format(filename)
'entity/{ ds_nodash }.0.foobar.json'

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

>>> 'entity/{{{{ ds_nodash }}}}.0.{}.json'.format(filename)
'entity/{{ ds_nodash }}.0.foobar.json'
...