[Big Query] Google Sheet 빅쿼리 연동하기. Google Sheet 데이터를 빅쿼리 테이블로 쿼리하는 방법.
빅쿼리에서는 빅쿼리 외부에 보관된 데이터에 대해 마치 테이블 처럼 쿼리를 실행할 수 있다.
그 중 Google Dirve에 보관된 Google Spread Sheet의 데이터를 쿼리해 보자.
Google Spread Sheet를 바로 읽어들이기 때문에 Sheet 에서 데이터를 편집(추가,삭제,업데이트) 하면 실시간으로 반영된 데이터를 기준으로 쿼리할 수 있다.
1. 테이블을 만들고자하는 데이터 셋에 테이블 만들기
- 데이터셋 > 더보기> create table
2. 소스 설정
- 테이블 종류: 드라이브 선택
- 드라이브 URI : 테이블처럼 활용하고자 하는 Google Sheet URI 입력
- 파일 형식: Google 스트레드 시트 선택
- 시트 범위(optional): 시트가 여러개인 경우 시트명을 지정해준다.
3. 대상 설정
만들고자 하는 위치의 프로젝트명/ 데이터셋명/ 테이블명/ 외부테이블로 지정해준다.
4. 스키마 설정
스키마는 2가지 방법으로 설정할수 있다.
1) 스키마 자동 감지 체크
자동감지에 체크하면 Google Sheet의 데이터를 자동 감지하여 스키마 이름과 데이터 형식을 자동으로 설정한다.
단, Sheet 내 헤더 행의 형식이 스키마명으로 사용가능 한지 확인해야 한다.
정확한 기준은 모르겠지만 테스트 해본 결과, 공백 포함 등 스키마명으로 불가한 경우 헤더 행에 등록된 이름이 아닌 임시명(string_field)으로 설정되니 주의하자!
또한, 자동 감지의 경우 엑셀에 존재하는 데이터를 기반으로 데이터 타입을 설정하므로 원하는 데이터 타입이 있다면 수동으로 설정해주는 것이 좋다. (예를 들어 현재 데이터가 숫자로만 이루어져 있다면 빅쿼리는 INTEGER로 인식하여 타입을 지정할 것이다. 하지만 추후에 STRING 값이 들어가게 된다면 에러가 날 수 있다.)
2) 직접 필드 추가 눌러서 수동으로 설정.
직접 스키마 명, 타입, NULL 여부, 주석까지 달 수 있다. 추후 스키마 수정에서 스키마 명과 NULL 모드는 변경이 불가하기 때문에 귀찮더라도 수동으로 직접 설정 해 주는 것을 추천.
Key 컬럼에는 Not Null 설정 등이 가능하니 수동으로 상세하게 지정해주도록 하자.
5. 고급 옵션 설정
주의할 점! 만약 Google Sheet 의 첫행이 헤더행이라면 반드시 첫행 스킵 설정을 해주어야 한다.
default 는 0 으로 설정되어있는데 그대로 두면 헤더행까지 데이터로 들어갈 수 있다.
6. 모두 설정했다면 CREATE TABLE 클릭.
이제 생성된 테이블을 조회해 보자.
1. SCHEMA
test123 테이블은 테스트용으로 아래 google sheet 와 연동하여 생성했다.
구글 시트의 헤더와 똑같이 스키마가 생성되었다.
2. DETAILS
내부 데이터 활용하여 데이터 생성시 Storage info 가 나오지만 외부 데이터는 아래와 같이 외부 소스 정보를 확인할 수 있다.
위와 같이 외부 데이터 소스에 원본인 google sheet URI 정보가 나오고, 클릭시 해당 시트로 이동한다.
* PREVIEW 제공 불가
내부 테이블의 경우 데이터 미리보기 기능으로 SELECT ALL 과 동일한 결과를 보여주는 기능을 제공하는데, 외부 데이터 소스인 경우 데이터 미리보기가 불가하다. 미리보기 탭이 사라짐.
3. 쿼리
이제 외부 소스와 연결된 test123 테이블에서 쿼리를 날려보자.
SLEECT * (ALL) 을 해보면 원본 시트의 데이터가 읽혀지는 것을 확인할 수 있다.
여기서 실시간으로 구글시트의 데이터를 수정한 후, 다시 같은 SELECT문을 날려보면 수정된 정보로 읽혀질 것이다.
즉, 쿼리 결과는 캐시되지 않고 실시간으로 수정 된다.
데이터 수정이 자유로운 장점이 있지만, 반면 수정이 잦다면 데이터 정합성을 보증할 수 없다는 단점이 있으므로 상황에 알맞게 사용해야 한다.