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, так далее.

Другие вопросы по тегам