2014-05-12 2 views
1

J'ai eu du mal avec ça ..... Google Apps Script et l'API Big Query fonctionnent bien mais quand j'essaie d'utiliser BigQuery.Tabledata.insertAll je continue à recevoir une erreur disant 'pas un tel champ'.Google Apps Script et Big Query - tabledate.insertAll

Lorsque j'essaie de faire la même chose avec l'explorateur d'API Google, cela fonctionne très bien. La documentation indique la commande est:

BigQuery.TableData.insertAll(TableDataInsertAllRequest resource, String projectId, String datasetId, String tableId) 

J'ai construit la ressource TableDataInsertAllRequest selon la documentation https://developers.google.com/bigquery/docs/reference/v2/tabledata/insertAll et il ressemble à ceci:

{ 
    "kind": "bigquery#tableDataInsertAllRequest", 
    "rows": 
    [ 
    { 
     "json": 
     { 
     "domain": "test", 
     "kind": "another test" 
     } 
    } 
    ] 
} 

Cela correspond à mon schéma de la table.

Quand je lance la commande l'erreur renvoyée est:

{ 
    "insertErrors": [ 
     { 
      "index": 0, 
      "errors": [ 
       { 
        "message": "no such field", 
        "reason": "invalid" 
       } 
      ] 
     } 
    ], 
    "kind": "bigquery#tableDataInsertAllResponse" 
} 

Comme je dis la même ressource TableDataInsertAllRequest fonctionne très bien dans l'explorateur API (en cliquant Essayez sur la page de la documentation ci-dessus), il ne fonctionne pas par Apps Script.

Toute aide reçue avec gratitude.

+0

veuillez poster votre schéma, et un ID de travail échoué. – Pentium10

Répondre

1

J'ai déjà rencontré cela et j'ai eu un peu plus de chance avec cette variante.

var rowObjects = []; 
// Generally you'd do this next bit in a loop 
var rowData = {}; 
rowData.domain = 'test'; 
rowData.kind = 'another test'; 
rowObjects.push(rowData); 
// And at this point you'd have an array rowObjects with a bunch of objects 
var response = BigQuery.TableData.insertAll({'rows': rowObjects}, projectId, datasetId, tableId); 

Quelques choses à noter:

  • Je n'indique pas kind - il est impliqué par l'appel à insertAll()
  • J'utilise la notation par points (est-ce le bon terme?) plutôt que des chaînes pour placer des attributs dans mes «objets de rangée»

Je ne suis pas sûr de qui est la sauce secrète. Quoi qu'il en soit, à la fin, la structure de l'appel ressemble à ceci:

BigQuery.TableData.insertAll({'rows' : [ 
             { 
              'domain' : 'test', 
              'kind' : 'another test' 
             } 
             ] 
           }, 
           projectId, 
           datasetId, 
           tableId);