2016-06-21 7 views
0

私はすでにこのトピックについていくつかの紹介を読みましたが、このコードは実行されませんでした。 プロジェクトで 'product_flat_index'テーブルを作成しました。この関数は、そのテーブルにクエリ結果を追加します。しかし、それは実行されませんでした。Google Bigquery API:テーブルに結果クエリを追加するにはどうすればよいですか?

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] 

答えて

0

あなたは、クエリの構成オブジェクトではなく、トップレベルのコンフィギュレーション内のあなたのdestinationTablecreateDisposition,writeDispositionプロパティを指定する必要があります。これらは、トップレベルの設定ではなく、configuration.queryのプロパティです。たとえば、here's the destinationTable property in our docs: note how it is 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などの追加のプロパティはありません。

関連する問題