1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

BigQueryにGCSのcsvファイルを日付別シャード化テーブルとして一括インポートする方法

Last updated at Posted at 2020-02-01

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のコンソールを確認すると、日付別シャード化テーブルとしてインポートできていることを確認できました!

bq_import.png
1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?