BigQuery를 GoogleAppsScript와 GoogleSpreadsheet의 조합으로 사용

사내에서는 기본적으로 혼자 분석하거나 집계하기 때문에,
어리석게 집계, 분석의 사이클을 돌리고 있으면 아무것도 할 수 없게 되기 때문에
정기 보고서와 같은 것은 GoogleAppsScript (GAS)를 사용하여
오로지 자동화하도록 하고 있다

실제로 하고 있는 내용을 메모가 쓰여져 간다

Google 애널리틱스 애드온 사용



분석에는 주로 Google Analytics (GA)를 이용하기 때문에,
작은 숫자를 제대로보고 싶을 때 유용

특히 상세한 것은 설명하지 않지만, 스케줄 설정 기능이 있기 때문에
정기적으로 내고 싶은 간단한 값이 있으면 이것을 사용하도록 하고 있다

GA에서 보는 매일 보는 수치는 한정되어 있고, GA의 관리 화면이 매우 무겁다.
어쩌면 상황이라면 일정에 매일 특정 값만 넣도록 설정해야합니다.
스트레스 프리에 GA의 수치를 확인할 수 있다

GoogleSpread의 내용을 로드하고 정기 실행



GAS는 작업 관리 시스템으로보고 있지만 GoogleSpreadsheet (GS)와
결합하면 더욱 강력해진다

기본적으로는 GS의 셀에 값을 갖게 해 두고, GAS내에서 그 녀석을 사용하게 한다

BigQuery 쿼리의 일부를 매월 변경하여 정기 실행



예를 들어 BigQuery에서 날짜 만 변경하여 매월 정기 실행하고 싶지만,
날짜를 변경하는 작업도 수행하는 작업도 귀찮을 수 있음

이 경우 다음과 같이 설정하면 모두 자동화되어 행복해진다.

다음 날짜 부분을 변경하여 정기적으로 실행하고 싶습니다.

#standardSQL

SELECT
    DISTINCT fullVisitorId AS user_id
FROM
    `projectId.datasetName.ga_sessions_*`
WHERE
    -- 前月の初日 ~ 末日で設定したい
    _TABLE_SUFFIX BETWEEN "20170801" AND "20170831"
  • 셀에 날짜 가져오기

  • "yearMonth"라는 시트를 만들어 적당한 셀에 전월의 날짜를 yyyyMM의 형태로
    가져오도록 함수를 지정한다.



    예를 들어, 수동으로도 설정할 수 있도록 고려하여 셀을 만들면
    위의 B2 셀에 다음 함수를 지정합니다.
    =IF(ISBLANK(B1),YEAR(EOMONTH(TODAY(),-1)) & TEXT(MONTH(EOMONTH(TODAY(),-1)),"00"),B1)
    이제 마음대로 날짜가 바뀌는 곳까지 설정할 수 있었다.
  • GAS에서 셀을 참조하여 값 얻기

  • 스프레드 시트 메뉴에서 "도구> 스크립트 편집기"를 선택하십시오.
    스크립트 설정 화면으로 이동하여 다음 기능을 추가합니다.
    function getYearMonth() {
      var sheet = spreadsheet.getSheetByName('yearMonth');
      var range = sheet.getRange(2, 2);
      var values = range.getValues();
    
      return String(values[0]);
    }
    

    이제 yyyyMM까지 얻을 수 있다. 다음에 첫날과 말일을 취득해 캐릭터 라인형으로 돌려주는 곳까지 실행한다
    다음 함수를 스크립트 편집기에 추가
    function getPeriodFromYearMonth() {
      var yearMonth = getYearMonth()
      var startDate = yearMonth + '01';
      var newDate = new Date(yearMonth.substr(0, 4), Number(yearMonth.substr(4, 2)) - 1, 1);
      newDate.setMonth(newDate.getMonth() + 1);
      newDate.setDate(newDate.getDate() - 1);
      var endDate = Utilities.formatDate(newDate, 'Asia/Tokyo', 'yyyyMMdd');
    
      return {
        startDate: startDate,
        endDate: endDate
      };
    }
    

    이것으로 첫날과 말일의 yyyyMMdd 형식의 일자를 객체로 돌려줄 때까지 할 수 있었다
    그런 다음이 녀석을 BigQuery 쿼리에 넣고 반환하는 함수 추가
    function generateQuery() {
      var period = getPeriodFromYearMonth();
      var startOfMonth = period.startDate;
      var endOfMonth = period.endDate;
    
      return [
        '#standardSQL'
        , ''
        , 'SELECT'
        , '    DISTINCT fullVisitorId AS user_id'
        , 'FROM'
        , '    `projectId.datasetName.ga_sessions_*`'
        , 'WHERE'
        , '    -- 前月の初日 ~ 末日で設定したい'
        , '    _TABLE_SUFFIX BETWEEN "' + startOfMonth +  '" AND "' + endOfMonth + '"'
        , ';'
      ].join('\n');
    }
    

    이제 쿼리를 게시 할 수있었습니다.
    그리고 실제로 스크립트 편집기 메뉴에서 "자원> Google 확장 서비스"로
    이동하여 BiGQueryAPI를 켜고 BigQuery 객체에 쿼리를 전달하면 실행할 수 있습니다.

    그 근처의 구체적인 방법은 아래를 참조하면 괜찮습니다.

  • 정기 실행
    만약 쿼리를 ​​발행하는 곳까지를 목표로 하면 최종 스크립트는 다음과 같이 되어 있다
    마지막.
    function getYearMonth() {
      var sheet = spreadsheet.getSheetByName('yearMonth');
      var range = sheet.getRange(2, 2);
      var values = range.getValues();
    
      return String(values[0]);
    }
    
    function getPeriodFromYearMonth() {
      var yearMonth = getYearMonth()
      var startDate = yearMonth + '01';
      var newDate = new Date(yearMonth.substr(0, 4), Number(yearMonth.substr(4, 2)) - 1, 1);
      newDate.setMonth(newDate.getMonth() + 1);
      newDate.setDate(newDate.getDate() - 1);
      var endDate = Utilities.formatDate(newDate, 'Asia/Tokyo', 'yyyyMMdd');
    
      return {
        startDate: startDate,
        endDate: endDate
      };
    }
    
    function generateQuery() {
      var period = getPeriodFromYearMonth();
      var startOfMonth = period.startDate;
      var endOfMonth = period.endDate;
    
      return [
        '#standardSQL'
        , ''
        , 'SELECT'
        , '    DISTINCT fullVisitorId AS user_id'
        , 'FROM'
        , '    `projectId.datasetName.ga_sessions_*`'
        , 'WHERE'
        , '    -- 前月の初日 ~ 末日で設定したい'
        , '    _TABLE_SUFFIX BETWEEN "' + startOfMonth +  '" AND "' + endOfMonth + '"'
        , ';'
      ].join('\n');
    }
    
    function logger() {
      Logger.log(generateQuery());
    }
    
    logger 를 주기적으로 실행할 때 스크립트 편집기 메뉴에서
    「편집 > 현재 프로젝트의 트리거」로부터 실행하고 싶은 함수를 어느 빈도로 실행할까 설정한다



    이렇게 하면 GAS가 매월 1일에 logger 를 정기 실행해 줍니다.
    날짜가 바뀐 쿼리를 로그에서 확인할 수 있게 된다. 이 처리 자체는 의미가 없지만,
    정기적으로 실행하고 싶은 처리가 있으면 편리

    나머지는 도서관의 이야기, 설정의 중앙 관리 등이 있지만 다음에 작성합니다.
  • 좋은 웹페이지 즐겨찾기