빠른 시작: bq 도구를 사용하여 BigQuery에 데이터 로드

bq 도구를 사용하여 BigQuery에 데이터 로드

이 빠른 시작에서는 bq 명령줄 도구를 사용하여 쿼리를 실행하고 BigQuery에 데이터를 로드하는 방법을 보여줍니다.

시작하기 전에

BigQuery를 탐색하려면 먼저 콘솔에 로그인하여 프로젝트를 만들어야 합니다. 결제 계정을 연결하지 않는 한 BigQuery 샌드박스를 사용하면 무료로 BigQuery를 탐색할 수 있습니다. 자세한 내용은 BigQuery 샌드박스 사용 설정을 참조하세요.

  1. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  2. 선택사항: 기존 프로젝트를 선택하는 경우 BigQuery API를 사용 설정해야 합니다. BigQuery API는 새 프로젝트에서 자동으로 사용 설정됩니다.
  3. Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.

    Cloud Shell 활성화

    이 빠른 시작에서는 콘솔에서 Cloud Shell의 모든 bq 도구 명령어를 실행합니다.

쿼리 실행

이 섹션에서는 쿼리를 작성하고 도움을 받는 방법을 보여줍니다.

테이블 검사

특정 테이블의 스키마를 검사합니다.

bq show PROJECT_ID:DATASET_ID.TABLE_ID

다음을 바꿉니다.

  • PROJECT_ID: 프로젝트 ID입니다.
  • DATASET_ID: 데이터 세트 ID
  • TABLE_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 명령줄 도구에 사용할 수 있는 명령어와 인수 목록을 제공합니다.

  1. bq 도구의 세부정보 보기:

    bq help
  2. 특정 명령어에 대한 정보 보기:

    bq help query

    예를 들어 bq help에 대한 호출은 bq query 명령어에 대한 정보를 검색합니다.

문자열 검색

bq query 명령어를 사용하면 데이터에서 SQL 쿼리를 실행할 수 있습니다.

  1. 셰익스피어 작품에서 하위 문자열 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   |
    +---------------+-------+
    

  2. 셰익스피어 작품에서 하위 문자열 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의 인기 있는 아기 이름 데이터가 포함되어 있습니다.

  1. 아기 이름 ZIP 파일을 다운로드하고 압축을 풉니다.

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

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

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

데이터 세트 만들기

다음으로 새 데이터 세트를 만듭니다.

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

    bq ls
        

    결과는 다음과 유사합니다.

      datasetId
     -------------
      olddataset
  2. 콜론(:) 다음에 프로젝트 ID를 포함하여 특정 프로젝트에 데이터세트를 나열합니다.
    bq ls publicdata:

    이 예시에서는 publicdata 프로젝트의 데이터 세트를 나열합니다.

    출력은 다음과 비슷합니다.

      datasetId
     -----------
      samples
  3. 이 빠른 시작에서 선택한 프로젝트에서 babynames라는 새 데이터세트를 만듭니다.
    bq mk babynames

    데이터세트 이름은 최대 1,024자까지 가능하며 A-Z, a-z, 0-9 및 밑줄로 구성됩니다. 이름은 숫자 또는 밑줄로 시작할 수 없으며 공백도 사용할 수 없습니다.

    출력은 다음과 비슷합니다.

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

    출력은 다음과 비슷합니다.

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

데이터 로드

  1. 생성된 babynames 데이터 세트에서 소스 파일 yob2010.txtnames2010이라는 새 테이블에 로드합니다.

    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

    출력은 다음과 비슷합니다.

    Upload complete.
    Waiting on job_4f0c0878f6184119abfdae05f5194e65 ... (35s)
    Current status: DONE
  2. 이제 테이블이 데이터세트에 표시되는지 확인합니다.

    bq ls babynames

    출력은 다음과 비슷합니다.

       tableId    Type
     ----------- -------
      names2010   TABLE
    
  3. 스키마 보기:

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

샘플 데이터 쿼리

  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. 가장 드문 남자 아이 이름을 쿼리합니다.
    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 계정에 청구되지 않도록 하려면 다음 단계를 수행합니다.

  1. babynames 데이터 세트를 삭제합니다.

    bq rm --recursive=true babynames

    --recursive 플래그는 names2010 테이블을 포함한 데이터 세트의 모든 테이블을 삭제합니다.

  2. 삭제 명령어를 확인하려면 y를 입력합니다.

새 프로젝트에서 이 빠른 시작을 따른 경우 프로젝트를 삭제할 수 있습니다.

다음 단계