まえがき
最近登場したBiglakeを使った所感を共有いたします。
色々公式ドキュメントには書かれているけど、既存のサービスに対して、具体的にどういった箇所で、どんな良さがあるのか発見したことを書きます。
BigQuery external tableと、BigLake tableの比較を前提として話します。
Biglakeとは
データ ウェアハウスとデータレイクを統合するストレージ エンジン、BigLake です。BigLake は基盤となるストレージ形式やシステムを意識することなくデータを分析できるようにするもので、データの複製や移動が不要になり、コスト削減と効率化を図ることができます。
Google公式ドキュメントより引用: https://cloud.google.com/blog/ja/products/data-analytics/unifying-data-lakes-and-data-warehouses-across-clouds-with-biglake
つまり、権限の簡素化や手順の簡略化によりGCPの異なるサービス同士のデータの隔たりを減らす仕組みと考えられます。
まずは結論から
結論から書きますと、biglake tableにより
①BigQuery外部テーブルの権限設定
②権限設定の作業の手間
③DataStream利用の困りごと
上記の3つの観点においてメリットがありました。
①BigQuery外部テーブルの権限設定
BigQueryからGCSへの外部テーブルを作成する場合、クエリ実行者に必要な権限は2種類あります。
1)データセットもしくはテーブルに対してのクエリ実行できる権限
2)外部テーブルのデータ元とするGCSのバケットに対しての権限
この際に問題となるのは、2番目のGCSバケットへの権限です。
クエリを実行するだけのユーザに対して、GCSバケットへの権限を与えたくないという点です。
gsutilコマンド含め、出来る限りユーザの意図しないアクションは防ぎたいところ、この点はネックになっていました。
②権限設定の作業の手間
こちらに関しては単純で、外部テーブルへの権限という1アクションに対して、GCS側とBigQuery側にそれぞれ権限を与えるという手間が地味に面倒だという事です。
③DataStream利用の困りごと
①と重なりますが、GCSのバケットへの権限についてGCSのバケット毎にしか設定できない点も課題です。
本来であれば、仮にユーザのGCSへのアクセスを許容するとしても、バケットのフォルダ毎にアクセスできるようにしたいところです。
私のケースで言うと、
Data Stream(GCPのリアルタイムデータ連携サービス)を利用している際に、ユーザにアクセスしてほしくないストリームのデータまで同一のバケットにある限り見れてしまう為、それぞれのストリーム毎にGCSバケットを分けないといけないといった面倒くささがありました。
Biglake table作成
公式ドキュメントがあるので割愛します。
https://cloud.google.com/bigquery/docs/biglake-quickstart?hl=ja
主な流れは以下の通り。
1)外部接続の設定
2)サービスアカウントの権限付与
3)Biglake Tableの作成
BigLakeがどう解決したか
biglake tableの作成の流れに沿って説明します。
1)外部接続の設定
手順説明①にあるように、biglake tableをBigQueryに作成する為には、BigLake用の外部接続(external connections)を作成する必要があります。
外部接続を作成すると、biglakeの外部接続の為のサービスアカウントが与えられます。
2)サービスアカウントの権限付与
そして②のサービスアカウントの権限付与にて、そのサービスアカウントに対してのみGCSへの「Storage オブジェクト閲覧者」ロールを付与します。
ここが主なポイントで、先ほど説明したGCSバケットへの権限を与えたくないという点は、このBigLake用サービスアカウントのみ権限を与えることにより各ユーザに与える必要が無くなりました。
また、その手順が不必要になったことで各ユーザに対してはBigQueryのデータセットやテーブルへの権限を与えるだけで済むようにもなります。
3)Biglake Tableの作成
ここまでくれば、通常のBigQuery exteranl tableとは大差ありませんので割愛。
まとめ
色々と説明しましたが、
①BigQuery外部テーブルの権限設定
==> BigLake用のサービスアカウントに権限を集約することで、ユーザに対してGCSへの権限を与えずに済む。
②権限設定の作業の手間
==> ユーザにはBigQuery上の権限付与の一回で済むようになった。
③DataStream利用の困りごと
Data Streamの出力バケットを分けていたが、一つのバケットに複数のストリームを出力するようにしても、BigLakeのサービスアカウントにのみ権限を持っている構造上、ユーザが意図しないフォルダにアクセスしてしまうというケースを弾けるようになった。
以上でこの記事は終わりです。
ご一読ありがとうございました!