【BigQuery】既存のテーブルスキーマを新しいテーブルにインポートする


使い所

  • 既存のテーブルに変更を加えたいとき
  • テーブルのリージョンを変更したいとき

BigQueryは既存のテーブル名の変更やスキーマの変更はできず、新しくテーブルを作り直す必要がある。
その際にカラム数の多いテーブルだと手作業で1つずつスキーマを移すのが苦行なので、既存のテーブルのスキーマをエクスポートし、新しいテーブルにインポートする。

前提

  • Google Cloud SDKのインストール・ログインが済んでいること。

手順

【export】 bqコマンドで既存のテーブルのスキーマを表示する

コンソールで以下のコマンドを実行する。(${}変数は自分のエクスポートしたいテーブルに置き換えること)
テーブル情報が表示されるので、"schema"キー以下の"fields"の始めから終わりをコピーする。

❯ bq --format=prettyjson show ${project_id}:${dataset_name}.${table_name}

{
  "creationTime": "XXXXXXXXXXXXX",
  "etag": "XXXXXXXXXXXXXX",
  "id": "${project_id}:${dataset_name}.${table_name}",
 ︙
  "schema": {
    "fields": [
      {
        "mode": "NULLABLE",
        "name": "hoge",
        "type": "INTEGER"
      },
      {
        "mode": "NULLABLE",
        "name": "fuga",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "piyo",
        "type": "BOOLEAN"
      }
   ]
}
︙
期待するクリップボードの中身
[
  {
    "mode": "NULLABLE",
    "name": "hoge",
    "type": "INTEGER"
  },
  {
    "mode": "NULLABLE",
    "name": "fuga",
    "type": "STRING"
  },
  {
    "mode": "NULLABLE",
    "name": "piyo",
    "type": "BOOLEAN"
  }
]

【import】 Webコンソールからテーブル作成

  • クエリエディタ画面を開いて、テーブルを作りたいデータセットを選択→『テーブルを作成』をクリック
  • 『テキストとして編集』を有効にし、クリップボードに用意したJSONを貼り付ける