2012-05-27 12 views
6

Ich schaue im Internet nach, wie ich BigQuery-Daten in Google Tabellenkalkulation importieren kann. Ich fand dieses appscript Beispiel, aber es funktioniert nicht API sind nicht auf der gleichen Ebene, und ich finde nicht, wie mit API2 oder API @ beta1 in appscript abzufragen.Zugriff auf BigQuery mit Google Spreadsheet

function runQuery() { 
    var ss = SpreadsheetApp.getActive(); 
    var range = ss.getRangeByName('query'); 
    var query = range.getCell(1, 1).getValue(); 
    //var results = bigquery.query(query); 



    var header = ss.getRangeByName('header'); 
    header.clearContent(); 
    var output = ss.getRangeByName('output'); 
    output.clearContent(); 
    for (var i = 0; i < results.fields.length; i++) { 
    var field = results.fields[i]; 
    header.getCell(1, 1 + i).setValue(field.id); 
    } 
    for (var i = 0; i < results.rows.length; i++) { 
    var row = results.rows[i].f; 
    for (var j = 0; j < row.length; ++j) { 
     output.getCell(1 + i, 1 + j).setValue(row[j].v); 
    } 
    } 
} 

Vielen Dank im Voraus für Ihre Ideen,

GQ

+0

Diese Anleitung für mich gearbeitet: https://greenido.wordpress.com/2013/12/16/big-query-and-google-spreadsheet-intergration/ – arun

Antwort

9

UPDATE: Wir haben soeben ein neues BigQuery + Apps Script Tutorial, das Sie durch die Antwort auf diese Frage hier gehen soll:https://developers.google.com/apps-script/articles/bigquery_tutorial

@GQuery: Wir haben AppsScript kürzlich aktualisiert, um Zugriff auf die neueste BigQuery-API-Version (v2) zu erhalten. Hier sehen Sie ein einfaches Beispiel, um die Ergebnisse im AppScript-Protokoll anzuzeigen. Wir arbeiten an einer Aktualisierung der AppScript/BigQuery-Dokumentation.

function runQuery() { 
    var projectId = 'YOUR PROJECT'; 
    var sql = 'select word, word_count from publicdata:samples.shakespeare limit 100'; 
    var queryResults; 

    // Run the query 
    try { 
    queryResults = BigQuery.Jobs.query(projectId, sql); 
    } 
    catch (err) { 
    Logger.log(err); 
    return; 
    } 

    // Loop until successful job completion 
    while (queryResults.getJobComplete() == false) { 
    try { 
     queryResults = BigQuery.Jobs.getQueryResults(projectId, queryResults.getJobReference().getJobId()); 
    } 
    catch (err) { 
     Logger.log(err); 
     return; 
    } 
    } 

    var tableRows = queryResults.getRows(); 
    for (var i = 0; i < tableRows.length; i++) { 
    var rowString = ''; 
    var cols = tableRows[i].getF(); 
    for (var j = 0; j < cols.length; j++) { 
     rowString += cols[j].getV() + '\t'; 
    } 
    Logger.log(rowString); 
+0

Lieber Michael, ich Ihre Lösung versucht. Darf ich eine zusätzliche Frage stellen. Um auf diese öffentlichen Daten zugreifen zu können, muss ich eine projectid angeben. Wie ich in Google Spreadhseet bin, ist es der Projektschlüssel appscript? , weil ich eine Ausnahme und die folgenden Meldungen erhalten: Ausnahme: ungültige Projekt-ID "..." Projekt-IDs müssen alphanumerische Zeichen enthalten und maximal 63 Zeichen lang sein, – GQuery

+0

Gute Frage: projectId sollte auf Ihre Google Dev Console-Projekt-ID verweisen , die Sie hier einrichten müssen: https://code.google.com/apis/console. Während Sie Ihre verfügbaren Projekt-IDs über die BigQuery-API abrufen können, können Sie Ihre projectId schnell anzeigen lassen, indem Sie sich die URL in dem von Ihnen erstellten Projekt ansehen: https://code.google.com/apis/console/? pli = 1 # project: 265312182736 –

+0

Hallo Michael, hast du eine Beispiel-Tabelle zu teilen. Ich habe es versucht, aber ich kann nicht auf meine Beispiel- oder Google-Beispieldaten zugreifen? – GQuery

0

Ich habe nicht den Ruf, auf hurricaneditka16 zu kommentieren. Deshalb gab ich diese Antwort: Diese Linie

queryResults = BigQuery.Jobs.query(projectId, sql); 

Sollte von

.query(
    resource, 
    projectId); 

Ressource ersetzt werden ist eine leichte Transformation auf dem SQL verwendet, um Sie vor. Versuche diese Transformation und es wird funktionieren.

function getResource(sql) { 
    var resource = '{"query": "sql"}' 
    resource = resource.replace('sql', sql); 
    return resource 
}