Как получить итоговое количество строк при чтении данных из любой таблицы BigQuery и записи в целевую таблицу BQ (с помощью bigquery.QueryJobConfig ())? - PullRequest
0 голосов
/ 07 октября 2019

Я выполняю некоторые операции чтения и чтения в BigQuery с использованием клиентских библиотек Python, мне хотелось бы знать, сколько строк API-интерфейс bigquery.QueryJobConfig () читает из исходной таблицы BQ.

Я уже пробовал«query_job._query_results.total_rows», который является защищенным членом, но дает подсчет общего числа строк, доступных в целевой таблице BQ. Я также попробовал "results.total_rows", но он всегда дает мне None в качестве вывода, хотя записи есть в исходной таблице BQ. Я также попытался "result = job.result (), page = result.pages", но как таковой ожидаемый результат отсутствует.

def main(request):

    query = "select * from `myproject.mydataset.mytable`"
    client = bigquery.Client()
    job_config = bigquery.QueryJobConfig()
    dest_dataset = client.dataset(destination_dataset, destination_project)
    dest_table = dest_dataset.table(destination_table)
    job_config.destination = dest_table
    job_config.create_disposition = 'CREATE_IF_NEEDED'
    job_config.write_disposition = 'WRITE_APPEND'
    job = client.query(query, location='US', job_config=job_config)
    job.result()
    results = query_job.result()
    print("Got {} rows.".format(results.total_rows))
    print("Got {} rows.".format(query_job._query_results.total_rows))


Я хочу подсчитать общее количество строк, которые мой запрос читает из исходной таблицы(myproject.mydataset.mytable)

Основываясь на моих знаниях, я готовлю один обходной путь, который заключается в том, чтобы сначала получить результирующий счетчик строк, я буду подсчитывать строки в существующей таблице назначения, прежде чем выполнить операцию записи в BQ, и снова буду подсчитывать строкииз таблицы назначения после записи в операцию BQ. Вычитание обоих даст мне результирующее количество строк (new_added_rows = (row_count_after.num_rows - row_count_before.num_rows) print ("{} строки найдены как результат запроса" .format (new_added_rows))) и (если row_count_before.num_rows == row_count_after.num_rows) затем запрос выполняется с пустым набором результатов. Просто хотел узнать, правильно ли я придерживаюсь?

1 Ответ

0 голосов
/ 25 октября 2019

Когда BigQuery выполняет задание, задание разбивается на ряд этапов запроса, на каждом этапе вы можете получить количество входных и выходных строк для каждого этапа, объяснение плана запроса дает вам возможность получить этот показатель [1]

Позвонив jobs.get [2], вы можете получить сведения о работе и получить план запроса и информацию о сроках.

[1] https://cloud.google.com/bigquery/query-plan-explanation

[2] https://cloud.google.com/bigquery/query-plan-explanation#api_sample_representation

...