2016-06-21 9 views
0

Ich habe bereits eine Einführung zu diesem Thema gelesen, aber dieser Code wurde nicht ausgeführt. Ich habe die Tabelle 'product_flat_index' im Projekt erstellt und diese Funktion fügt das Abfrageergebnis zu dieser Tabelle hinzu. Aber es ist nicht gelaufen.Google Bigquery API: Wie fügen Sie eine Ergebnisabfrage zur Tabelle hinzu?

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] 

Antwort

0

Sie sollten Ihre destinationTable, createDisposition, und writeDisposition Eigenschaften innerhalb Ihrer Anfrage Konfigurationsobjekt angeben, nicht die Top-Level-Konfiguration. Sie sind Eigenschaften von configuration.query, nicht die Konfiguration auf oberster Ebene. Zum Beispiel here's the destinationTable property in our docs: note how it is configuration.query.destinationTable und nicht configuration.destinationTable. Es ist ähnlich strukturiert für die anderen Felder, die Sie angeben.

Ich denke, das sollte funktionieren:

configuration = { 
    "query": query, 
    "destinationTable": { 
     "projectId": project_id, 
     "datasetId": dataset_id, 
     "tableId": table_id 
    }, 
    "createDisposition": "CREATE_IF_NEEDED", 
    "writeDisposition": "WRITE_APPEND" 
} 
body = { 
    "configuration": 
    { 
     "query": configuration 
    } 
} 

Wenn Sie dies auf eigene Faust debuggen wollen, würde ich die Jobdetails mit jobs.list oder jobs.get vorschlagen, Blick zu sehen, ob Ihre Konfigurationsdetails haben es bis zum Server geschafft. Ich vermute, dass Ihre früheren Jobs, die nicht funktionierten, auch nicht die zusätzlichen Eigenschaften für destinationTable usw. haben.