Snowflake で非構造化データを触ってみた
📜 この記事は
Snowflake Advent Calendar 2022 Calendar 1 Day 6 の記事になります。Snowflake で Sales Engineer をしております、@tmasuo がお届けします。
この記事で触れる Snowflake の各機能のリリース状態は 2022 年 12 月 1 日時点に基づきます。
📷 Snowflake って非構造化データいけるんですか?
よくある質問です。
非構造化データのサポートは 2022 年 1 月に GA されています 🎉
この時点で GA したのはファイル関数、REST API そしてディレクトリテーブルになります。
これらにより Snowflake で非構造化データへのアクセスができるようになりました。
そして、活用という観点では外部関数や Snowpark を活用することでメタデータの抽出などができます。さらに Task/Stream と連携することで、E2E の非構造化データパイプラインが Snowflake で実現できます。こんなアーキテクチャのイメージです(参考ブログ)。
Snowpark for Java の非構造化データ処理は Public Preview
💻 触ってみた
ということで、触ってみたいと思います。E2E 全部カバーするとかなり長いので、非構造化データアクセスの肝となる、ディレクトリテーブルにこの記事ではフォーカスします。
📖 ディレクトリテーブル
ディレクトリテーブルを有効化するにはステージ作成時にオプションを指定する必要があります。非常にシンプルです。
create or replace stage my_directory_stage
url = 's3://dummy-backet/test'
directory = (enable = true);
これにより通常のステージに加えて、ディレクトリテーブルが作成されます。ステージを list しても特に変哲が無いですが、以下のコマンドでステージに紐づくディレクトリテーブルをクエリできます。
select * from directory(@my_directory_stage);
クエリ結果は以下のような感じです。項目名の詳細はこちらです。
これにより、ステージにあるファイルを認識することができます。
ここで取得できる relative_path
とステージ名を以下のようにファイル関数に渡すことで、UDF からアクセス可能な URL を生成することができます。
select
build_scoped_file_url(@my_directory_stage, relative_path)
from directory(@my_directory_stage);
あとはお好みで UDF で料理していただく形となります。
実際の UDF コードなど含めて動かしてみたい方は、以下の Quickstart コンテンツで PDF を Java UDF でいじっているのでぜひ動かしてみてくださいね。
❄️ この先の展望
ということで、非構造化データを Snowflake からアクセスしつつ、メタデータ抽出まで E2E で処理できるので、非構造化データの活用がはかどりそうです。
そしてこの非構造化パイプラインはまだまだ進化します。
🐍 Snowpark for Python 連携
非構造化データと機械学習の相性は言うまでも無いと思います。Python UDF などで非構造化データを扱えたらイケてるよね、と思った方多いのではないでしょうか。
実はこちらの機能、Private Preview 中です。
Anaconda の Snowpark for Python チャネル見ると想像つくと思いますが、画像とか音声とかハンドリングするライブラリ、結構あります。
自分もちょっとデモ作ったりしてたのですがかなり強力な機能だと思いました。Snowflake の柔軟なエンジン、そしてガバナンスを非構造化データでもより活用できるようになってゆきます!
✅ さいごに
Snowflake は構造化データ、半構造化データそして今回取り上げた非構造化データといった様々なデータへのアクセスから活用まで実現できます。
Snowpark for Python のパワーも加わってゆくとより強力になっていきますね。ぜひ触れる範囲からお試しいただけると幸いです!
Discussion