2025年5月にリリースされたSnowflakeの新機能・変更点のまとめ #SnowflakeDB
2025年5月にリリースされたSnowflakeの新機能・変更点のまとめ記事になります。
※注意事項:本記事ではすべての情報についての記述はせず、特筆すべきだと感じた情報だけピックしております。基本的には以下の情報を参考にしておりますので、全ての最新情報を確認したい場合は下記のURLからご確認ください。
May 30, 2025 — Data Governance release notes
オブジェクトのタグ付けが Standard Edition でも利用可能に
すべてのアカウントで、エディションに関わらずオブジェクトタグを作成および設定できるようになりました。タグの伝播などの一部の機能は、引き続き Enterprise Edition 以上が必要です。
May 23-28, 2025 — 9.14 Release Notes
Snowpark Python version updates
Snowpark Python でサポートされている Python のバージョンとして 3.12 が追加されました。
Data types:Structured data types を標準テーブルでもサポート — パブリックプレビュー
Iceberg テーブルでサポートされていた Structured data types のカラムを標準の Snowflake テーブルで定義できるようになりました。
以下のデータ型を定義できます。
- Structured ARRAY
- Structured OBJECT
- MAP
例えば配列の場合、Snowflake における半構造化配列の各要素は VARIANT 型のため他のデータ型の値を含めることができますが、Structured ARRAY の場合、要素のデータ型が明示的に指定されます。
詳細は以下をご参照ください。
トリガータスク: ディレクトリ テーブルと共有データでホストされるストリームのサポート
トリガータスクでディレクトリテーブルと共有テーブルに対するストリームがサポートされました。
ディレクトリテーブルでホストされているストリームの場合、タスクが変更を検出する前に、ディレクトリテーブルを更新する必要があります。
詳細は以下をご参照ください。
May 28, 2025 — 組織ユーザーがパブリックプレビュー
組織内で複数のアカウントがある際に、組織アカウントで「組織ユーザー」と「組織ユーザーグループ」を作成し、それらを通常のアカウントにインポートすることで、複数のアカウントで同じ人物をユーザーとして管理することができるようになりました。
これにより、複数アカウントでのユーザー管理のプロセスを簡素化できます。
詳細は以下をご参照ください。
May 28, 2025 — Data Governance release notes
リネージ:ストアドプロシージャのサポートがパブリックプレビュー
Snowsight リネージ図を表示すると、下流オブジェクトを生成したストアドプロシージャの詳細を取得できるようになりました。
リネージ図内の 2 つのオブジェクトを結ぶ矢印を選択すると、サイドパネルが開き、下流オブジェクトの作成方法の詳細が表示されます。下流オブジェクトがストアドプロシージャによって作成された場合「Stored Procedures」セクションに以下の情報が表示されます。
- Direct
- 下流のオブジェクトを生成したストアド プロシージャの名称
- Root
- ストアド プロシージャが他のストアド プロシージャ内にネストされている場合、ネストされたプロシージャの階層の最上位にあるストアド プロシージャの名前が表示される
詳細は以下をご参照ください。
May 27, 2025 — Snowflake Native App with Snowpark Container Services support for Azure Private Link — General availability
Snowpark Container Services を利用した Snowflake ネイティブアプリで Azure Private Link のサポートが一般提供となりました。
Snowpark Container Services へのプライベート接続は、AWS PrivateLink と Azure Private Link でのみサポートされています。
詳細は以下をご参照ください。
May 27, 2025 — Security release notes
MFA 時の認証要素として Passkey と Authenticator App のサポートが一般提供
MFA に登録されているパスワードユーザーが、Snowflake へのサインイン時にパスワードを入力した後に使用する2番目の認証要素として利用できる機能として Passkey と Authenticator app がサポートされました。それぞれ以下の特徴があります。
- Passkey
- 公開鍵/秘密鍵暗号方式を使用する認証方式
- Passkey を設定すると、秘密鍵はユーザーのマシンやまたはパスワードマネージャーなど、個人の安全な場所に保管される
- これにより、ハードウェアセキュリティキーやラップトップの指紋センサーなどを使用して認証することが可能となる
- Authenticator App
- ワンタイムパスワード(TOTP:Time-based One-Time Password)を使用する形式
- 一般的な認証アプリとして Google Authenticator、Microsoft Authenticator、Authy など
詳細は以下をご参照ください。
また、TOTP での設定について以下で紹介されていますので、合わせてご参照ください。
May 23, 2025: Notebook における st.secrets のサポートが一般提供
Snowflake Notebook で st.secrets がサポートされました。
以下は公式ドキュメントからの引用ですが、シークレットオブジェクトと外部アクセス統合の両方をノートブックに関連付けることで、ノートブックのコードからシークレットにアクセスすることができ、機密情報を安全に保つためことができるようになります。
-- Step 1: Create a secret
CREATE SECRET openai_key
TYPE = GENERIC_STRING
SECRET_STRING = '<your-api-key>';
-- Step 2: Create a network rule
CREATE OR REPLACE NETWORK RULE openai_rule
MODE = EGRESS
TYPE = HOST_PORT
VALUE_LIST = ('api.openai.com');
-- Step 3: Create an external access integration that uses the network rule and secret
CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION openai_integration
ALLOWED_NETWORK_RULES = (openai_rule)
ALLOWED_AUTHENTICATION_SECRETS = (openai_key)
ENABLED = true;
-- Step 4: Associate the integration and secret with the notebook
ALTER NOTEBOOK my_notebook
SET EXTERNAL_ACCESS_INTEGRATIONS = (openai_integration),
SECRETS = ('openai_key' = openai_key);
ノートブックからシークレットにアクセス
import streamlit as st
api_key = st.secrets['openai_key']
詳細は以下をご参照ください。
May 19-20, 2025 — 9.13 Release Notes
パイプ演算子
複数の SQL ステートメントを連結し、前のクエリ結果を次のクエリ参照できるパイプ演算子がサポートされました。
これにより、複雑な処理をステップごとにわかりやすく記述できるようになります。
詳細は以下をご参照ください。
Snowflake 管理の Iceberg テーブルでクロスクラウド/クロスリージョンのサポート
カタログとして Snowflake を使用する Snowflake 管理の Iceberg テーブルにおいて、Snowflake アカウントをホストしているクラウド プロバイダーとは異なるクラウド プロバイダー(異なるリージョン)の外部ボリューム ストレージを使用できるようになりました。
Snowflake アカウントと外部ボリュームが異なるリージョンにある場合、テーブルをクエリ時にクラウド ストレージ アカウント側で送信コストが発生します。
May 20, 2025 — Snowflake Copilot model level RBAC
Snowflake Copilot で、モデルレベルでのロールベースアクセス制御がサポートされました。
これにより、ユーザーロールに基づいて、Snowflake Copilot やその他の Cortex 機能で使用できる大規模言語モデル(LLM)を制御できます。
詳細は以下をご参照ください。
May 20, 2025 — Snowflake Openflow — パブリックプレビュー
Openflow がパブリックプレビューとなりました。
Openflow は Apache NiFi をベースとしたサービスで、サードパーティのツールに依存することなく、直接データパイプラインを設計および管理できる機能です。
現在はAWS商用リージョンで利用可能です。詳細は以下をご参照ください。
May 20, 2025 — Snowpark Container Services が Google Cloud 上のアカウントでパブリックプレビュー
Snowpark Container Services が、Google Cloud の Snowflake アカウントで使用できるようになりました。
May 20, 2025 — Data Governance release notes
Contacts for objects がパブリックプレビュー
データベースやテーブルなどのサポートされるオブジェクトに連絡先を関連付ける機能がパブリックプレビューとなりました。
これにより、ユーザーはオブジェクトに関するサポートが必要な際に誰に連絡すればよいかを把握できるようになります。
本機能の主な特徴は以下の通りです。
- 各連絡先はスキーマレベルのオブジェクト(CONTACT)として管理される
- CONTACT オブジェクトには、問い合わせなどの宛先情報として Snowflake 上のユーザーやメールアドレス、URL を指定できる
- オブジェクトには連絡先を割り当てる際はその目的(サポート、承認者 など)を設定する
- オブジェクトには複数の連絡先を設定できる
- 連絡先は継承される
- 親オブジェクトに関連付けると、子オブジェクトが連絡先を継承する
例として以下のように設定できます。
-- CONTACTを作成
CREATE CONTACT <contact_name> USERS = (<ユーザー名>); --連絡可能な Snowflake ユーザー
-- CONTACTを表示
SHOW CONTACTS;
-- CONTACTをオブジェクトに割り当て
ALTER DATABASE <データベース> SET CONTACT <purpose> = <contact_name>;
詳細は以下をご参照ください。
May 19, 2025 — Cortex COMPLETE Structured Output schema references
AI_COMPLETE 関数の出力を指定の JSON スキーマに従うようにする際、スキーマ内で繰り返し使用される共通のオブジェクトを一度定義することで、スキーマ内の他の場所から参照できるようになりました。
以下は公式ドキュメントの内容をもとに一部変更していますが、$defs
キーで定義したオブジェクト定義をshipping_address
キーで参照しています。
SELECT
AI_COMPLETE (
model => 'mistral-large2', -- 使用するモデルを指定
prompt => 'Extract structured data from this customer interaction note: Customer Sarah Jones complained about the mobile app crashing during checkout. She tried to purchase 3 items: a red XL jacket ($89.99), blue running shoes ($129.50), and a fitness tracker ($199.00). The app crashed after she entered her shipping address at 123 Main St, Portland OR, 97201. She has been a premium member since January 2024.', -- 抽出対象のテキスト
response_format => {
'type': 'json',
'schema': {
'type': 'object',
'$defs': { -- 共通オブジェクトの定義
'address': {
'type': 'object',
'properties': {
'street': { 'type': 'string' },
'city': { 'type': 'string' },
'state': { 'type': 'string' },
'zip': { 'type': 'string' },
'country': { 'type': 'string' }
},
'required': [ 'street', 'city', 'state' ] -- 必須フィールド
}
},
'properties': {
'customer': { -- customer オブジェクトの定義
'type': 'object',
'properties': {
'name': { 'type': 'string' },
'membership': {
'type': 'object',
'properties': {
'type': { 'type': 'string' },
'since': { 'type': 'string' }
}
},
'shipping_address': { '$ref': '#/$defs/address' } -- $defs で定義した address を参照
},
'required': [ 'name' ] -- name は必須
}
},
'required': [ 'customer'] -- customer オブジェクト自体を必須とする
}
}
);
詳細は以下をご参照ください。
May 16, 2025 — Universal Search がパイプ、タスク、ストリームをサポート — 一般提供
Universal Search でサポートされるオブジェクトが追加されました。
サポートされるオブジェクトは以下に記載があります。
May 16, 2025 — Cost Management release notes
Cost anomalies — パブリックプレビュー
アカウント・組織レベルでコストの異常値を自動で検知・通知してくれる機能である Cost anomalies がプレビューとなりました。
日々のコストからアカウントや組織で想定される消費量を Snowflake 側で予測し、予測される範囲を超える場合に、異常として検出されます。Snowsight または SQL で異常を確認でき、GUI(Snowsight)の場合、毎日のコストの変遷を折れ線グラフで確認できます。
異常値となった日付については、その日の時間ごとのクレジット消費、クレジット消費の多いウェアハウス、クレジット消費の多いクエリを確認することができます。
詳細は以下をご参照ください。
May 14, 2025 — Data Governance release notes
ユーザー定義タグの自動伝播 — 一般提供
ソースオブジェクトに適用されたユーザー定義のタグをターゲットオブジェクトに自動的に割り当てる自動タグ伝播(Automatic tag propagation)が一般提供となりました。
あるテーブルカラムにタグを定義すると、このソースオブジェクトから作成されたビューや別のテーブルなどのターゲットオブジェクトにタグが自動的に伝播されます。
このためにはタグのPROPAGATE
プロパティを指定します。
詳細は以下をご参照ください。
May 13, 2025: Support for Streamlit 1.44.0 (一般提供)
Streamlit in Snowflake で Streamlit バージョン 1.44.0 がサポートされました。
サポートされるバージョンは以下に一覧が記載されています。
May 05-12, 2025 — 9.12 Release Notes (with behavior changes)
Built-in code profiler for Python stored procedures — 一般提供
Python によるストアドプロシージャ向けの組み込みコードプロファイラーが一般提供となりました。
ハンドラコードがどの程度の時間やメモリを消費しているかを把握する際に使用できます。以下の手順でストアドプロシージャを呼び出すことで、プロファイルを出力できます。
- プロファイル出力の保存先ステージを指定
- PYTHON_PROFILER_TARGET_STAGE パラメータを指定
- プロファイラーを有効化
- SQL の場合、ACTIVE_PYTHON_PROFILER セッションパラメータを
LINE
またはMEMORY
に設定(デフォルトはLINE
)
- SQL の場合、ACTIVE_PYTHON_PROFILER セッションパラメータを
ステージに出力されたプロファイルはGET_PYTHON_PROFILER_OUTPUTで取得できます。
以下は公式ドキュメントのラインプロファイルの出力例ですが、各行ごとの実行時間や全体の実行時間に対する割合などを確認できます。
ラインプロファイルの出力例
Handler Name: main
Python Runtime Version: 3.9
Modules Profiled: ['main_module']
Timer Unit: 0.001 s
Total Time: 8.96127 s
File: _udf_code.py
Function: main at line 4
Line # Hits Time Per Hit % Time Line Contents
==============================================================
4 def main(session, last_n, total):
5 # create sample dataset to emulate id + elapsed time
6 1 122.3 122.3 1.4 session.sql('''
7 CREATE OR REPLACE TABLE sample_query_history (query_id INT, elapsed_time FLOAT)''').collect()
8 2 7248.4 3624.2 80.9 session.sql('''
9 INSERT INTO sample_query_history
10 SELECT
11 seq8() AS query_id,
12 uniform(0::float, 100::float, random()) as elapsed_time
13 1 0.0 0.0 0.0 FROM table(generator(rowCount => {0}));'''.format(total)).collect()
14
15 # get the mean of the last n query elapsed time
16 3 58.6 19.5 0.7 df = session.table('sample_query_history').select(
17 1 0.0 0.0 0.0 funcs.col('query_id'),
18 2 0.0 0.0 0.0 funcs.col('elapsed_time')).limit(last_n)
19
20 1 1528.4 1528.4 17.1 pandas_df = df.to_pandas()
21 1 3.2 3.2 0.0 mean_time = pandas_df.loc[:, 'ELAPSED_TIME'].mean()
22 1 0.3 0.3 0.0 del pandas_df
23 1 0.0 0.0 0.0 return mean_time
詳細は以下をご参照ください。
内部ステージのクローンがサポート — 一般提供
INCLUDE INTERNAL STAGES
オプションにより、データベースまたはスキーマのクローン作成時に、内部ステージのクローンを作成するか指定できるようになりました。
ディレクトリテーブルが有効化されている場合、内部ステージの現在の状態がクローンされます。
詳細は以下をご参照ください。
コンテナ内から呼び出し元権限を使用して Snowflake できるように — 一般提供
Snowflake Snowpark Container Services でコンテナ内から呼び出し元権限を使用して Snowflake に接続できるようになりました。
デフォルトでは、サービスユーザーのコンテキストで Snowflake へ接続されますが、これにより、サービスを呼び出したユーザーのコンテキストでクエリを実行できるようになります。
詳細は以下をご参照ください。
May 05, 2025 — Generation 2 standard warehouses — General availability
現在の標準仮想ウェアハウスのアップデート版である「Generation 2 Standard Warehouse (Gen2) 」が提供されました。
ウェアハウスの プロパティをRESOURCE_CONSTRAINT = STANDARD_GEN_2
とすることで作成できます。主な特徴と注意点は以下の通りです。
- Gen2 ウェアハウスは標準のウェアハウスのみ利用可能
- 一部のクラウドリージョンで利用可能
- 標準のウェアハウスと比較して、AWS の場合は1.35倍、Azure の場合は1.25倍のコスト
こちらについては、以下の記事でも解説されていますので、あわせてご参照ください。
May 01, 2025 — Dynamic tables:増分更新時の current time やdate でのフィルタをサポート — 一般提供
Dynamic table の増分リフレッシュにおいて、CURRENT_TIMESTAMP, CURRENT_DATE および CURRENT_TIME 関数とそのエイリアスをフィルタとして使用できるようになりました。
以下のように動的テーブルの定義に時間粒度でのフィルタリングを使用できます。
CREATE or replace DYNAMIC TABLE recent_events_dt
TARGET_LAG = '1 minutes'
WAREHOUSE = <warehouse>
REFRESH_MODE = INCREMENTAL --この設定が必須
AS
SELECT
event_id,
event_timestamp,
description
FROM timed_events
WHERE event_timestamp >= TIMESTAMPADD(minute, -3, CURRENT_TIMESTAMP());
これらの関数を使用するには、動的テーブルの更新モードを明示的にINCREMENTAL
に設定する必要があります。
Behavior Change Log
単一要素パスワードサインインの廃止に向けた計画
セキュリティ体制を強化するため、Snowflake でパスワードを使用するすべてのユーザーに対して多要素認証(MFA)が必須となります。
これらの変更は、複数の動作変更リリース(BCR)を通じて展開されます。この計画について、単一要素パスワード サインインの廃止のタイムラインと対応する BCR については、以下のページにまとめられています。
直近だと本記事の執筆時点で2025年6月下旬に提供開始予定の2025_04バンドルにて、すべての Snowsight ユーザー(新規および既存)に対する MFA が必須となります。
この時点では、Snowsight を使用して MFA に登録した後でも、BI などのツールから Snowflake サービスへのアクセス時に、引き続き単一要素パスワードを使用できます。また、認証ポリシーによる一時的な回避も可能です。
2025_03 バンドルが提供開始 ※デフォルトは無効化
9.12 (2025/5/5 - 2025/5/12 リリース)で、2025_03 バンドルが提供開始となりました。先に挙動を確かめたい場合には手動でバンドルを有効化してテスト可能です。
このバンドルは、2025年6月のリリースでデフォルトで有効化される予定となっています。
2025_02 バンドルがデフォルトで有効化
9.12 (2025/5/5 - 2025/5/12 リリース)で、2025_02 バンドルがデフォルトで有効化されました。このバンドルは、2025年6月のリリースで一般的に有効化される予定となっています。
このバンドルは、2025年4月のリリースでデフォルトで有効化される予定となっています。
2025_01 バンドルがデフォルトで有効化
9.12 (2025/5/5 - 2025/5/12 リリース)で、2025_01 バンドルがデフォルトで一般的に有効化されました。
おまけ:Modern Data Stack全般の最新情報
Snowflakeも含め、Modern Data Stack 全般の最新情報についても、定期的にブログにまとめて投稿されています!こちらもぜひご覧ください。