BigQuery로 GCS csv 파일을 날짜별 샤드 테이블로 대량 가져오기하는 방법

GCS에 저장한 날짜별(※)csv 파일을 샤드화 테이블로서 BigQuery에 일괄적으로 임포트하는 방법의 메모.
※동일한 컬럼을 가지지만, 날짜별로 파일이 분할되어 있다
파티셔닝과 샤딩의 차이점은 Google 공식 문서을 참조하십시오.

전제


  • Google Cloud Platform에서 프로젝트를 만든 것
  • 미리 작성된 프로젝트에 대한 결제가 사용 설정됨

  • Google Cloud SDK 설치됨

  • 준비



    GCS로 BigQuery로 가져올 CSV 저장



    다음 구성에서 GCS로 BigQuery로 가져올 csv를 저장합니다.
    파일명의 "_"이후가 샤드화 되는 날짜가 됩니다.
    bucket
    └── dir
        ├── test_20200101.csv
        ├── test_20200102.csv
        ├── test_20200103.csv
        …
        └── test_20200131.csv
    

    스크립팅



    GCS에서 BigQuery로 가져오기 위한 스크립트를 작성합니다.
    로컬에 다음 파일 레이아웃을 준비합니다.

    로컬 파일 레이아웃
    dir
    ├── .env
    └── import_bq_from_gcs.sh
    

    설정 파일



    .env
    # プロジェクトID
    PROJECT_ID=********
    # BQにインポートしたいcsvを格納しているパス
    GCS_PATH=gs://bucket/test_bq_1
    # インポート先データセット名
    DATA_SET=test_bq
    # インポート先テーブル名(prefix)
    TABLE_PREFIX=table
    

    가져오기 스크립트



    GCS에서 가져올 csv마다 BigQuery로 가져옵니다.

    import_bq_from_gcs.sh
    #!/bin/sh
    
    set -e
    
    # 環境変数
    . .env
    # プロジェクトIDを設定
    gcloud config set project ${PROJECT_ID}
    echo "set PROJECT_ID"
    # 指定したGCSパス配下のファイルごとに処理
    for file_full_path in `gsutil ls ${GCS_PATH}`
    do
      # ファイルパス抽出
      file_path=${file_full_path##*/}
      # ファイル名抽出
      file_name=${file_path%.*}
      # ファイル名suffix('_'以降)抽出
      file_suffix=${file_name##*_}
      table_name=${DATA_SET}.${TABLE_PREFIX}_${file_suffix}
      # ファイル名が存在
      if [ ${#file_name} -gt 0 ]; then
        bq load --autodetect --source_format=CSV ${table_name} ${file_full_path}
        echo "import from ${file_full_path} to ${table_name}"
      fi
    done
    
    

    GCS에서 BigQuery로 가져오기



    준비가 완료되면 .envimport_bq_from_gcs.sh와 동일한 디렉토리에서 다음을 수행합니다.
    sh sh:import_bq_from_gcs.sh
    

    실행 후 BigQuery 콘솔을 확인하면 날짜별 샤드 테이블로 가져올 수 있는지 확인할 수있었습니다!

    좋은 웹페이지 즐겨찾기