Предоставление учетных данных BigQuery в конвейере Apache-Beam, закодированном на Python

Я пытаюсь прочитать данные из bigquery в моем конвейере лучей с помощью средства выполнения облачного потока данных. Я хочу предоставить учетные данные для доступа к проекту.

Я видел примеры на Java, но не на Python.

Единственная возможность, которую я нашел, - это использовать аргумент: --service_account_email. Но что, если я хочу указать информацию о ключе.json в самом коде во всех вариантах, например: google_cloud_options.service_account = '/path/to/credential.json'

options = PipelineOptions(flags=argv)
google_cloud_options = options.view_as(GoogleCloudOptions)
google_cloud_options.project = 'project_name'
google_cloud_options.job_name = 'job_name'
google_cloud_options.staging_location = 'gs://bucket'
google_cloud_options.temp_location = 'gs://bucket'
options.view_as(StandardOptions).runner = 'DataflowRunner'

with beam.Pipeline(options=options) as pipeline:
    query = open('query.sql', 'r')
    bq_source = beam.io.BigQuerySource(query=query.read(), use_standard_sql=True)
    main_table = \
        pipeline \
        | 'ReadAccountViewAll' >> beam.io.Read(bq_source) \

В Java есть метод getGcpCredential, но он не может найти его в Python...

Есть идеи?

2 ответа

Решение

В --service_account_email- это рекомендуемый подход, упомянутый здесь. Не рекомендуется скачивать ключ и хранить его локально или на GCE.

В случаях, когда требуется использовать другой путь для файла json в коде, вы можете попробовать следующие обходные пути аутентификации python:

client = Client.from_service_account_json('/path/to/keyfile.json')

или

client = Client(credentials=credentials)

Вот пример создания пользовательских учетных данных из файла:

credentials = service_account.Credentials.from_service_account_file(
    key_path,
    scopes=["https://www.googleapis.com/auth/cloud-platform"],
)
Другие вопросы по тегам