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

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

시작하기 전에

이 빠른 시작을 시작하기 전에 Google Cloud Platform Console을 사용하여 프로젝트를 생성하거나 선택하고 Cloud SDK를 설치하세요.

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

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

  2. Google Cloud Platform 프로젝트를 선택하거나 만듭니다.

    리소스 관리 페이지로 이동

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

    API 사용 설정

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

테이블 검사

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

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

bq show projectId:datasetId.tableId

프로젝트 및 데이터세트 ID는 bq 도구의 기본값인 경우 생략할 수 있습니다. 다음 예에서는 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 쿼리는 셰익스피어(Shakespeare)의 모든 작품에서 하위 문자열 '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 명령어를 실행하는 데 사용하는 디렉터리로 복사하거나 옮깁니다.

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를 입력하여 삭제 명령어를 확인합니다.

다음 단계

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

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

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