0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

BigQueryのビュー情報のバックアップについて

Last updated at Posted at 2025-04-07

はじめに

どうも、@to-fmakです。最近BigQueryに作成されたビューの情報のバックアップを取得する必要があったので、その方法について共有できればと思います。

やりたいこと

BigQuery 内に複数のビューが存在しており、移行作業などに伴い、以下の情報のバックアップを取得したい

  • データセットのメタデータ
  • 各ビューのスキーマ情報
  • 各ビューのクエリ定義

これらをファイルとして出力し、Cloud Storageなどに保存できるようにしたい

対応方法

データが格納されたテーブルの場合、Cloud Storage へのエクスポート機能を利用できます。しかし、ビューの場合はbqコマンドラインツールや SDKを使って情報を取得し、ファイルに保存する必要があります。
今回はCLIで実施します。(CloudShellから実行)

CLIでの情報取得

以下のコマンドで、データセットのメタデータやビューの情報を取得できます。

# データセットのメタデータを取得
bq show --format=json <PROJECT_ID>:<DATASET_ID>

# スキーマやクエリなどを含めたビューの情報を取得
bq show --format=prettyjson <PROJECT_ID>:<DATASET_ID>.<VIEW_ID>

スクリプト化

対象データセット内の複数のビュー情報を一括で取得する必要があったので、上記のコマンドをもとにシェルスクリプトを作成しました。

export_view_info.sh
#!/bin/bash

# プロジェクトとデータセットを指定
PROJECT_ID="xxxx"
DATASET_ID="$1"

# ディレクトリ作成
mkdir -p "$DATASET_ID"

# データセットのメタデータをエクスポート
bq show --format=json $PROJECT_ID:$DATASET_ID > $DATASET_ID/dataset_metadata.json

# データセット内の全テーブルとビューをリスト
bq ls --format=json $PROJECT_ID:$DATASET_ID > $DATASET_ID/tables_list.json

export_view_queries() {
    # bq lsの出力から各ビュー名を取得し、エクスポート
    bq ls $PROJECT_ID:$DATASET_ID | tail -n +3 | while read -r line; do
        # lineから最初のカラム(tableId)を抽出
        TABLE_ID=$(echo "$line" | awk '{print $1}')

        # ビューの場合のみエクスポート
        if [[ "$line" == *"VIEW"* ]]; then
            echo "Exporting view: $TABLE_ID"

            # ビューの情報を取得
            bq show --format=json "$PROJECT_ID:$DATASET_ID.$TABLE_ID" > "${DATASET_ID}/${TABLE_ID}_view_details.json"
        fi
    done
}

export_view_queries

上記スクリプトでは、DATASET_IDをコマンド引数から渡すようにしています。また、ビュー情報取得する際に、対象データセット内の全テーブルとビューをリストアップし、ビューの場合のみエクスポートするようにしています。

./export_view_info.sh <データセット名>

スクリプトを実行すると、<データセット名>/のディレクトリが作成され、取得したメタデータやビュー情報が格納されます。このディレクトリをCloud Storageなどにアップロードすることでバックアップとして活用できます。

あくまで一例なので、実際に利用する際は要件に応じてカスタマイズしていただければと思います。

エンジニア募集

Gakken LEAP では教育をアップデートしていきたいエンジニアを絶賛大募集しています!!
ぜひお気軽にカジュアル面談へお越しください!!

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?