2017-11-02 11 views
2

Googleシートを使用して、セルを選択してBig Queryに既に存在するテーブルに行として追加します。私はエラーなしで実行される次のコードを書いていますが、BQのテーブルをチェックすると更新されません。Google Appsスクリプトを使用してGoogleシートからBig Queryの既存のテーブルに行を追加する

function myFunction() { 

    var projectId = 'projectId'; 
    var datasetId = 'datasetId'; 
    var tableId = 'tableId'; 

    var fileId = 'fileId'; 
    var ss = SpreadsheetApp.openById(fileId); 
    var sheet = ss.getSheets()[0]; 
    var range = sheet.getRange(21,2,sheet.getLastRow()-21,7); 
    var values = range.getValues(); 
    var rowsCSV = values.join("\n"); 
    Logger.log(rowsCSV); 

    function convertValuesToRows(rowsCSV) { 
    var rows = []; 
    var headers = rowsCSV[0]; 


    for (var i = 1, numColumns = rowsCSV.length; i < numColumns; i++) { 
     var row = BigQuery.newTableDataInsertAllRequestRows(); 
     row.json = rowsCSV[i].reduce(function(obj, value, index) { 
     obj[headers[index]] = value; 
     return obj 
     }, {}); 
     rows.push(row); 
    }; 
    return rows; 
    } 

    function bigqueryInsertData(rowsCSV, tableId) { 
    var insertAllRequest = BigQuery.newTableDataInsertAllRequest(); 
    insertAllRequest.rows = convertValuesToRows(rowsCSV);  
    var response = BigQuery.Tabledata.insertAll(insertAllRequest, projectId, datasetId, tableId); 
    if (response.insertErrors) { 
     Logger.log(response.insertErrors); 
    } 
    } 

} 

これを機能させるには何を変更する必要がありますか?

+1

現時点では、「bigqueryInsertData」を呼び出すことはありません –

答えて

0

行のCSVをBLOBに変換すると、bigqueryInsertData関数でgetDataAsString()メソッドを使用することができました。また、BigQueryのテーブルの列名と一致するように手動でヘッダーの名前を付けました。最終的なコードはこのようになり、エラーなく実行され、BQテーブルは正常に更新されます。

function myFunction() { 

     var projectId = 'production-1077'; 
     var datasetId = 'alex_test'; 
     var tableId = 'Total_Jobs_Reporting_Table'; 

     var fileId = 'fileId'; 
     var ss = SpreadsheetApp.openById(fileId); 
     var sheet = ss.getSheets()[0]; 
     var range = sheet.getRange(21,2,sheet.getLastRow()-21,7); 
     var values = range.getValues(); 
     var rowsCSV = values.join("\n"); 
     var data = Utilities.newBlob(rowsCSV, 'application/octet-stream'); 

     function convertValuesToRows(data) { 
     var rows = []; 
     var headers = ["name1","name2","name3","name4","name5","name6","name7"] ; 


     for (var i = 1, numColumns = data.length; i < numColumns; i++) { 
      var row = BigQuery.newTableDataInsertAllRequestRows(); 
      row.json = data[i].reduce(function(obj, value, index) { 
      obj[headers[index]] = value; 
      return obj 
      }, {}); 
      rows.push(row); 
     }; 
     return rows; 
    } 

    function bigqueryInsertData(data, tableId) { 
     var insertAllRequest = BigQuery.newTableDataInsertAllRequest(); 
     insertAllRequest.rows = convertValuesToRows(data);  
     var response = BigQuery.Tabledata.insertAll(insertAllRequest, projectId, datasetId, tableId); 
     if (response.insertErrors) { 
     Logger.log(response.insertErrors); 
     } 
    } 

    bigqueryInsertData(Utilities.parseCsv(data.getDataAsString()), tableId); 
} 
関連する問題