GAS에서 BigQuery에서 매일 자동 데이터를 가져와 스프레드시트에 반영
소개
이 항목은 비 엔지니어 GAS 초보자에 의한 것입니다.
매일 BigQuery에서 복수의 정해진 쿼리를 실행해 사업 수치를 집계해, 스프레드시트에 반영하고 있었던 것이 수수하게 부담이었기 때문에, GAS에 의한 자동화를 목표로 했습니다.
또한 스프레드 시트에서 BigQuery를 호출하는 스크립트는 @ Satoru_Mag의 "BigQuery와 스프레드시트와 GAS와"을 사용했습니다.
그것을 바탕으로,
· 루프 처리에서 여러 쿼리가 실행되는 스크립트
· 매일 자동으로 실행하고 업데이트하는 스크립트
을 더한 것입니다.
평상시 프로그래밍에 익숙하지 않은 분이라도 재현할 수 있는 내용이 되고 있습니다.
꼭 비 엔지니어 분들도 도전해보세요!
스프레드시트에서 BigQuery 호출
이쪽의 항목은 전출의 @ 사토루 _ 마 g씨의 「 BigQuery와 스프레드시트와 GAS와 」를 참고해 주십시오.
①GAS에서 API 연계를 실행할 수 있도록 설정합니다.
②문중에 있는 스크립트를 「스크립트 에디터」에 복사해 둡니다.
여기를 대개로, 다음의 루프 처리에 의해 복수의 쿼리가 실행되도록(듯이) 편집해 갑니다.
루프 처리에서 여러 쿼리 실행
그럼 즉시 루프 처리가 실행되도록 해 갑니다.
//SQL 결과를 출력하는 시트
︙
︙
var start_column = master_sheet.getRange('C4').getValue();
의 부분을 다음과 같이 변경합니다.
//SQLの結果を出力するシート
var sheet_name = ['①','②','③','④','⑤','⑥','⑦','⑧','⑨','⑩','⑪','⑫']
var query = ['B2','B3','B4','B5','B6','B7','B8','B9','B10','B11','B12','B13']
var row = ['C2','C3','C4','C5','C6','C7','C8','C9','C10','C11','C12','C13']
var column= ['D2','D3','D4','D5','D6','D7','D8','D9','D10','D11','D12','D13']
function onRunQuery() {
for(var k = 0; k < sheet_name.length ; k++){
var result_sheet = ss.getSheetByName(sheet_name[k]);
var sql = master_sheet.getRange(query[k]).getValue();
var start_row = master_sheet.getRange(row[k]).getValue();
var start_column = master_sheet.getRange(column[k]).getValue();
다음과 같은 의미가 있습니다.
· sheet_name => 출력 대상 시트 이름
· query => 실행할 쿼리가 작성된 셀
· row => 출력 할 행이 작성된 셀
· column => 출력하는 열이 쓰여있는 셀
동시에 스프레드시트도 아래 이미지와 같이 정돈해 둡시다.
(※시트명, 셀의 지정은 스크립트의 기재와 대응시켜만 있으면 물론 임의의 것으로 해 주셔도 괜찮습니다.)
매일 자동으로 실행 및 업데이트
이쪽은 「 항상 옆에 IT 일 」의 이하 2개의 기사를 참고로 했습니다.
① Google Apps Script에서 매일 정해진 시간에 스크립트를 실행하는 트리거 설정
② Google Apps Script에서 사용한 트리거를 삭제하는 방법
우선은 아래와 같이 같은 파일의 상단 또는 별개의 파일을 작성해 기재해 주세요. (※시간은 임의로 지정)
function setTrigger(){
const time = new Date();
time.setHours(08);
time.setMinutes(00);
ScriptApp.newTrigger('onRunQuery').timeBased().at(time).create();
}
function delTrigger() {
const triggers = ScriptApp.getProjectTriggers();
for(const trigger of triggers){
if(trigger.getHandlerFunction() == "onRunQuery"){
ScriptApp.deleteTrigger(trigger);
}
}
}
그리고
function onRunQuery()
의 처음에, 「delTrigger();」를 기재해 호출할 수 있도록(듯이) 합시다.
function onRunQuery() {
delTrigger();
그런 다음 스크립트 편집기의 "트리거"작성 화면에서 다음 설정을 수행합니다.
여기까지 완료하면, 지정한 시각에 갱신될 것입니다! !
(덤) 수동으로 업데이트 할 수 있기를 원합니다.
별도의 파일에서 다음과 같이 작성하여 onOpen 함수를 실행해보십시오.
스프레드시트의 메뉴 막대에 버튼이 탄생합니다.
갱신하고 싶은 타이밍에 버튼을 누르면 수동으로도 갱신할 수 있게 됩니다.
// メニューバーに追加
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('更新ボタン')
.addItem('更新', 'onRunQuery')
.addToUi();
}
요약
어떻습니까? 제대로 실행 되었습니까?
이것은 굉장히 매일의 수치 갱신 작업으로부터 해방됩니다!
그리고는 자동 취득한 시트를, 대시보드에서 사용하고 있는 시트에 importrange 함수나 vlookup 함수등을 사용해 참조해 주면, 대시보드가 매일 자동으로 최신 수치로 갱신되게 됩니다.
Reference
이 문제에 관하여(GAS에서 BigQuery에서 매일 자동 데이터를 가져와 스프레드시트에 반영), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/umek_0524/items/3863776aef0063321e8d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이쪽의 항목은 전출의 @ 사토루 _ 마 g씨의 「 BigQuery와 스프레드시트와 GAS와 」를 참고해 주십시오.
①GAS에서 API 연계를 실행할 수 있도록 설정합니다.
②문중에 있는 스크립트를 「스크립트 에디터」에 복사해 둡니다.
여기를 대개로, 다음의 루프 처리에 의해 복수의 쿼리가 실행되도록(듯이) 편집해 갑니다.
루프 처리에서 여러 쿼리 실행
그럼 즉시 루프 처리가 실행되도록 해 갑니다.
//SQL 결과를 출력하는 시트
︙
︙
var start_column = master_sheet.getRange('C4').getValue();
의 부분을 다음과 같이 변경합니다.
//SQLの結果を出力するシート
var sheet_name = ['①','②','③','④','⑤','⑥','⑦','⑧','⑨','⑩','⑪','⑫']
var query = ['B2','B3','B4','B5','B6','B7','B8','B9','B10','B11','B12','B13']
var row = ['C2','C3','C4','C5','C6','C7','C8','C9','C10','C11','C12','C13']
var column= ['D2','D3','D4','D5','D6','D7','D8','D9','D10','D11','D12','D13']
function onRunQuery() {
for(var k = 0; k < sheet_name.length ; k++){
var result_sheet = ss.getSheetByName(sheet_name[k]);
var sql = master_sheet.getRange(query[k]).getValue();
var start_row = master_sheet.getRange(row[k]).getValue();
var start_column = master_sheet.getRange(column[k]).getValue();
다음과 같은 의미가 있습니다.
· sheet_name => 출력 대상 시트 이름
· query => 실행할 쿼리가 작성된 셀
· row => 출력 할 행이 작성된 셀
· column => 출력하는 열이 쓰여있는 셀
동시에 스프레드시트도 아래 이미지와 같이 정돈해 둡시다.
(※시트명, 셀의 지정은 스크립트의 기재와 대응시켜만 있으면 물론 임의의 것으로 해 주셔도 괜찮습니다.)
매일 자동으로 실행 및 업데이트
이쪽은 「 항상 옆에 IT 일 」의 이하 2개의 기사를 참고로 했습니다.
① Google Apps Script에서 매일 정해진 시간에 스크립트를 실행하는 트리거 설정
② Google Apps Script에서 사용한 트리거를 삭제하는 방법
우선은 아래와 같이 같은 파일의 상단 또는 별개의 파일을 작성해 기재해 주세요. (※시간은 임의로 지정)
function setTrigger(){
const time = new Date();
time.setHours(08);
time.setMinutes(00);
ScriptApp.newTrigger('onRunQuery').timeBased().at(time).create();
}
function delTrigger() {
const triggers = ScriptApp.getProjectTriggers();
for(const trigger of triggers){
if(trigger.getHandlerFunction() == "onRunQuery"){
ScriptApp.deleteTrigger(trigger);
}
}
}
그리고
function onRunQuery()
의 처음에, 「delTrigger();」를 기재해 호출할 수 있도록(듯이) 합시다.
function onRunQuery() {
delTrigger();
그런 다음 스크립트 편집기의 "트리거"작성 화면에서 다음 설정을 수행합니다.
여기까지 완료하면, 지정한 시각에 갱신될 것입니다! !
(덤) 수동으로 업데이트 할 수 있기를 원합니다.
별도의 파일에서 다음과 같이 작성하여 onOpen 함수를 실행해보십시오.
스프레드시트의 메뉴 막대에 버튼이 탄생합니다.
갱신하고 싶은 타이밍에 버튼을 누르면 수동으로도 갱신할 수 있게 됩니다.
// メニューバーに追加
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('更新ボタン')
.addItem('更新', 'onRunQuery')
.addToUi();
}
요약
어떻습니까? 제대로 실행 되었습니까?
이것은 굉장히 매일의 수치 갱신 작업으로부터 해방됩니다!
그리고는 자동 취득한 시트를, 대시보드에서 사용하고 있는 시트에 importrange 함수나 vlookup 함수등을 사용해 참조해 주면, 대시보드가 매일 자동으로 최신 수치로 갱신되게 됩니다.
Reference
이 문제에 관하여(GAS에서 BigQuery에서 매일 자동 데이터를 가져와 스프레드시트에 반영), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/umek_0524/items/3863776aef0063321e8d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
//SQLの結果を出力するシート
var sheet_name = ['①','②','③','④','⑤','⑥','⑦','⑧','⑨','⑩','⑪','⑫']
var query = ['B2','B3','B4','B5','B6','B7','B8','B9','B10','B11','B12','B13']
var row = ['C2','C3','C4','C5','C6','C7','C8','C9','C10','C11','C12','C13']
var column= ['D2','D3','D4','D5','D6','D7','D8','D9','D10','D11','D12','D13']
function onRunQuery() {
for(var k = 0; k < sheet_name.length ; k++){
var result_sheet = ss.getSheetByName(sheet_name[k]);
var sql = master_sheet.getRange(query[k]).getValue();
var start_row = master_sheet.getRange(row[k]).getValue();
var start_column = master_sheet.getRange(column[k]).getValue();
이쪽은 「 항상 옆에 IT 일 」의 이하 2개의 기사를 참고로 했습니다.
① Google Apps Script에서 매일 정해진 시간에 스크립트를 실행하는 트리거 설정
② Google Apps Script에서 사용한 트리거를 삭제하는 방법
우선은 아래와 같이 같은 파일의 상단 또는 별개의 파일을 작성해 기재해 주세요. (※시간은 임의로 지정)
function setTrigger(){
const time = new Date();
time.setHours(08);
time.setMinutes(00);
ScriptApp.newTrigger('onRunQuery').timeBased().at(time).create();
}
function delTrigger() {
const triggers = ScriptApp.getProjectTriggers();
for(const trigger of triggers){
if(trigger.getHandlerFunction() == "onRunQuery"){
ScriptApp.deleteTrigger(trigger);
}
}
}
그리고
function onRunQuery()
의 처음에, 「delTrigger();」를 기재해 호출할 수 있도록(듯이) 합시다.
function onRunQuery() {
delTrigger();
그런 다음 스크립트 편집기의 "트리거"작성 화면에서 다음 설정을 수행합니다.
여기까지 완료하면, 지정한 시각에 갱신될 것입니다! !
(덤) 수동으로 업데이트 할 수 있기를 원합니다.
별도의 파일에서 다음과 같이 작성하여 onOpen 함수를 실행해보십시오.
스프레드시트의 메뉴 막대에 버튼이 탄생합니다.
갱신하고 싶은 타이밍에 버튼을 누르면 수동으로도 갱신할 수 있게 됩니다.
// メニューバーに追加
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('更新ボタン')
.addItem('更新', 'onRunQuery')
.addToUi();
}
요약
어떻습니까? 제대로 실행 되었습니까?
이것은 굉장히 매일의 수치 갱신 작업으로부터 해방됩니다!
그리고는 자동 취득한 시트를, 대시보드에서 사용하고 있는 시트에 importrange 함수나 vlookup 함수등을 사용해 참조해 주면, 대시보드가 매일 자동으로 최신 수치로 갱신되게 됩니다.
Reference
이 문제에 관하여(GAS에서 BigQuery에서 매일 자동 데이터를 가져와 스프레드시트에 반영), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/umek_0524/items/3863776aef0063321e8d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
// メニューバーに追加
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('更新ボタン')
.addItem('更新', 'onRunQuery')
.addToUi();
}
어떻습니까? 제대로 실행 되었습니까?
이것은 굉장히 매일의 수치 갱신 작업으로부터 해방됩니다!
그리고는 자동 취득한 시트를, 대시보드에서 사용하고 있는 시트에 importrange 함수나 vlookup 함수등을 사용해 참조해 주면, 대시보드가 매일 자동으로 최신 수치로 갱신되게 됩니다.
Reference
이 문제에 관하여(GAS에서 BigQuery에서 매일 자동 데이터를 가져와 스프레드시트에 반영), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/umek_0524/items/3863776aef0063321e8d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)