Google Bigquery API: как добавить результат запроса в таблицу?
Я уже прочитал некоторое введение по этой теме, но этот код не работал. Я создал таблицу 'product_flat_index' в проекте, и эта функция добавляет результат запроса к этой таблице. Но это не сработало.
def insertValues(service):
project_id = "598330041668"
dataset_id = 'recommendation_001'
table_id = 'product_flat_index'
# [START run_query]
query = ('SELECT sku, SUM(sales) AS sales, COUNT(sales) AS sales_frequency, SUM(views) AS views,'
'SUM(carts) AS carts, SUM(sales) / SUM(carts) AS sales_effective_rate,AVG(rating) AS rating,'
'SUM(comments) AS comments '
'FROM recommendation_001.user_input_product '
'GROUP BY sku '
)
configuration = {
"query": query,
}
body = {
"configuration":
{
"query": configuration,
"destinationTable": {
"projectId": project_id,
"datasetId": dataset_id,
"tableId": table_id
},
"createDisposition": "CREATE_IF_NEEDED",
"writeDisposition": "WRITE_APPEND",
},
}
return service.jobs().insert(
projectId=project_id,
body=body
).execute()
# [END run_query]
1 ответ
Вы должны указать свой destinationTable
, createDisposition,
а также writeDisposition
свойства в вашем объекте конфигурации запроса, а не в конфигурации верхнего уровня. Они являются свойствами файла configuration.query, а не конфигурацией верхнего уровня. Например, вот destinationTable
недвижимость в наших документах: обратите внимание, как это configuration.query.destinationTable
, и не configuration.destinationTable
, Он структурирован аналогично для других указанных вами полей.
Я думаю, что это должно работать:
configuration = {
"query": query,
"destinationTable": {
"projectId": project_id,
"datasetId": dataset_id,
"tableId": table_id
},
"createDisposition": "CREATE_IF_NEEDED",
"writeDisposition": "WRITE_APPEND"
}
body = {
"configuration":
{
"query": configuration
}
}
Если вы хотите отладить это самостоятельно, я бы посоветовал просмотреть сведения о задании с помощью jobs.list или jobs.get, чтобы выяснить, передаются ли сведения о конфигурации на сервер. Я подозреваю, что ваши прошлые рабочие места, которые не работали, также не будут иметь дополнительных свойств для destinationTable
, так далее.