🏷️
BigQueryのテーブルlabelを使ってテーブルメタ情報を最大限表示する
2024-11-27
2024-11-30
約2528字
5,000 円/時
imofessional
表題の通り、BigQueryのテーブルlabel機能を使い倒して、BQ上でテーブルに属性情報やOwner情報などのメタ情報を見れるようにする方法を考えた記事です!
テーブル詳細画面に表示される以下のようなもので、テーブルにメタ情報を付与することが可能です!
公式の説明を引用すると
ラベルは、Google Cloud BigQuery リソースに割り当てることができる Key-Value ペアです。ラベルはこれらのリソースを整理し、必要な粒度に基づいてコストを大規模に管理する場合に役立ちます。各リソースにラベルを設定し、そのラベルに基づいてリソースをフィルタできます。ラベルに関する情報は課金システムに転送され、請求料金をラベル別に分類できます。組み込みの請求レポートにより、リソースラベルで費用をフィルタしてグループ化できます。また、ラベルを使用して請求データ エクスポートをクエリすることもできます。
ということで主にコスト管理文脈で使用することを想定して存在する機能のようですが、リソースにKey-Valueの情報を付与できることから、テーブルメタ情報の付与としても使えるのではないかと考えました。
上記のパートで紹介したBQのlabel機能と組み合わせると相性が良さそうだったのがdbt yamlで管理しているテーブルメタ情報でした。dbtについては説明を割愛してしまいますが、yamlでテーブルの情報を管理しており、以下のような形式で情報を保持することができます。そのうち、tables配下の階層にmetaという階層を持つことができ、Key-Valueでテーブルのメタ情報を持つことができます。参照リンク
#source.yml内
sources:
- name: test_schema-test_table
database: test_database
schema: test_schema
tables:
-name: test_table
description: |-
###概要
このテーブルはテストです
meta:
owner: data_group
columns:
- name: id
data_type: STRING
description: ''
- name: name
data_type: STRING
description: ''
今回はこのdbt yaml上のmeta階層の情報をCDで自動的にBigQueryに反映しようと考えました。
ラベルの追加や削除にはbq updateコマンドを使用します(GUIから手動で追加することももちろん可能です)
テーブルにラベルを追加するには--set_label
フラグを追加して以下のように記述します
bq update --set_label owner:data_group プロジェクト名:データセット名.テーブル名
逆にラベルを削除したい場合は--clear_label
フラグを追加して以下のように記述します
bq update --clear_label owner:data_group プロジェクト名:データセット名.テーブル名
ラベルのValueだけClearしたい場合は--clear_label
フラグを追加して以下のように記述します
bq update --clear_label owner:data_group プロジェクト名:データセット名.テーブル名
ここまで説明したきた方法でメタ情報を管理し、それをコマンドでBigQueryに表出させることができました。ここからはそれを手動でやるのではなくCDで自動で行う方法を考えていきます!自分のいる環境ではCDでテーブルのdescriptionを更新するところまではすでにできたいたので、その関数に組み込む形でlabelのアップデートも実装しました。処理の大まかな流れは以下になります
細かい注意ポイントと工夫
©︎ 2024 - Yard