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

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

시작하기 전에

이 빠른 시작을 시작하기 전에 Google Cloud Console을 사용하여 프로젝트를 만들거나 선택하고 Cloud SDK를 설치합니다.

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  3. Cloud SDK 설치 및 초기화
  4. BigQuery는 새 프로젝트에서 자동으로 사용 설정됩니다. 기존 프로젝트에서 BigQuery를 활성화하려면 다음으로 이동합니다. BigQuery API를 사용 설정합니다.

    API 사용 설정

  5. 프로젝트에 신용 카드를 제공하지 않거나 결제를 사용 설정하지 않으려면 BigQuery에서 제공하는 샌드박스를 사용합니다. 이 주제의 단계는 프로젝트에 결제가 사용 설정되었는지 여부에 관계없이 프로젝트에 적용됩니다. 필요에 따라 결제를 사용 설정하려면 결제 사용 설정 방법 알아보기를 참조하세요.

테이블 검사

BigQuery는 쿼리할 수 있는 몇 가지 샘플 테이블을 제공합니다. 이 빠른 시작에서는 모든 셰익스피어 희곡의 모든 단어 항목이 포함된 shakespeare 테이블을 대상으로 몇 가지 쿼리를 실행합니다.

특정 테이블의 스키마를 조사하려면 다음 명령어를 실행합니다. 프로젝트 및 데이터 세트 ID가 bq 도구의 기본값인 경우 프로젝트 및 데이터 세트 ID를 생략할 수 있습니다.

bq show PROJECT_ID:DATASET_ID.TABLE_ID

다음 예시는 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)

help 명령어 실행

bq help를 사용하여 bq 명령줄 도구에 대한 자세한 정보를 가져옵니다.

bq help

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

bq help query

쿼리 실행

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

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

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

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

다음 표준 SQL 쿼리는 셰익스피어의 모든 작품에서 하위 문자열 raisin이 나타나는 횟수의 단어 수를 계산합니다.

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   |
+---------------+-------+

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

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
$

새 테이블 만들기

이제 테이블을 직접 만들어 봅니다. 모든 테이블은 데이터세트 안에 저장되어야 합니다. 데이터세트는 테이블이나 뷰와 같은 리소스의 그룹입니다.

1단계: 샘플 데이터 다운로드

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

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

  2. 파일 압축을 풉니다.

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

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

  4. yob2010.txt 파일을 bq 명령줄 도구를 실행 중인 디렉터리로 복사하거나 옮깁니다. Cloud Shell에서 bq 명령줄 도구를 실행 중인 경우 yob2010.txt 파일을 업로드합니다. Cloud Shell로 파일 관리를 참조하세요.

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. 만든 babynames 데이터 세트에서 bq load 명령어를 실행하여 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

    샘플 결과:

    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 |
    +----------+-------+
    

삭제

이 빠른 시작에서 사용한 리소스의 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 단계를 수행하세요.

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

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

다음 단계