Как запросить Google Big Query в Apache Airflow и вернуть результаты в виде Pandas Dataframe? - PullRequest
0 голосов
/ 19 июня 2019

Я пытаюсь сохранить запрос BigQuery в кадре данных в пользовательском операторе Airflow.

Я пытался использовать airflow.contrib.hooks.bigquery_hook и метод get_pandas_df.Задача get застревает при аутентификации, так как он хочет, чтобы я вручную посетил URL для аутентификации.

В результате я жестко программирую в аутентификации.Это работает, но определенно не идеально.

Работает, но не идеально (учетные данные жестко запрограммированы):

def execute(self, context):
        os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'my-file-location.json'
        client = bigquery.Client()

        job_config = bigquery.QueryJobConfig()

        df = client.query(
            self.query,
            location="US",
            job_config=job_config,).to_dataframe()

Не работает:

def execute(self, context):
    bq  = BigQueryHook(bigquery_conn_id=self.gcp_conn_id, delegate_to=None,use_legacy_sql=True, location='US')
    df = bq.get_pandas_df(self.query)

Этот код получаетпопробую аутентификацию.Вот журнал: [2019-06-19 12: 56: 05,526] {logging_mixin.py:95} ИНФОРМАЦИЯ - Пожалуйста, посетите этот URL, чтобы авторизовать это приложение.

1 Ответ

0 голосов
/ 20 июня 2019

Похоже, что для перехвата не указана учетная запись службы или путь ключа.

Вот руководство по настройке соединения GCP. https://github.com/apache/airflow/blob/1.10.3/docs/howto/connection/gcp.rst

Установить AIRFLOW_CONN_BIGQUERY_DEFAULT переменную среды в вашем файле конфигурации воздушного потока.

Вы можете пойти по пути использования key_path параметра запроса, если учетные данные доступны в пути, доступном для вашего процесса воздушного потока.
В противном случае установите для параметра запроса key_dict значение JSON в кодированном URL-адресе файла учетных данных.

AIRFLOW_CONN_BIGQUERY_DEFAULT=google-cloud-platform://?extra__google_cloud_platform__key_path=%2Fkeys%2Fkey.json&extra__google_cloud_platform__scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform&extra__google_cloud_platform__project=airflow&extra__google_cloud_platform__num_retries=5
...