4
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のスプレッドシート外部表をterraformで管理する

Last updated at Posted at 2023-12-12

以下のドキュメントで説明されているスプレッドシートを外部表にする設定をterraformで管理してみます。

まずは、この記事と同様にディレクトリ階層とテーブル階層が等価になるような設計にします。
https://qiita.com/shiozaki/items/71272a71c5a2b6bba93a

sheets_tables
├── データセット名1
│   ├── テーブル名1.yaml
│   └── テーブル名2.yaml
├── データセット名2
│   └── テーブル名3.yaml
└── データセット名3
    └── テーブル名4.yaml

それぞれのYAMLファイルの中身は以下のような構造をとっています。

source_uri: <連携したいシートのURL①>
sheet_name: <連携したいシート名称(スプレッドシート画面の最下部にあるタブの名前)②>
range_top_left: <連携したい範囲の左上のセル③>
range_bottom_right: <連携したい範囲の右下のセル(下方向に無制限にしたい場合は数字を省略)④>
schema:
- name: <カラム名1>
  type: <カラム名1の型>
  mode: NULLABLE
- name: <カラム名2>
  type: <カラム名2の型>
  mode: NULLABLE
...

 それぞれの記載内容を図示します。

スクリーンショット_2023-12-07_8_37_05.png

最後に以下のtfファイルをterraform applyすればYAMLファイルに対応したスプレッドシート外部表が自動的に作成されます。

resource "google_bigquery_table" "external-sheets" {
  for_each = fileset("${path.module}/sheets_tables", "*/*.yaml")

  project    = local.project
  dataset_id = split("/", each.value)[0]
  table_id   = trimsuffix(split("/", each.value)[1], ".yaml")

  external_data_configuration {
    source_format = "GOOGLE_SHEETS"

    autodetect = false
    schema     = jsonencode(yamldecode(file("${path.module}/external_tables/${each.value}"))["schema"])

    google_sheets_options {
      skip_leading_rows = 0

      range = join("", [
        yamldecode(file("${path.module}/external_tables/${each.value}"))["sheet_name"],
        "!",
        yamldecode(file("${path.module}/external_tables/${each.value}"))["range_top_left"],
        ":",
        yamldecode(file("${path.module}/external_tables/${each.value}"))["range_bottom_right"],
        ]
      )
    }

    source_uris = [
      yamldecode(file("${path.module}/external_tables/${each.value}"))["source_uri"]
    ]
  }
}
4
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
4
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?