목적
구글 앱스 스크립트의 BigQuery Service 를 사용해서 빅쿼리의 쿼리를 실행하는 방법을 이해합니다.
BigQuery Service 추가하기
구글 앱스 스크립트에서 BigQuery Service 를 사용해 BigQuery API 를 사용하기 위해서는 먼저 편집기의 왼쪽 서비스 메뉴에서 BigQuery API 를 추가해주어야 합니다.
테이블 준비
[GAS] 빅쿼리 API 로 테이블에 구글 시트 데이터 추가하기 를 진행해서 테이블을 준비합니다.
cat, dog, bird 의 수를 합한 total 이라는 값을 구하는 쿼리
빅쿼리 편집기에서 다음과 같이 쿼리를 작성하면 간단하게 cat, dog, bird 수를 합한 total 값을 확인할 수 있습니다.
SELECT *, cat + dog + bird AS total FROM `ambient-catcher-284708.test.newTbl2022`
JavaScript
복사
이 쿼리의 결과값을 newTbl2022에 덮어쓰기하려면 어떻게 해야할까요?
앱스 스크립트로 쿼리 실행하기
[GAS] 빅쿼리 API 로 테이블에 구글 시트 데이터 추가하기 의 코드를 약간만 변형시켜주면 가능합니다. 다음과 같이 코드를 작성합니다.
function query() {
const projectId = 'ambient-catcher-284708'
const datasetId = 'test'
const tableId = 'newTbl2022'
const job = {
configuration: {
query: {
query: `SELECT *, cat + dog + bird AS total FROM ${datasetId}.${tableId}`,
destinationTable: {
projectId: projectId,
datasetId: datasetId,
tableId: tableId
},
writeDisposition: 'WRITE_TRUNCATE'
}
}
}
try {
BigQuery.Jobs.insert(job, projectId)
Logger.log(`total 열을 추가하였습니다.`)
// Logger.log(result)
} catch (err) {
Logger.log(err)
}
}
JavaScript
복사
기존의 코드와 유사한데 job의 configuration 하위에 query가 추가되었습니다. query 하위에 다시 query 라고 써주고 실제로 실행할 쿼리를 입력해주고, destinationTable을 설정해줍니다. 이 모든 것이 query 에 포함되는 것입니다.
writeDisposition 을 WRITE_TRUNCATE 로 설정해주어야 테이블을 비우고, 새로운 결과값을 덮어쓰기 합니다. 앱스 스크립트에서 빅쿼리의 쿼리를 작성할 때에는 CREATE OR REPLACE TABLE 을 사용할 수 없기 때문에 job 하위에 내용을 포함시켜야 합니다.
그리고, 이번에는 blob이 따로 존재하지 않고, 쿼리의 결과를 그대로 입력하기 때문에, BigQuery.Jobs.insert(job, projectId)로 입력해줍니다.
스크립트를 실행하면 다음과 같이 total 열이 추가됩니다.
아주 간단한 쿼리를 살펴보았지만, 이를 응용하면 구글 시트에서 데이터를 빅쿼리로 입력한 뒤에 다른 테이블과 조인을 실행하는 것과 같은 복잡한 프로세스로 구현할 수 있습니다.