2012-05-27 27 views
6

Ben google elektronik tablo içinde bigquery verileri nasıl alabilirim görmek için internete bakıyorum. Bu appscript örneğini buldum, ancak API çalışmayanlar aynı seviyede değil ve API2 veya API @ beta1 ile appscript'da nasıl sorgulanacağını bulamıyorum. Fikirleriniz için şimdidenGoogle Spreadsheet ile BigQuery Erişimi

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); 
    } 
    } 
} 

sayesinde

GQ

+0

Bu talimatlar benim için çalıştı: https://greenido.wordpress.com/2013/12/16/big-query-and-google-spreadsheet-intergration/ – arun

cevap

9

GÜNCELLEME: Biz sadece burada bu sorunun cevabı size yol gerektiğine yeni bir BigQuery + Apps Kodu Eğitimi ekledi:https://developers.google.com/apps-script/articles/bigquery_tutorial

@GQuery: En son BigQuery API sürümüne (v2) erişmek için AppsScript'i çok yeni güncelledik. Başlamak için basit bir örnek, sonuçları AppScript günlüğünde gösterecek. AppScript/BigQuery belgelerine bir güncelleme üzerinde çalışıyoruz.

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

Sevgili Michael, senin çözüm çalıştı. Ek bir soru sorabilir miyim. Bu halka açık verilere erişmek için bir proje belirtmek zorundayım. Google spreadhseet'teyken , appscript proje anahtarı mı? Bir istisna ve aşağıdaki iletiler aldığım için: Özel Durum: Geçersiz Proje Kimliği "..." Proje kimlikleri alfasayısal karakterler içermeli ve en fazla 63 karakter uzunluğunda olmalı, – GQuery

+0

İyi Soru: projectId, Google Dev Console Project ID'nize başvurmalıdır. Burada ayarlamanız gerekenler: https://code.google.com/apis/console. BigQuery API'sı aracılığıyla mevcut projenize erişebildiğiniz halde, projectId'nizi görüntülemenin hızlı bir yolu, oluşturduğunuz projenin URL'sine bakmaktır: https://code.google.com/apis/console/? pli = 1 # proje: 265312182736 –

+0

Merhaba Michael, paylaşmak için örnek bir elektronik tablonuz var. Denedim, ancak örnek veya google örnek verilerine erişemiyorum? – GQuery

0

Hurricaneditka16 hakkında yorum yapmak için bir itibarım yok. Bu nedenle, bu cevabı yayınladı:

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

önce kullandığınız sql hafif bir dönüşümdür

.query(
    resource, 
    projectId); 

Kaynak yerini olmalı Bu hat. Bu dönüşümü dene ve işe yarayacak.

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