티스토리 뷰
먼저 bq load 명령어에 대한 자세한 설명은 여기를 참고하면 된다.
로컬에서 간단한 csv 파일을 저장하여 big query 테이블로 저장해보자.
dataset 생성
작업을 하기 전에 작업 프로젝트에서 dataset을 먼저 생성해주어야 한다.
콘솔에서 바로 작업을 해주어도 되지만 문서를 참고하여 간단히 cli를 사용해서 생성해보았다. gcloud init
으로 기본 프로젝트를 설정해주었기 때문에 location이나 project_id는 따로 적어주지 않았다.
bq mk -d \
--default_table_expiration 3600 \
--description "This is my dataset." \
mydataset
bq ls
로 현재 dataset을 확인할 수 있다.
╰─ bq ls
datasetId
------------
mydataset
테이블 로드
bq load
로 로컬에 저장해두었던 csv 파일을 bigquery의 테이블로 가져와보았다.
저장한 csv 파일의 헤더에 공백이 있는경우 공백은 _로 대체해서 저장해야하고 난 대문자도 모두 소문자로 바꾸어주었다.
bq load --source_format=CSV --autodetect=true mydataset.new_table example.csv
--source_format
: 처음에 지정을 안해줬더니 에러가 발생해서 추가해주었다.--autodetect
: 스키마 자동 감지로, 테이블에서 스키마를 자동으로 가져온다. 하지만 테스트를 해보니 모든 스키마를 정확하게 가져오는 경우가 아닐때도 있어서 주의가 필요하다.
만약 기본으로 설정해둔 프로젝트가 아닌 다른 프로젝트의 dataset에 테이블을 만들고 싶다면 projectId:dataset.new_table
과 같이 변경해주면 된다.
[참고] 위에서 사용된 --source_format이나 --autodetect와 같은 부울 플래그들의 오른쪽에 true, false를 표기하여 사용되기도하지만 다른 형식으로도 사용될 수 있다. --FLAGNAME과 같이부울 플래그 자체만 사용된 경우는 true를 의미하며
--noFLAGNAME처럼 사용된 경우에는 false를 의미한다.
지정된 스키마 파일을 사용하는 경우
스키마 파일을 아래와 같이 csv 파일에 맞게 작성해야 한다.
# schema.json
[
{"name": "id", "type": "INTEGER"},
{"name": "first_name", "type": "STRING"},
{"name": "last_name", "type": "STRING"}
]
autodetect를 사용하지 않고 아래와 같이 스키마 파일을 지정하여 로드해준다.
bq load --source_format=CSV dataset.new_table example.csv schema.json
테이블에 변경 사항이 생겨 다시 로드하고 싶은 경우 --replace
를 추가해주면 기존 테이블의 내용은 삭제되고 새로운 데이터만 저장된다.
'GCP' 카테고리의 다른 글
GCS 데이터를 빅쿼리로 가져오기: gsutil, bq 커맨드 Tip (0) | 2024.01.20 |
---|