redashでSnowflakeに接続する場合は指定したDatabase以外も参照できる、けど、、、、
前置き
こんにちは。株式会社GENDAのデータエンジニアのこみぃです。
本日は、Snowflakeとredashの組み合わせをいじっていて気づいたお話など。
redashからSnowflakeへの接続
redashでのsnowflakeへの接続はDataSourceを追加すればさくっと出来ます。
そんなわけで、接続設定を追加するこちらの画面を御覧ください。
そう、ここではDatabaseの設定が必須になっています。
これはおかしなことではなく、Snowflakeは基本的に接続時にはDatabaseを指定します。
redashは画面左側に指定したDatabaseのテーブル一覧を出してくれる
さて、redash画面の左側に参照できるテーブルの一覧を表示してくれます。
↓の画面のような感じですね。
この機能は割と便利で、テーブル構造が分かりますし、ダブルクリックでエディターの方にコピペしてくれたりもします。
勘の良い方はお気づきですね。
左側に出てくるテーブルは指定したDatabaseに入っているSchemaのテーブル一覧 です。
実は他のDatabaseのデータもSelectできる
ここで、よく考えてみましょう。
snowflakeでは接続時にDatabaseを指定しますし、Schemaもアクセスしている間は指定されています。
そして、Database名やSchema名を明示しないSelectをした場合には、自動で補完されます。
例えばDatabaseとしてdatabase_a、schemaとしてschema_aを指定した状態では以下の3つのSQLは同じ意味になります。
select * from database_a.schema_a.table_a limit 10;
select * from schema_a.table_a limit 10;
select * from table_a limit 10;
しかし、明示的に指定すれば別のdatabaseやschemaをselectすることもできます。
例えばこんな感じですね。
select * from database_b.schema_b.table_b limit 10;
接続しているロールがdatabase_b.schema_b.table_bに対しての参照権限を持っていれば参照することができます。
実はこれはredashからのアクセスでも同じことです。
つまり redashから接続しているアカウントのロールが参照できるテーブルは左のリストに出てなくても参照できます
別のDatabaseとのJoinはデータ分析だとよくあること
そもそも別のDatabaseを参照したい場面なんてあるの、というのが疑問に思う方が多いと思いますが、データ分析だとよくあることというのが個人的な見解です。
というのも、わざわざデータ基盤を作ってデータ分析をしていくようになると、プロダクトや部署横断でデータを繋いで閲覧したいことが結構あります。
その場合、Databaseを横断してクエリを打つこともあるでしょう。
回避策
とはいえ左のリストがない状態でクエリを書くのはまあまあ大変ですので、回避策はないのかなと悩んだところ、思いついたのは以下でした。
データを一次加工したテーブルを特定のDatabaseに入れておいてそのDatabaseだけ見る
元データにあたる様々なDatabaseのデータは基本的にredashからは触らず、一次加工済みのデータだけを触るようにする、という感じですね。
この構成をすると、データ利用者は定義がそろった使いやすい一次加工済のデータだけを使うことになるので、社内での混乱も少なくなるのでは、と思っています。
本日のまとめ
本日のまとめはこんな感じでしょうか
- redashでsnowflakeに接続する場合に実は指定したDatabase以外も参照できる
- でもその場合には左のテーブル一覧に出て来ない。。。。
redashでsnowflakeにアクセスする場合のコネクタを改修できたらなあというのもあるので、redashのコミュニティのフォーラムに投下してみるのもありかなーとか画策しておりますが、そこはまあ別のお話ということで。
結びの言葉
この手のお話にはデータレイク、データウェアハウス、データマートという概念がそもそもあるのですが、それぞれをしっかり分けられている会社は案外と少ないのでは?と思っています。
今回の気づきを機に、弊社ではデータレイクとデータマートの区別をしっかりやっていこうという、そんな決意のような記事でした。
最後に一つ宣伝を。
私が所属する株式会社GENDAでは一緒に働く仲間をすごく真剣に求めています。
興味がありましたらぜひお気軽にお声おかけください。
本日はこのあたりで。
それじゃあ、バイバイ!
Discussion