2025年3月にリリースされたSnowflakeの新機能・変更点のまとめ #SnowflakeDB
2025年3月にリリースされたSnowflakeの新機能・変更点のまとめ記事になります。
※注意事項:本記事ではすべての情報についての記述はせず、特筆すべきだと感じた情報だけピックしております。基本的には以下の情報を参考にしておりますので、全ての最新情報を確認したい場合は下記のURLからご確認ください。
March 31, 2025 — Data Governance release notes
Access history ビュー:JOIN をサポート
ACCOUNT USAGE 内の ACCESS_HISTORY ビュー において、結合を含むクエリに対して、結合先のオブジェクト情報と結合タイプを含む配列が joinObjects
として表示されるようになりました。
公式ドキュメントからの引用ですが、以下のクエリからなるビューを定義、参照したとします。
CREATE OR REPLACE VIEW v1 (vc1, vc2) AS
SELECT
t1.c1 AS vc1,
t2.c2 AS vc2
FROM t1 LEFT OUTER JOIN t2
ON t1.c2 = t2.c1;
このクエリに対して ACCESS_HISTORY ビューの direct_accessed_objects
カラム内に含まれる joinObjects
要素に、以下のように結合先のテーブル情報や結合タイプ(ここでは LEFT_OUTER_JOIN
)が記録されます。
{
"columns": [
{
"columnId": 0,
"columnName": "C1"
},
{
"columnId": 0,
"columnName": "C2"
}
],
"joinObjects": [
{
"joinType": "LEFT_OUTER_JOIN",
"node": {
"objectDomain": "Table",
"objectId": 0,
"objectName": "DB1.SCH.T2"
}
}
],
"objectDomain": "Table",
"objectId": 0,
"objectName": "DB1.SCH.T1"
}
March 24, 2025 — Streamlit in Snowflake で st.experimental_audio_input と st.camera_input のサポートが一般提供
Streamlit in Snowflake での以下の関数サポートが一般提供となりました。
- st.experimental_audio_input
- ユーザーのマイクを使って音声を録音し、アプリ内で取得するためのウィジェットを追加できる
- st.camera_input
- ユーザーのカメラを使って写真を撮影し、アプリ内で取得するためのウィジェットを追加できる
注意点として、端末のカメラやマイクを使用するので、そのための許可が必要ですが、録音・撮影したファイルをステージ上に配置なども可能です。
サンプルアプリ ※作成には生成AIを使用しています
import streamlit as st
import io
from datetime import datetime
from snowflake.snowpark.context import get_active_session
# Snowflake セッションの取得
session = get_active_session()
# ステージの存在チェック
def check_stage_exists(stage_name_no_at: str) -> bool:
""" 指定されたステージが存在するか確認する """
try:
session.sql(f"DESC STAGE {stage_name_no_at}").collect()
return True
except:
return False
def main():
st.title("📤 音声・写真をステージにアップロード")
# ステージ名の入力
stage_name_no_at = st.text_input("ステージ名を入力してください(例: my_stage)")
if not stage_name_no_at:
st.warning("ファイルをアップロードするステージ名を入力してください")
return
stage_name = f"@{stage_name_no_at}"
# ステージの存在チェック
if not check_stage_exists(stage_name_no_at):
st.error(f"ステージ '{stage_name}' が存在しません。正しいステージ名を入力してください。")
return
st.markdown("---")
# 音声録音
st.subheader("🎤 音声を録音してアップロード")
audio_file = st.experimental_audio_input("音声を録音してください") # v1.39.0以降では experimental でなくなりました
if audio_file is not None:
try:
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
audio_file_name = f"recorded_audio_{timestamp}.wav"
audio_buffer = io.BytesIO(audio_file.getbuffer())
session.file.put_stream(
audio_buffer,
f"{stage_name}/{audio_file_name}",
auto_compress=False,
overwrite=True
)
st.success(f"音声ファイル '{audio_file_name}' をステージ '{stage_name}' にアップロードしました!")
except Exception as e:
st.error(f"音声アップロード中にエラーが発生しました: {str(e)}")
st.markdown("---")
# 写真撮影
st.subheader("📷 写真を撮影してアップロード")
enable_camera = st.checkbox("カメラを有効にする")
picture = st.camera_input("写真を撮影してください", disabled=not enable_camera)
if picture is not None:
try:
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
image_file_name = f"captured_image_{timestamp}.jpg"
image_buffer = io.BytesIO(picture.getbuffer())
session.file.put_stream(
image_buffer,
f"{stage_name}/{image_file_name}",
auto_compress=False,
overwrite=True
)
st.image(picture, caption="撮影した写真", use_column_width=True)
st.success(f"画像ファイル '{image_file_name}' をステージ '{stage_name}' にアップロードしました!")
except Exception as e:
st.error(f"画像アップロード中にエラーが発生しました: {str(e)}")
# アプリ起動
if __name__ == "__main__":
main()
- st.experimental_audio_input
- st.camera_input
指定のステージ
ステージに配置したファイルをダウンロードし、音声の再生や画像の表示も試してみましたが、問題ありませんでした。
March 17-27, 2025 — 9.7 Release Notes (with behavior changes)
Grant database roles to a Snowflake Native App — パブリックプレビュー
プロバイダー側で Snowflake ネイティブ アプリにデータベース ロールを付与できる機能がパブリックプレビューとなりました。
公式ドキュメントからの引用ですが、hello_snowflake_app
という名前のデータベース(アプリ)内のすべてのテーブルにアクセスできるようにするには以下のコマンドを実行します。
GRANT SELECT ON ALL TABLES IN DATABASE DB1 TO DATABASE ROLE db1.viewer;
GRANT DATABASE ROLE db1.viewer TO APPLICATION hello_snowflake_app;
Snowsight やクラシック コンソールでクエリ結果のダウンロードボタンを非表示にできるパラメータが追加 — 一般提供
Snowsight およびクラシック コンソールでクエリ結果のダウンロードボタンを表示または非表示とするか制御できる DISABLE_UI_DOWNLOAD_BUTTON パラメータが使用できるようになりました。
パラメータはアカウントまたはユーザーレベルで設定できます。(デフォルトは表示)
USE ROLE ACCOUNTADMIN;
ALTER ACCOUNT SET DISABLE_UI_DOWNLOAD_BUTTON = TRUE;
有効化前
有効化後
詳細は以下をご参照ください。
フェールオーバーグループのスキーマ レベルのレプリケーション — 一般提供
フェイルオーバー グループ内のデータベースやスキーマで REPLICABLE_WITH_FAILOVER_GROUPS パラメータを指定することで、レプリケートされるスキーマを制御できるようになりました。
デフォルトでは、すべてのデータベースとスキーマに対して有効になっています。
詳細は以下をご参照ください。
半構造化データ:XML 形式のサポート — 一般提供
XML 形式の Snowflake サポートが一般提供となりました。
詳細は以下をご参照ください。
スプレッド演算子
スプレッド演算子(**
)が使用できるようになりました。
配列を個々の値のリストに展開する際に使用できます。
公式ドキュメントにある例ですが、以下のようなテーブルがあるとします。
>SELECT * FROM spread_demo;
------+------+
| COL1 | COL2 |
|------+------|
| 1 | a |
| 2 | b |
| 3 | c |
| 4 | d |
| 5 | e |
+------+------+
ここから特定のレコードをフィルタするストアドプロシージャを定義します。ポイントとして引数に配列を渡し、IN 句でスプレッド演算子を使用しています。
CREATE OR REPLACE PROCEDURE spread_sp_demo(col_1_values ARRAY)
RETURNS TABLE(
col1 INT,
col2 VARCHAR)
LANGUAGE SQL
AS
$$
DECLARE
res RESULTSET;
BEGIN
res := (SELECT * FROM spread_demo
WHERE col1 IN (** :col_1_values)
ORDER BY col1);
RETURN TABLE(res);
END;
$$;
--ストアドプロシージャを実行
>CALL spread_sp_demo([2, 4]);
+------+------+
| COL1 | COL2 |
|------+------|
| 2 | b |
| 4 | d |
+------+------+
出力より、スプレッド演算子が配列内の個々の値を IN 句で展開することで、クエリを柔軟に記述しやすくなっています。
一部データ型のカラムで許容される最大サイズが増加 — パブリックプレビュー
以下のデータ型について、カラムで許容される最大サイズが増加しました。
- VARCHAR、VARIANT、ARRAY、OBJECT 型の列の新しい最大許容長は 128 MB
- もともとはの最大サイズは 16 MB
- BINARY、GEOGRAPHY、GEOMETRY 型の列の新しい最大許容長は 64 MB
- もともとはの最大サイズは 8 MB
注意点として、デフォルトのサイズは変更されないため、テーブル定義時やカラム定義を明示的に変更する必要があるようです。
ALTER TABLE my_table ALTER COLUMN col1 SET DATA TYPE VARCHAR(134217728);
また、本機能の適用には 2025_02 バンドルの有効化が必要です(2025年4月4日時点ではデフォルトで無効化)。
March 20, 2025 — Data Governance release notes
Cortex Powered Object Descriptions:追加のテーブルタイプをサポート
Snowsight 上で Snowflake Cortex を使用してテーブル、ビュー、列の説明を生成できる機能において、サポートされるオブジェクトとして以下が追加されました。
- Dynamic tables
- Hybrid tables
- Apache Iceberg™ tables
- External tables
詳細は以下をご参照ください。
March 19, 2025 — Cortex COMPLETE Structured Outputs — 一般提供
Snowflake Cortex COMPLETE 関数の出力を指定の JSON スキーマに準拠させる機能が一般提供となりました。
目的の出力とその形式を定義すると、この内容に準拠するため、後工程の処理を軽減できます。
詳細は以下をご参照ください。
March 19, 2025 — Cortex AI Parse Document でサポートされるファイル拡張子が追加
Snowflake Cortex PARSE_DOCUMENT 関数で使用可能なファイル拡張子として以下が追加されました。
- TIFF、TIF、JPEG、JPG、PNG
PARSE_DOCUMENT では元より PDF、DOCX、PPTX をサポートしています。
詳細は以下をご参照ください。
March 19, 2025 — Alerts on new data がパブリックプレビュー
指定のテーブル(通常のテーブル、ビュー、イベントテーブル)に新しいレコードが追加された時にアラートを実行できる機能がパブリックプレビューとなりました。
これまでアラートを作成する際は、スケジュールの指定が必要でしたが、今回のアップデートにより対象のテーブルに対するレコード追加をイベントのように使用したアラートの実行が可能です。
通常のテーブル・イベントテーブルでの使用例について、以下の記事で紹介されていますので、あわせてご参照ください。
March 17, 2025 — AWS 商用リージョンにおける Snowflake Notebooks の Container Runtime が一般提供
AWS 商用リージョンにおいて、Snowflake Notebooks の Container Runtime が一般提供となりました。
詳細は以下をご参照ください。
March 12, 2025 — Streamlit in Snowflake で st.file_uploader のサポートが一般提供
Streamlit in Snowflake で st.file_uploader のサポートが一般提供となりました。
デフォルトでは最大200MBまでのファイルをアップデートすることができます。アップデートしたファイルはテーブルとしてデータを保存したりステージへの配置も可能です。
本機能については、例とあわせて以下でわかりやすく解説されています。
March 06, 2025 — Cortex AI PARSE_DOCUMENT 関数の OCR モードが一般提供
Snowflake Cortex PARSE_DOCUMENT 関数における OCR モードが一般提供となりました。
PARSE_DOCUMENT 関数では 2つのモードが提供され、このうち OCR モードでは、マニュアル、契約書、製品詳細ページや保険証券などのドキュメントからテキストを抽出する場合に適しています。
この機能により、SQL を用いてドキュメントからテキストを直接抽出できるようになります。日本国内では、AWS 東京リージョンの Snowflake アカウントで利用可能です。
March 03-06, 2025 — 9.5 Release Notes
機密データの自動分類 — 一般提供
分類プロファイルを定義しスキーマに関連付けることで、自動的にスキーマ内のテーブルを監視し、機密データへの分類やタグ付けを自動化できる機能が一般提供となりました。
タグベースのマスキングポリシーと組み合わせることで、新規追加も含む定期的なデータテーブルの再分類、タグ付け、タグが付与された場合の自動的なマスキングポリシーの適用が可能となります。
一連の手順など詳細は以下をご参照ください。注意点として、本機能の使用には Enterprise 以上のエディションが必要です。
Snowflake Scripting:非同期子ジョブが一般提供
Snowflake スクリプト(SQL ベースのストアドプロシージャ)での非同期子ジョブのサポートが一般提供となりました。
クエリの前に ASYNC キーワードを配置することで、そのクエリを非同期子ジョブとして実行できます。
詳細は以下をご参照ください。
March 04, 2025 — Universal Search ML model support — General availability
Universal Search の検索における ML モデルのサポートが一般提供となりました。
現在 Universal Search の検索対象となるオブジェクトは以下に一覧があります。
Universal Search については、以下でも紹介されていますので、あわせてご参照ください。
March 03, 2025 — Snowflake Cortex Document Processing Usage History
Document AI の PREDICT と Snowflake Cortex PARSE_DOCUMENT 関数によるクエリ使用履歴を確認できる CORTEX_DOCUMENT_PROCESSING_USAGE_HISTORY ビューが提供されました。
処理されたページ数とドキュメント処理機能に対して請求されるクレジットが、機能とモデルごとに 1 時間ごとに集計されて表示されます。
March 03, 2025 — Snowpark Container Services を用いたSnowflake Native App の AWS PrivateLink のサポートが一般提供
Snowpark Container Services を使用する Snowflake Native Apps での AWS PrivateLink のサポートが一般提供となりました。
これにより、ユーザーは自身の管理する VPC と Snowflake アカウント間をパブリックなインターネットを介さずに接続できます。Snowflake Native Apps のプライベート接続のサポート状況はクラウドリージョンごとに異なっているためご注意ください。詳細は以下にまとめられています。
March 03, 2025 — Snowpark Container Services を用いたSnowflake Native App の Azure Private Link のサポートがパブリックプレビュー
Snowpark Container Services を使用する Snowflake Native Apps での Azure Private Link のサポートがパブリックプレビューとなりました。
Behavior Change Log
2025_02 バンドルが提供開始 ※デフォルトは無効化
9.7 (2025/3/17 - 2025/3/27 リリース)で、2025_02 バンドルが提供開始となりました。先に挙動を確かめたい場合には手動でバンドルを有効化してテスト可能です。
このバンドルは、2025年4月のリリースでデフォルトで有効化される予定となっています。
2025_01 バンドルがデフォルトで有効化
9.7 (2025/3/17 - 2025/3/27 リリース)で、2025_01 バンドルがデフォルトで有効化されました。
このバンドルは、2025年4月のリリースで一般的に有効化される予定となっています。
2024_08 バンドルがデフォルトで有効化
9.7 (2025/3/17 - 2025/3/27 リリース)で、2024_08 バンドルが一般的に有効化されました。
おまけ:Modern Data Stack全般の最新情報
Snowflakeも含め、Modern Data Stack 全般の最新情報についても、定期的にブログにまとめて投稿されています!こちらもぜひご覧ください。