2012-05-27 18 views
6

Busco en Internet para ver cómo puedo importar datos de bigquery dentro de la hoja de cálculo de google. Encontré este ejemplo de appscript, pero no funciona, la API no está en el mismo nivel, y no encuentro cómo consultar con API2 o API @ beta1 en appscript.Acceso a BigQuery con 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); 
    } 
    } 
} 

Gracias de antemano por sus ideas,

GQ

+0

Estas instrucciones trabajaron para mí: https://greenido.wordpress.com/2013/12/16/big-query-and-google-spreadsheet-intergration/ – arun

Respuesta

9

ACTUALIZACIÓN: Hemos añadido una nueva + Apps Script Tutorial BigQuery que debe caminar a través de la respuesta a esta pregunta aquí:https://developers.google.com/apps-script/articles/bigquery_tutorial

@GQuery: Recientemente hemos actualizado AppsScript para tener acceso a la última versión de la API de BigQuery (v2). Aquí hay un ejemplo simple para comenzar, mostrará los resultados en el registro de AppScript. Estamos trabajando en una actualización de la documentación de AppScript/BigQuery.

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

Estimado Michael, probé su solución. ¿Puedo hacer una pregunta adicional? Para acceder a esos datos públicos, debo especificar un projectid. como estoy en google spreadhseet, ¿es la clave del proyecto de appscript? porque recibo una excepción y los siguientes mensajes: Excepción: Id. De proyecto no válido "..." Los Id. De proyecto deben contener caracteres alfanuméricos y tener un máximo de 63 caracteres, – GQuery

+0

Buena pregunta: projectId debe hacer referencia a su ID de proyecto de Google Dev Console , que debe configurar aquí: https://code.google.com/apis/console. Si bien puede obtener sus ID de proyecto disponibles a través de la API de BigQuery, una forma rápida de ver su projectId es echar un vistazo a la URL en el proyecto que crea: https://code.google.com/apis/console/? pli = 1 # project: 265312182736 –

+0

Hola, Michael, tienes una hoja de cálculo de muestra para compartir. ¡Intenté pero no puedo acceder a mi muestra o a los datos de muestra de google? – GQuery

0

No tengo la reputación de comentar sobre hurricaneditka16. Por lo tanto, he publicado esta respuesta: Esta línea

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

debe sustituirse por

.query(
    resource, 
    projectId); 

de recursos es una pequeña transformación en el SQL que ha utilizado anteriormente. Prueba esta transformación y funcionará.

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