빠른 시작: bq 명령줄 도구 사용

이 페이지에서는 bq 명령줄 도구를 사용하여 쿼리를 실행하고 데이터를 로드하고 데이터를 내보내는 방법을 설명합니다.

시작하기 전에

이 퀵스타트를 시작하기 전에 Google Cloud Platform Console을 사용하여 프로젝트를 만들거나 선택하고 청구를 사용 설정합니다. Google Cloud SDK도 설치해야 합니다.

  1. Google 계정에 로그인합니다.

    아직 계정이 없으면 새 계정을 등록하세요.

  2. Select or create a Google Cloud Platform project.

    Go to the Manage resources page

  3. 프로젝트에 결제가 사용 설정되어 있는지 확인하세요.

    결제 사용 설정 방법 알아보기

  4. Install and initialize the Cloud SDK.
  5. 새 프로젝트에서는 BigQuery가 자동으로 사용 설정됩니다. 기존 프로젝트에서 BigQuery를 활성화하려면 다음으로 이동하세요. BigQuery API를 사용 설정합니다.

    API 사용 설정

테이블 검사

BigQuery는 쿼리를 실행할 수 있는 여러 가지 샘플 테이블을 제공합니다. 이 퀵스타트에서는 모든 희곡의 모든 단어 항목이 포함된 Shakespeare 테이블을 대상으로 몇 가지 쿼리를 실행합니다.

특정 테이블의 스키마를 검사하려면 다음을 실행합니다.

bq show projectId:datasetId.tableId

프로젝트 및 데이터세트 ID는 bq 도구의 기본값인 경우 생략할 수 있습니다. 다음 예에서는 samples 데이터세트의 shakespeare 테이블을 검사합니다.

bq show publicdata:samples.shakespeare

출력:

Table publicdata: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)

help 명령어 실행

bq help를 사용하여 bq 명령줄 도구에 대한 자세한 정보를 볼 수 있습니다.

bq help

특정 명령어에 대한 정보를 보려면 명령어 이름을 포함합니다. 예를 들어 다음 bq help 호출은 query 명령어에 대한 정보를 검색합니다.

bq help query

쿼리 실행

쿼리를 실행하여 Shakespeare 작품에서 'raisin' 하위 문자열이 나타나는 횟수를 확인합니다.

쿼리를 실행하려면 bq query "[SQL_STATEMENT]" 명령어를 실행합니다.

  • [SQL_STATEMENT] 내의 따옴표는 \ 기호로 이스케이프 처리합니다. 또는

  • 감싼 기호와 다른 따옴표를 사용합니다("').

다음 예에서는 모든 Shakespeare 작품에서 하위 문자열 'raisin'이 등장하는 횟수를 계산합니다. 예의 쿼리는 대소문자를 구분합니다. 문자열 비교에서는 SQL 기능 IGNORE CASE를 사용하지 않는 한 대소문자를 구분합니다.

bq query "SELECT word, SUM(word_count) as count FROM publicdata:samples.shakespeare WHERE word CONTAINS '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   |
+---------------+-------+

Shakespeare의 작품에 나오지 않는 단어를 검색하는 경우 결과가 반환되지 않습니다. 예를 들어 'huzzah'를 검색하는 다음 쿼리는 일치 항목을 반환하지 않습니다.

bq query "SELECT word FROM publicdata:samples.shakespeare WHERE word = 'huzzah' IGNORE CASE"

출력:

Waiting on job_e19 ... (4s) Current status: DONE
$

새 테이블 만들기

이제 테이블을 직접 만들어 보겠습니다. 모든 테이블은 데이터세트 내에 위치해야 합니다. 데이터세트는 단순한 테이블 그룹입니다. 데이터세트는 하나의 프로젝트에 할당됩니다.

1단계: 커스텀 데이터 다운로드

미국 사회보장국에서 제공하는 커스텀 데이터에는 약 7MB의 인기 있는 아기 이름 데이터가 포함되어 있습니다.

  1. 아기 이름 ZIP 파일을 다운로드합니다.

  2. 하드 드라이브에 압축을 해제합니다.

    ZIP 파일에는 데이터세트 스키마에 대해 설명하는 read me 파일이 포함되어 있습니다. 데이터세트에 대해 자세히 알아보세요.

  3. yob2010.txt 파일을 열어 내용을 살펴봅니다. 파일은 쉼표로 구분된 값(CSV) 파일이며 이름, 성별(M 또는 F), 해당 이름을 가진 아이의 수까지 3개의 열이 있습니다. 파일에는 헤더 행이 없습니다.

  4. yob2010.txt 파일을 bq 명령어를 실행하는 데 사용하는 디렉토리로 복사하거나 이동합니다.

2단계: 새 데이터세트 만들기

  1. bq ls 명령어를 사용하여 기본 프로젝트에 기존 데이터세트가 있는지 여부를 확인합니다.

    bq ls

    샘플 출력:

      datasetId
     -------------
      olddataset
  2. bq ls를 다시 실행하여 프로젝트 ID와 그 뒤에 콜론(:)을 포함하여 특정 프로젝트의 데이터세트를 나열합니다. 다음 예에서는 publicdata 프로젝트의 데이터세트를 나열합니다.
    bq ls publicdata:

    출력:

      datasetId
     -----------
      samples
  3. bq mk 명령어를 사용하여 기본 프로젝트에 이름이 babynames인 데이터세트를 만듭니다. 데이터세트 이름은 최대 1,024자까지 가능하며 A-Z, a-z, 0-9, 밑줄로 구성되지만 숫자 또는 밑줄로 시작할 수 없으며 공백도 사용할 수 없습니다.
    bq mk babynames

    샘플 출력:

    Dataset 'myprojectid:babynames' successfully created.
  4. bq ls를 실행하여 이제 데이터세트가 기본 프로젝트의 일부로 표시되는지 확인합니다.
    bq ls

    샘플 출력:

      datasetId
     -------------
      olddataset
      babynames

3단계: 테이블 업로드

bq load 명령어는 하나의 단계로 테이블을 만들거나 업데이트하고 데이터를 로드합니다.

  1. bq load 명령어를 실행하여 위에서 만든 babynames 데이터세트의 새 테이블 names2010에 소스 파일을 로드합니다. 기본적으로 이 작업은 동기적으로 실행되며 완료까지 몇 초 정도 소요됩니다.

    bq load babynames.names2010 yob2010.txt name:string,gender:string,count:integer

    bq load 명령어 인수:

    • datasetID: babynames
    • tableID: names2010
    • source: yob2010.txt
    • schema: name:string,gender:string,count:integer

    샘플 출력:

    Waiting on job_4f0c0878f6184119abfdae05f5194e65 ... (35s) Current status: DONE
  2. bq ls를 실행하여 이제 데이터세트에 테이블에 표시되는지 확인합니다.

    bq ls babynames

    출력:

       tableId    Type
     ----------- -------
      names2010   TABLE
    
  3. bq show를 실행하여 스키마를 봅니다.

    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로 취급하도록 지시할 수 있습니다. 자세한 내용은 문자 인코딩을 참조하세요.

4단계 : 쿼리 실행

  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 |
    +----------+-------+
    
  2. 다음 명령어를 실행하여 가장 드문 남자 아이 이름을 반환합니다. 5회 미만 출현한 이름은 소스 데이터에서 생략되어 있으므로 최소 수는 5입니다.
    bq query "SELECT name,count FROM babynames.names2010 WHERE gender = 'M' ORDER BY count ASC LIMIT 5"

    출력:

    Waiting on job_556ba2e5aad340a7b2818c3e3280b7a3 ... (1s) Current status: DONE
    +----------+-------+
    |   name   | COUNT |
    +----------+-------+
    | Aarian   |     5 |
    | Aaidan   |     5 |
    | Aamarion |     5 |
    | Aadhavan |     5 |
    | Aaqib    |     5 |
    +----------+-------+
    

삭제

이 빠른 시작에서 사용한 리소스 비용이 GCP 계정에 청구되지 않도록 다음을 수행합니다.

  1. bq rm 명령어를 실행하여 babynames 데이터세트를 삭제합니다. -r 플래그를 사용하여 names2010 테이블을 포함하여 데이터세트의 모든 테이블을 삭제합니다.

    bq rm -r babynames
    
  2. y를 입력하여 삭제 명령어를 확인합니다.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

도움이 필요하시나요? 지원 페이지를 방문하세요.