Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

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?

More than 1 year has passed since last update.

ZOZOAdvent Calendar 2023

Day 13

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

Qiita Advent Calendar is held!

Qiita Advent Calendar is an article posting event where you post articles by filling a calendar 🎅

Some calendars come with gifts and some gifts are drawn from all calendars 👀

Please tie the article to your calendar and let's enjoy Christmas together!

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?