2012-05-27 4 views
6

Google 스프레드 시트에서 bigquery 데이터를 가져올 수있는 방법을 인터넷에서 확인합니다. 이 appscript 샘플을 발견했지만 API가 동일한 수준이 아니며 appscript에서 API2 또는 API @ beta1을 사용하여 쿼리하는 방법을 찾지 못했습니다. 당신의 아이디어에 미리Google 스프레드 시트로 BigQuery에 액세스

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

감사합니다,

GQ

+0

이 지침은 나를 위해 일한 : https://greenido.wordpress.com/2013/12/16/big-query-and-google-spreadsheet-intergration/ – arun

답변

9

UPDATE : 우리는 여기이 질문에 대한 답을 안내해야하는 새로운 BigQuery에 + 애플리케이션 스크립트 튜토리얼을 추가 :https://developers.google.com/apps-script/articles/bigquery_tutorial

@GQuery : 최근에 Apps Script를 업데이트하여 최신 BigQuery API 버전 (v2)에 액세스 할 수있게되었습니다. 다음은 간단한 예제입니다. AppScript 로그에 결과가 표시됩니다. 우리는 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

친애하는 마이클, 당신의 솔루션을 시도했다. 추가 질문을해도 되겠습니까? 공개 데이터에 액세스하려면 projectid를 지정해야합니다.Google 스프레드 시트에있는대로 appscript 프로젝트 키입니까? 예외와 다음 메시지가 표시되기 때문에 예외 : 잘못된 프로젝트 ID "..."프로젝트 ID는 영숫자 여야하며 길이는 최대 63 자이어야합니다. – GQuery

+0

좋은 질문 : projectId가 Google 개발 콘솔 프로젝트 ID를 참조해야합니다. 여기에서 설정해야합니다 (https://code.google.com/apis/console). BigQuery API를 통해 사용 가능한 프로젝트 ID를 얻을 수 있지만 프로젝트 ID를 빠르게 볼 수있는 방법은 만드는 프로젝트의 URL (https://code.google.com/apis/console/?hl=ko)을 살펴 보는 것입니다. pli = 1 # project : 265312182736 –

+0

안녕하세요. 공유 할 샘플 스프레드 시트가 있습니까? 시도했지만 샘플 또는 Google 샘플 데이터에 액세스 할 수 없습니까? – GQuery

0

나는 hurricaneditka16에 대한 평판을 갖고 있지 않습니다. 따라서 나는이 대답을 게시 :

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

가 이전에 사용되는 SQL에 약간의 변화가

.query(
    resource, 
    projectId); 

자원으로 대체해야이 줄. 이 변형을 시도하면 효과가 있습니다.

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