bq
도구를 사용하여 BigQuery에 데이터 로드
bq
도구를 사용하여 BigQuery에 데이터 로드
이 빠른 시작에서는 bq
명령줄 도구를 사용하여 쿼리를 실행하고 BigQuery에 데이터를 로드하는 방법을 보여줍니다.
시작하기 전에
BigQuery를 탐색하려면 먼저 콘솔에 로그인하여 프로젝트를 만들어야 합니다. 결제 계정을 연결하지 않는 한 BigQuery 샌드박스를 사용하면 무료로 BigQuery를 탐색할 수 있습니다. 자세한 내용은 BigQuery 샌드박스 사용 설정을 참조하세요.
-
Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.
- 선택사항: 기존 프로젝트를 선택하는 경우 BigQuery API를 사용 설정해야 합니다. BigQuery API는 새 프로젝트에서 자동으로 사용 설정됩니다.
-
Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.
이 빠른 시작에서는 콘솔에서 Cloud Shell의 모든
bq
도구 명령어를 실행합니다.
쿼리 실행
이 섹션에서는 쿼리를 작성하고 도움을 받는 방법을 보여줍니다.
테이블 검사
특정 테이블의 스키마를 검사합니다.
bq show PROJECT_ID:DATASET_ID.TABLE_ID
다음을 바꿉니다.
PROJECT_ID
: 프로젝트 ID입니다.DATASET_ID
: 데이터 세트 IDTABLE_ID
: 테이블 ID
프로젝트 및 데이터 세트 ID가 bq
명령줄 도구의 기본값인 경우 프로젝트 및 데이터 세트 ID를 생략할 수 있습니다.
bq show TABLE_ID
BigQuery는 쿼리할 수 있는 몇 가지 샘플 테이블을 제공합니다. 이 빠른 시작에서는 모든 셰익스피어 희곡의 모든 단어 항목이 포함된 shakespeare
테이블을 대상으로 쿼리를 실행합니다.
samples
데이터 세트에서 shakespeare
테이블을 검사합니다.
bq show bigquery-public-data:samples.shakespeare
출력은 다음과 비슷합니다.
Table bigquery-public-data:samples.shakespeare Last modified Schema Total Rows Total Bytes Expiration ----------------- ------------------------------------ ------------ ------------- ------------ 26 Aug 14:43:49 |- word: string (required) 164656 6432064 |- word_count: integer (required) |- corpus: string (required) |- corpus_date: integer (required)
bq
도구 도움말 보기
bq
도구 도움말은 bq
명령줄 도구에 사용할 수 있는 명령어와 인수 목록을 제공합니다.
bq
도구의 세부정보 보기:bq help
특정 명령어에 대한 정보 보기:
bq help query
예를 들어
bq help
에 대한 호출은bq query
명령어에 대한 정보를 검색합니다.
문자열 검색
bq query
명령어를 사용하면 데이터에서 SQL 쿼리를 실행할 수 있습니다.
셰익스피어 작품에서 하위 문자열
raisin
이 나타나는 횟수를 보려면bq query
명령어를 사용하여 쿼리를 실행합니다.bq query --use_legacy_sql=false \ 'SELECT word, SUM(word_count) AS count FROM `bigquery-public-data`.samples.shakespeare WHERE word LIKE "%raisin%" GROUP BY word'
출력은 다음과 비슷합니다.
Waiting on job_dcda37c0bbed4c669b04dfd567859b90 ... (0s) Current status: DONE +---------------+-------+ | word | count | +---------------+-------+ | Praising | 4 | | raising | 5 | | raisins | 1 | | praising | 8 | | dispraising | 2 | | dispraisingly | 1 | +---------------+-------+
셰익스피어 작품에서 하위 문자열
huzzah
이 나타나는 횟수를 보려면bq query
명령어를 사용하여 쿼리를 실행합니다.bq query --use_legacy_sql=false \ 'SELECT word FROM `bigquery-public-data`.samples.shakespeare WHERE word = "huzzah"'
셰익스피어의 작품에는 이 하위 문자열이 표시되지 않으므로 결과가 반환되지 않습니다.출력은 다음과 비슷합니다.
Waiting on job_e19 ... (4s) Current status: DONE
테이블 만들기 및 데이터 로드
다음 섹션에서는 새 테이블을 만들어 새 데이터 세트에 배치합니다. 모든 테이블은 데이터 세트 안에 저장되어야 합니다. 데이터 세트는 테이블이나 뷰와 같은 리소스의 그룹입니다.
샘플 데이터 다운로드
샘플 데이터를 다운로드하려면 다음 단계를 따르세요. 미국 사회보장국에서 제공하는 샘플 데이터로서 약 7MB의 인기 있는 아기 이름 데이터가 포함되어 있습니다.
아기 이름 ZIP 파일을 다운로드하고 압축을 풉니다.
ZIP 파일에는 데이터 세트 스키마를 설명하는
NationalReadMe.pdf
라는 이름의 파일이 포함되어 있습니다. 데이터 세트에 관해 자세히 알아보세요.yob2010.txt
파일을 열어 내용을 살펴봅니다. 이 파일은 이름, 성별(M
또는F
), 해당 이름을 가진 아이의 수까지 총 3개의 열을 포함하는 쉼표로 구분된 값(CSV) 파일입니다. 파일에는 헤더 행이 없습니다.yob2010.txt
파일을bq
명령줄 도구를 실행 중인 디렉터리로 복사하거나 옮깁니다. Cloud Shell에서bq
명령줄 도구를 실행 중인 경우yob2010.txt
파일을 업로드합니다. 자세한 내용은 Cloud Shell로 파일 관리를 참조하세요.
데이터 세트 만들기
다음으로 새 데이터 세트를 만듭니다.
-
기본 프로젝트에 기존 데이터 세트가 있는지 확인하려면
bq ls
명령어를 사용합니다.bq ls
결과는 다음과 유사합니다.
datasetId ------------- olddataset
- 콜론(
:
) 다음에 프로젝트 ID를 포함하여 특정 프로젝트에 데이터세트를 나열합니다.bq ls publicdata:
이 예시에서는
publicdata
프로젝트의 데이터 세트를 나열합니다.출력은 다음과 비슷합니다.
datasetId ----------- samples
-
이 빠른 시작에서 선택한 프로젝트에서
babynames
라는 새 데이터세트를 만듭니다.bq mk babynames
데이터세트 이름은 최대 1,024자까지 가능하며 A-Z, a-z, 0-9 및 밑줄로 구성됩니다. 이름은 숫자 또는 밑줄로 시작할 수 없으며 공백도 사용할 수 없습니다.
출력은 다음과 비슷합니다.
Dataset 'myprojectid:babynames' successfully created.
- 데이터 세트가 이제 기본 프로젝트의 일부로 표시되는지 확인합니다.
bq ls
출력은 다음과 비슷합니다.
datasetId ------------- olddataset babynames
데이터 로드
-
생성된
babynames
데이터 세트에서 소스 파일yob2010.txt
를names2010
이라는 새 테이블에 로드합니다.bq load babynames.names2010 yob2010.txt name:string,gender:string,count:integer
bq load
명령어는 테이블을 만들고 하나의 단계로 데이터를 로드합니다.이 명령어에는 다음 인수가 포함됩니다.
- datasetID:
babynames
- tableID:
names2010
- 소스:
yob2010.txt
(필요한 경우 전체 경로 포함) - 스키마:
name:string,gender:string,count:integer
- 지원되는 데이터 유형 이름은 표준 SQL 데이터 유형을 참조하세요.
출력은 다음과 비슷합니다.
Upload complete. Waiting on job_4f0c0878f6184119abfdae05f5194e65 ... (35s) Current status: DONE
- datasetID:
-
이제 테이블이 데이터세트에 표시되는지 확인합니다.
bq ls babynames
출력은 다음과 비슷합니다.
tableId Type ----------- ------- names2010 TABLE
-
스키마 보기:
bq show babynames.names2010
출력은 다음과 비슷합니다.
Table myprojectid:babynames.names2010 Last modified Schema Total Rows Total Bytes Expiration ----------------- ------------------- ------------ ------------- ------------ 13 Mar 15:31:00 |- name: string 34041 653855 |- gender: string |- count: integer
데이터를 로드할 때 기본적으로 BigQuery는 UTF-8로 인코딩된 데이터를 예상합니다.
ISO-8859-1(또는 Latin-1) 인코딩에 데이터가 있으며 문제가 있는 경우 -E
플래그를 사용하여 BigQuery가 데이터를 Latin-1로 취급하도록 지시합니다. 자세한 내용은 인코딩을 참조하세요.
샘플 데이터 쿼리
-
가장 인기 있는 여자 아이 이름에 대한 데이터를 쿼리합니다.
bq query 'SELECT name, count FROM babynames.names2010 WHERE gender = "F" ORDER BY count DESC LIMIT 5'
출력은 다음과 비슷합니다.
Waiting on job_58c0f5ca52764ef1902eba611b71c651 ... (0s) Current status: DONE +----------+-------+ | name | COUNT | +----------+-------+ | Isabella | 22731 | | Sophia | 20477 | | Emma | 17179 | | Olivia | 16860 | | Ava | 15300 | +----------+-------+
-
가장 드문 남자 아이 이름을 쿼리합니다.
bq query 'SELECT name, count FROM babynames.names2010 WHERE gender = "M" ORDER BY count ASC LIMIT 5'
5회 미만 출현한 이름은 소스 데이터에서 생략되어 있으므로 최소 수는 5입니다.
출력은 다음과 비슷합니다.
Waiting on job_556ba2e5aad340a7b2818c3e3280b7a3 ... (1s) Current status: DONE +----------+-------+ | name | COUNT | +----------+-------+ | Aarian | 5 | | Aaidan | 5 | | Aamarion | 5 | | Aadhavan | 5 | | Aaqib | 5 | +----------+-------+
삭제
이 페이지에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 단계를 수행합니다.
babynames
데이터 세트를 삭제합니다.bq rm --recursive=true babynames
--recursive
플래그는names2010
테이블을 포함한 데이터 세트의 모든 테이블을 삭제합니다.삭제 명령어를 확인하려면
y
를 입력합니다.
새 프로젝트에서 이 빠른 시작을 따른 경우 프로젝트를 삭제할 수 있습니다.
다음 단계
bq
명령줄 도구에 대한 자세한 내용은bq
명령줄 도구 사용을 참조하세요.BigQuery에 데이터를 로드하는 방법에 대한 자세한 내용은 데이터 로드 소개를 참조하세요.
데이터 쿼리에 대한 자세한 내용은 BigQuery 데이터 쿼리 개요를 참조하세요.
BigQuery에서 데이터를 내보내는 방법에 대한 자세한 내용은 테이블 데이터 내보내기를 참조하세요.
프로그래매틱 방식으로 BigQuery에 액세스하는 방법에 대한 자세한 내용은 REST API 참조 또는 BigQuery API 클라이언트 라이브러리 페이지를 확인하세요.