При экспорте результата оператора SELECT в BigQuery создается только пустая таблица - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь экспортировать результаты оператора select в другую таблицу в качестве постоянного хранилища. Но когда эта новая таблица создается, она не имеет схемы. Когда я пытаюсь запросить эту таблицу результатов, появляется сообщение об ошибке:

Таблица project-id.dataset_name.temp_table не имеет схемы.

Вот мой код для экспорта результата из оператора SELECT во временную вкладку

def query_to_table():
    service_account_info = {}  # account info

    credentials = Credentials.from_service_account_info(
        service_account_info)
    client = bigquery.Client(
        project=service_account_info.get("project_id"),
        credentials=credentials)

    query = """
            SELECT
                a,
                b

            FROM `project.dataset.table`

            WHERE a NOT IN ('error', 'warning')
        """

    destination_dataset = client.dataset("abc_123") #this is another dataset
    destination_table = destination_dataset.table("temp_table") # destination table

    try:
        client.get_table(destination_table)
        client.delete_table(destination_table)
    except Exception as e:
        # Some logging
        pass

    client.create_table(Table(destination_table))

    # Execute the job and save to table
    job_config = bigquery.QueryJobConfig()
    job_config.allow_large_results = True
    job_config.use_legacy_sql = False
    job_config.destination = destination_table
    job_config.dry_run = True

    query_job = client.query(query, job_config=job_config)

    # Wait till the job done
    while not query_job.done():
        time.sleep(1)

    logging.info(f"Processed {query_job.total_bytes_processed} bytes.")

    return destination_table

Где ошибка? Есть ли какие-либо изменения API со стороны Google Cloud? Потому что этот скрипт работал месяцем ранее.

Пожалуйста, помогите.

1 Ответ

1 голос
/ 25 июня 2019

Черт!Я только что понял, это потому, что я установил dry_run на True.

В соответствии с этим: https://stackoverflow.com/a/28355802/4494547,, если для параметра dry_run установлено значение True, он просто оценивает запрос без фактического выполнения задания.

Мне потребовалось 5 часов, чтобы поразить мою голову.:(

...