2017-01-19 2 views
2

У меня есть таблица BigQuery (> 5mil строк).Получение данных из большой таблицы BigQuery в python

Мне нужно получить эти данные партиями и обработать его внутри AppEngine, python.

Единственный способ получить из таблицы, которая, как мне известно, запустить запрос SELECT в этой таблице, а затем повторить результат, используя tokens fetch_data.

Это выглядит следующим образом:

query = u"""\ 
    SELECT url FROM %s 
    """ % (query_table) 

query_job = client.run_async_query(str(uuid.uuid4()), query) 

query_job.begin() 

wait_for_job(query_job, 1) 

query_results = query_job.results() 

rows, total_rows, next_token = query_results.fetch_data(max_results=per_page, page_token=page_token) 

Это работает на меньшие таблицы, но и на более крупные, как у меня она просит, чтобы позволить большие запросы и указать целевую таблицу. Но для меня это не имеет смысла. Чтобы просто получить данные из таблицы, я должен скопировать ее в другую таблицу?

ответ

0

Вы должны использовать API tabledata.list для извлечения данных из таблицы.
Используя parameters (startIndex или pageToken) и maxResults вы можете управлять размером страницы, которую вы извлекаете.

1

Что вы используете, описано в this documentation. В целом, помимо ограничения на количество данных, которые могут быть получены за один раз, есть точка, где ваши результаты становятся «большими результатами». Это когда ваши результаты сжаты более 128 МБ, как описано here. Когда ваши результаты классифицируются как большие, вы можете хранить результат запроса только в таблице в Big Query.

К сожалению, я не уверен, что есть хороший способ сделать то, что вы хотите, не уменьшая количество строк, которые вы извлекаете сразу. Что вам, скорее всего, нужно будет сделать, это исследовать exporting data documentation для большого запроса.

0

Я думаю, что это именно то, что вам нужно link, насколько я понял, вы не можете получить большой результат запроса, но вы можете получить всю таблицу данных в своем приложении, а не насколько это важно, вот почему вам нужно поместить большой результат в таблицу, а затем получить данные таблицы в свое приложение и делать с ним все, что хотите.

удачи :)