Я пытаюсь запросить анонимную таблицу, созданную в результате запроса набора данных таблицы в BigQuery. Я пытаюсь использовать Jobs.get()
, чтобы найти анонимное имя таблицы, используя пример в Google BigQuery Analytics, но я столкнулся с ошибкой.Ошибка: «Требуемый параметр отсутствует» - при получении анонимной таблицы в BigQuery
Google BigQuery аналитик Пример (стр 209):
запрос 1:
class QueryHandler(webapp2.RequestHandler):
credentials = GoogleCredentials.get_application_default()
service = discovery.build('bigquery', 'v2', credentials=credentials)
def query1(self):
myquery = {'configuration': {
'query': {
'query': 'SELECT DISTINCT user_id FROM `app.mydataset.mytable`',
'destinationTable': {
'projectId': projectId,
'datasetId': datasetId,
'tableId': 'tableId'},
'useLegacySql': False
}
}
}
response = service.jobs().query(projectId=projectId, body=myquery).execute()
job = service.jobs().get(**response['jobReference']).execute()
# both versions of this variable (destination_table) produce the same error message
# destination_table = job['configuration']['query']['destinationTable']
destination_table = job['destinationTable']
table = service.jobs().get(projectId=destination_table['projectId'],
datasetId=destination_table['datasetId'],
tableId=destination_table['tableId']).execute()
return table
Ошибка:
Internal Server Error
The server has either erred or is incapable of performing the requested operation.
....
HttpError: https://www.googleapis.com/bigquery/v2/projects/app_id/queries?alt=json returned "Required parameter is missing">
Мои вопросы:
- Почему я получаю эту ошибку? (Я следовал примеру, и я не вижу, что я пропустил)
- Как передать анонимное имя таблицы из первого запроса во втором запросе с использованием Python? Например:
запроса 2:
def query2(self):
....
query: SELECT * FROM [anonymous table from query 1]
Спасибо за помощь. Я попытался понять документацию BigQuery API, но, к сожалению, он довольно ограничен. Я редактировал свой код на основе вашего предложения для вопроса 1, и он разрешил ошибку. – fragilewindows
Что касается использования анонимных таблиц, я бы не использовал этот метод, тем не менее, у меня есть 3 запроса, которые происходят в обратном порядке, и они зависят от результатов, сохраненных в каждой таблице. 'jobs.insert' не будет проблемой, если он работает так же, как' jobs.query', но ждет его сохранения в постоянную таблицу, а затем запрос к таблице представляет свои проблемы. Если у меня возникнут проблемы, я переосмыслию использование 'jobs.insert'. Я думаю, что работа cron каждые 24 часа будет работать с анонимными столами. Я скоро увижу. Еще раз спасибо. – fragilewindows
Обратите внимание, что 'jobs.query' выполняет, по существу, ту же операцию, что и' jobs.insert', но сохраняет в таблицу назначения с системным именем. Основное различие между API-интерфейсами заключается в том, что запрос - это зависающий запрос, который возвращается, когда задание завершается, а jobs.insert запускает асинхронное задание. Если вы хотите, чтобы подобное поведение выполнялось с помощью 'jobs.query', вы можете использовать' jobs.insert', за которым следует 'jobs.getQueryResults', поскольку getQueryResults будет ждать завершения аналогично запросу. Подробнее в [нашей документации] (https://cloud.google.com/bigquery/querying-data#running_asynchronous_queries). –