2014-10-29 4 views
1

Я пытаюсь перечислить данные в таблице с помощью Python API:результаты BigQuery слишком большой ответ

tableDataList = tableDataCollection.list(**params).execute(http=http) 

Разрешенные Params:

list(projectId=*, datasetId=*, tableId=*, pageToken=None, maxResults=None, startIndex=None) 

Ошибка я получаю это:

apiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/bigquery/v2/projects/myproject/queries?alt=json returned "Response too large to return."> 

В настоящее время я создаю задание запроса и получаю возвращаемый тайтл обратно, и в этой целевой таблице я перечисляю данные (для производительности среди Другие). Я читал, что могу использовать allowLargeResults, но я не могу найти его на конечных точках tabledata.list или jobs.query. Где я могу установить, как и как решить проблему? Данные составляют около 90 мб для строк 97 тыс.

UPDATE:

Я изменил запрос, чтобы использовать таблицу назначения (с jobs.insert), на котором я могу затем установить allowLargeResults в True.

body = { 
    'configuration': { 
     'query': { 
      'createDisposition': 'CREATE_IF_NEEDED', 
      'writeDisposition': 'WRITE_TRUNCATE', 
      'useQueryCache': False, 
      'allowLargeResults': True, 
      'destinationTable': { 
       'projectId': PROJECT_ID, 
       'datasetId': DATASET_ID, 
       'tableId': 'tmp_{0}'.format(TABLE_ID), 
      }, 
      'query': query, 
     } 
    } 
} 

Однако, я все еще получаю ту же ошибку:

ResponseTooLarge: Response too large to return.

ответ

1

Из сообщения об ошибке, это выглядит как запрос не удался, а не вызов списка данных таблиц.

allowLargeResults позволяет запрашивать произвольно большие результаты вывода. Подробнее об этом можно узнать здесь: https://cloud.google.com/bigquery/docs/reference/v2/jobs Вы можете установить его в файле configuration.query.allowLargeResults. Это не должно быть необходимо для 90 МБ результатов, но результат> 128 МБ понадобится. Возможно, ваши результаты больше, чем вы ожидаете? Вам также нужно будет установить явную таблицу назначения для allowLargeResults.

Как только ваш запрос завершен, должно быть возможно перечислить результаты так, как вы описали. Если у вас все еще есть проблемы, мы можем просмотреть отдельные данные, если вы предоставите свою job_id.

+0

'Явное назначение' ммм ... Я буду смотреть на это, спасибо за подсказку. – Tjorriemorrie

+0

Я обновил свой вопрос; до сих пор нет успеха – Tjorriemorrie

0

Это похоже на работу, если я удалить заказ в мой запрос:

query = """ 
    SELECT * 
    FROM [mydataset.{0}] 
    WHERE delta > {1} 
    --ORDER BY delta ASC 
""".format(TABLE_ID, int(delta)) 

Эмм, это странно ... BigQuery не достаточно большой?

+0

@JordanTigani, что здесь происходит? – Tjorriemorrie

+0

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

+0

@ N.N. интересно, по крайней мере, я не думаю, что это повлияет на мое использование дельты. Благодарю. – Tjorriemorrie

Смежные вопросы