はじめに
Snowflakeで出てくる、様々な設定や仕様にまつわる「数値」をまとめてみました。
主にSnowflakeの認定試験(SnowPro CoreやAdvanced Architect)に向けて学習する過程で登場するものを中心に挙げてみました。
「この数値で何か制限あった気がするけど、何の制限だったっけ?」みたいなモヤモヤ、ありますよね?(自分は何度もありました...)
数値から見た、制限や仕様の逆引きみたいな感じです。
ここでは、1〜10にまつわるものをまとめてみました。
なお、0は特別なのか様々な意味を持ち合わせるので、ここでは省きました。
(設定する項目によって、数値の0という意味、無効という意味、最大という意味、無制限の意味、等)
1
-
1秒 (仕様)
-
サーバーレス機能の料金は、 コンピューティング時間 単位で測定されたSnowflake管理のコンピューティングリソースの合計使用状況に基づいて計算されます。コンピューティング時間は秒単位で計算され、端数は最も近い秒に丸められます。
- つまり、サーバレスコンピューティングは「秒課金」=最低1秒単位での課金である、ということ
- この課金体系が適用されるSnowflakeのサーバレス機能の例はこちら
-
-
1分 (60秒) (仕様)
-
- マルチクラスターウェアハウスで、ウェアハウスを落とすかどうかを判定するチェックの実行間隔が
1分
間隔 - これ単体ではあまり意識しなくていいかもしれない
- 1分毎のチェックが連続で何回成功したか?が重要な観点
- マルチクラスターウェアハウスで、ウェアハウスを落とすかどうかを判定するチェックの実行間隔が
-
クレジットは最低60秒(つまり、
1分
)で、秒ごとに請求されます。 -
ウェアハウス(コンピューティング)コストは、〜60秒以内は同じコストが請求されるという最小単位
-
60秒より後は1秒毎に課金される
- ウェアハウスのサイズを選ぶ目安にもなったりする
- XSで長時間稼働させるくらいなら、S以上で60秒以内で処理が完結する方が安くつく等を見極めないといけない
-
資格試験でほぼ確実に問われる仕様
-
-
1時間 (60分,3600秒,3600000ミリ秒) (デフォルト)
-
タスクがタイムアウトしたか、スケジュールウィンドウを超過した
タスクの1回の実行には、
60分
のデフォルトの制限があります。この制限は、終了しないタスクに対する保護手段として実装されました。
...
テートメントが記録を返さない場合、タスクには現在、デフォルトの3600000 ミリ秒(60分)
のタイムアウトがあります。 -
タスクがタイムアウトするまでの1回の実行の制限時間(ミリ秒単位)を指定します。
...
3600000 (1時間)
-
タスクはデフォルト1時間でタイムアウト、これは押さえておいた方がいい仕様
-
ついでに、SPCS(Snowpark Container Services)のコンピューティングプールが非アクティブ時に中断されるまでの時間(AUTO_SUSPEND_SECS)も1時間なので、実務向けに覚えておくとよさそう
-
CREATE COMPUTE POOL - オプションのパラメーター
AUTO_SUSPEND_SECS = num
Snowflakeがコンピューティングプールを自動的に中断させるまでの非アクティブの秒数。非アクティブなコンピューティングプールとは、プール内のどのノード上でもサービスやジョブが現在アクティブではないプールのことです。
デフォルト:3600秒
-
-
-
1日 (デフォルト)
-
タイムトラベル(Time Travel)でよく出てくる日数
-
標準の保持期間は
1日(24時間)
であり、すべてのSnowflakeアカウントで自動的に有効になります。 -
Snowflakeがオブジェクトに対してTime Travelアクション(SELECT、CLONE、UNDROP)を実行するための履歴データを保持する日数です。
デフォルト1
-
タイムトラベルはとりあえずデフォルトでは1日分遡れる、ということ
-
-
1日 (最大)
-
タスクがタイムアウトするまでの1回の実行の制限時間(ミリ秒単位)を指定します。
...
0 -86400000 (1日)
。 -
タスクのタイムアウトは最大1日、これも押さえておいた方がいい仕様
-
-
1年 (仕様)
-
定期的なキー更新が有効になっている場合、テーブルの廃止された暗号化キーが
1年
より古い場合、Snowflake は自動的に新しい暗号化キーを作成し、廃止されたキーによって以前に保護されていたすべてのデータを新しいキーを使用して再暗号化します。 -
このパラメーターは、 Enterprise Edition (またはそれ以上)にのみ適用されます。毎年、新しいキーを使用してテーブルデータの再暗号化を有効/無効にして、データ保護の追加レベルを提供します
...
TRUE :データが最後に暗号化されてから1年
が経過すると、データのキーが再生成されます。キー更新はバックグラウンドで行われるため、ダウンタイムは発生せず、影響を受けるデータ/テーブルは常に利用可能です。 -
Snowflakeが管理する暗号化キーの更新周期に関する数値(1年周期で更新)
-
Enterprise Edition以上で利用可能
-
デフォルトはFALSEなので、定期更新は行われない
-
有効化するには
ALTER ACCOUNT SET PERIODIC_DATA_REKEYING = TRUE;
を実行
-
-
1年 (365日) (保持期間) (仕様)
-
1ステートメント (デフォルト)
-
マルチステートメント機能を使用するときに実行するステートメントの数。
...
デフォルト1
-
単一リクエストによる複数のSQLステートメントの送信を実現したい時に意識するパラメータ
-
実務等でなんとなく1リクエストで複数SQLを送信してしまって、これに引っかかる可能性がなくもない
-
-
1クレジット(仕様)
- 仮想ウェアハウスのクレジット使用状況
- ウェアハウスのサイズ:XSの消費クレジット
- 以降のサイズは、2倍で増えていくので、XSが1だと覚えておけばS以上は算出できる
- 資格試験向けには必須級で覚えておくべき事項
-
1MB(制限)
-
ログおよびトレースイベントペイロードには
1MB
の制限があります。ペイロードが1MB
のしきい値を超えている場合、イベントテーブルの記録は不完全となり、列 TIMESTAMP、 RECORD_TYPE、および RESOURCE_ATTRIBUTES の値のみが含まれます。現時点では、しきい値を超えた場合のその他の通知はありません。 -
考えられる原因と解決策:
原因
ワークシートが大きすぎます。 Snowsight の最大ワークシートサイズは1MB
で、1MB
より大きいワークシートはインポートできません。 -
Snowflakeは、Snowflakeクライアントを介して送信されるクエリテキスト(つまり、 SQL ステートメント)のサイズをステートメントごとに
1MB
に制限することをお勧めします。それ以上のクエリも正常に処理されますが、Snowflakeでは1ステートメントあたり1MB
を超えるクエリはメタデータストアに永続化される前に切り捨てられるため、再実行や再試行はできませんでした。- こちらは「1MBに制限することをお勧め」と書かれてあるが、1MBを超えたらよくないことが起こると書いてあるので実質制限扱い
-
2
-
2時間 (120分) (仕様)
-
Snowflakeの内部メタデータストアからデータを抽出するプロセスにより、アカウント使用状況ビューには自然な待機時間が発生します。
ほとんどのビューでは、待機時間は2時間
(120分)です。 -
大体のAccount Usageのビューに反映されるまでの時間は、2時間のラグがある
-
-
2日 (172800秒) (デフォルト)
-
実行中の SQL ステートメント(クエリ、 DDL、 DMLなど)がシステムによってキャンセルされるまでの時間です(秒単位)。
デフォルト172800 (つまり、2日)
-
何も設定しなければ、SQLの実行は2日後に強制キャンセルが掛かる
-
よく陥りがちなのが、タスクが実行するSQLはデフォルトではこれよりも早くタイムアウトしてしまうこと
- タスクはこちら(USER_TASK_TIMEOUT_MS)の考慮が必要
-
ちなみに、SPCSのジョブについても同じパラメータを参照して同様の制約を受けるので、ついでに意識しておくとよさそう
-
ジョブのタイムアウト: Snowpark Container Servicesのジョブは同期的に実行されます。ステートメントがタイムアウトすると、ジョブはキャンセルされます。デフォルトのステートメントタイムアウトは
2日間
。お客様は、ALTER SESSION を使用してパラメーター STATEMENT_TIMEOUT_IN_SECONDS を設定することにより、タイムアウトを変更できます。
ALTER SESSION SET statement_timeout_in_seconds=<time>
-
-
-
2日 (仕様)
-
DATA_SHARING_USAGE ビュー
- DATA_SHARING_USAGEスキーマのビューの大半は
2日間
の待機時間となっている
- DATA_SHARING_USAGEスキーマのビューの大半は
-
DATA_SHARING_USAGE ビュー
-
2人 (推奨値)
-
ユーザーに対する ACCOUNTADMIN ロール割り当ての制御
ACCOUNTADMIN のロールをユーザーに割り当てる際には、次の点に注意することを強くお勧めします。
- このロールは、組織内の選択された/限られた人数にのみ割り当ててください。
- ACCOUNTADMIN ロールを割り当てられたすべてのユーザーは、ログインに多要素認証(MFA)を使用する必要もあります(詳細については、 アクセス制御の構成 をご参照ください)。
- このロールを少なくとも
2人
のユーザーに割り当てます。
-
Snowflake1アカウント内に、ACCOUNTADMINが使用できるユーザーを少なくとも2人作っておくことが推奨されている
-
実用的には「(1)原則使用しないユーザー(例えばログインできない無効なユーザーに割り当てておく」とか「(2)権限昇格によって一時的に特定のユーザーだけがACCOUNTADMINを使えるような仕組みを作っておく」とかで乗り切るのがいいかもしれない
-
-
2〜3回 (仕様)
-
マルチクラスターウェアハウスのスケーリングポリシーの設定
- スケーリングポリシー - 標準において、ウェアハウスを落とす条件
2~3つ
のチェック(1分間隔で実行)に連続して成功した後、クラスターを再起動せずに、最小負荷クラスターの負荷を他のクラスターに再分散できるかどうかが決定されます。
- スケーリングポリシー - 標準において、ウェアハウスを落とす条件
-
マルチクラスターウェアハウスのスケーリングポリシーの設定
3
-
3層 (仕様)
-
Snowflakeのユニークなアーキテクチャは、
3つ
の重要なレイヤーで構成されています。- データベースストレージ
- クエリ処理
- クラウドサービス
-
基礎にして超重要な概念
-
-
3〜4列 (推奨値)
-
単一のクラスタリングキーには、1つ以上の列または式を含めることができます。ほとんどのテーブルでは、Snowflakeはキーごとに最大
3または4列
(または式)を推奨しています。3〜4
を超える列を追加すると、利益よりもコストが増加する傾向があります。 -
闇雲にクラスタリングキーを増やせばいいわけではないということ
-
4
- 4時間 (仕様,最大)
-
MFA トークンキャッシングを使用して認証中のプロンプトの数を最小限に抑える
MFA トークンのキャッシュは、特に比較的短い時間間隔内に複数の接続が試行される場合に、Snowflake への接続と認証中に確認する必要があるプロンプトの数を減らすのに役立ちます。キャッシュされた MFA トークンは最大
4時間
有効です。 -
ここだけ4時間...これは忘れがちな数値かもしれない
-
試験向けに意識しておいた方がいい数値かもしれない
-
5
-
5GB (仕様,最大)
-
内部ステージのディレクトリテーブルに
5GB
を超えるサイズのファイルがある場合、リフレッシュ操作は失敗します。この制限を回避するには、5GB
より大きなファイルを別のステージに移動します。 -
Amazon S3、Google Cloud Storage、またはMicrosoft Azureステージの場合、サポートされる最大ファイルサイズは
5GB
です。 -
1ファイルあたりの上限サイズとしてよく出てくる数値
-
目にする機会も多いと思うので、比較的覚えやすいはず
-
-
5分 (仕様)
-
セッションの突然の終了(ネットワークの停止、ブラウザの終了、サービスの中断など)により接続が失われた場合に、進行中のクエリに対してSnowflakeが実行するアクションを指定します。
...
TRUE : 接続が失われると、進行中のクエリは5分後
に中止されます。 -
デフォルトはFALSE (=進行中のクエリは完了される) のため、あんまり気にしない数値かもしれない
-
実務ではもしかしたら気にするケースがありそう
-
-
5回 (デフォルト)
-
CREATE PASSWORD POLICY - オプションのパラメーター
PASSWORD_MAX_RETRIES = integer
ロックアウトされるまでのパスワード入力の最大試行回数を指定します。
サポートされている範囲は1から10までです。
デフォルト:5
-
デフォルトでは、パスワードの入力ミスは5回まで
-
-
5または10分以下 (推奨値)
-
自動中断を有効にする場合は、Snowflakeが1秒あたりの請求を使用するため、低い値(
5または10分以下
)に設定することをお勧めします。これは、使用されていないときにウェアハウスが稼働しないように(そしてクレジットを消費しないように)します。 -
ウェアハウスの自動停止時間を設定する時の推奨値
-
ウェアハウスを使っていない時の自動停止の設定なので、クエリ実行時間がこれよりも長くても勝手に停止されることはない
-
-
5〜6回 (仕様)
-
マルチクラスターウェアハウスのスケーリングポリシーの設定
-
スケーリングポリシー - エコノミーにおいて、ウェアハウスを落とす条件
5から6
の連続した成功したチェック(1分間隔で実行)の後。これにより、クラスターを再起動せずに、最小負荷クラスターの負荷を他のクラスターに再分散できるかどうかが決定されます。 -
「標準」と比べて連続で成功させないといけないチェック回数が多いので、シャットダウン条件が厳しい、緩やかにシャットダウンされるようなイメージ
-
スケーリングポリシー周りは押さえておくべき数値が多い...
-
-
マルチクラスターウェアハウスのスケーリングポリシーの設定
-
5文字以上 (仕様)
-
検索最適化サービスにより、5文字以上の長さの部分文字列を検索する際のパフォーマンスを向上させることができます。
-
検索最適化サービスを利用する際のポイントになってくる
-
「5文字以上」の文字列を検索する際は効いてくる一方で、それより短い文字列を検索しようとすると効果が発揮されない
-
6
-
6分 (仕様)
-
マルチクラスターウェアハウスのスケーリングポリシーの設定
-
スケーリングポリシー - エコノミーにおいて、新しくウェアハウスが起動する条件
システムが、クラスターを少なくとも
6分間
ビジー状態に保つのに十分なクエリ負荷があると推定する場合のみ。 -
これは6分間というキーワードは覚えられたとしても、標準 or エコノミーどっちだっけ?で迷うかもしれない
-
-
マルチクラスターウェアハウスのスケーリングポリシーの設定
-
6ヶ月 (仕様,最大)
- Information schemaで閲覧できる期間を指す
- Snowflake Information Schema
- 例えば...
-
DATABASE_STORAGE_USAGE_HISTORY
このテーブル関数は、指定された日付範囲内の単一のデータベース(またはアカウント内のすべてのデータベース)の1日の平均ストレージ使用量をバイト単位でクエリするために使用できます。結果は次が含まれます。
- データベースのテーブルとマテリアライズドビューに保存されているすべてのデータ。
- データベースのFail-safeで維持されるすべての履歴データ。
注釈
この関数は、過去6か月
以内のストレージ使用量を返します。
-
6ヶ月の期間分も取得できるデータに関しては資格試験ではあまり問われない感じがしている
-
もっと期間の短いデータに関しては特に問われがちなイメージ
-
-
6クレジット (仕様)
- VIRTUAL WAREHOUSES (COMPUTE)
- Snowpark-Optimizedなウェアハウスの最小サイズがMであり、そのクレジットが6である
- 以降は2倍ずつ増える(標準のウェアハウスと同様)
- 同じMサイズでも、標準のウェアハウス(Mサイズ:4クレジット)とは異なる点に注意
7
-
7日 (604800秒) (最大)
-
実行中の SQL ステートメント(クエリ、 DDL、 DMLなど)がシステムによってキャンセルされるまでの時間です(秒単位)。
0 ~604800 (つまり、7日間)
0 の値は、最大タイムアウト値が適用されることを指定します。 -
SQLは最大1週間実行し続けることができる、ということ
-
相当巨大なデータか複雑なクエリか...いずれにしてもウェアハウスの利用料金が気になるところ
-
-
7日 (仕様,最大)
-
Fail-safeで遡れる最大日数であり、固定値でもある(減らすことも増やすことも不可)
-
Fail-safeが提供する、Snowflakeによって履歴データを回復できる可能性のある期間(構成不可能)は
7日間
です。 -
ただしベストエフォート
-
永続テーブルの量産で意図せずストレージコストが掛かるので、お試しテーブルはTAMPORARYとかTRANSIENTで作るようにした方がよい
-
-
7日 (仕様,最大)
-
Information schemaで閲覧できる期間を指す
-
例えば...
-
LOGIN_HISTORY ファミリーのテーブル関数を使用して、Snowflakeユーザーによるさまざまなディメンションに沿ったログイン試行をクエリできます。
- LOGIN_HISTORY は、指定された時間範囲内のログインイベントを返します。
...
注釈
これらの関数は、過去7日
以内のログインアクティビティを返します。
- LOGIN_HISTORY は、指定された時間範囲内のログインイベントを返します。
-
-
他にもQUERY_HISTORY, TASK_HISTORYも該当する
-
これらの特性を意識しておくことは、試験でも実務でも結構重要
-
8
-
8分 (推奨値)
-
重要
このエンドポイントは、過剰な呼び出しを避けるためにレート制限されています。レート制限(エラーコード429)を超えないようにするため、 loadHistoryScan よりも insertReport に強く依存することをお勧めします。 loadHistoryScan を呼び出すとき、データロードのセットを含む最も狭い時間範囲を指定します。たとえば、履歴の最後の10分を8分ごと
に読むとうまくいきます。 -
Snowpipe のloadHistoryScan エンドポイントを呼び出すときに従うべきベストプラクティス
-
重要と書いてある通り、このエンドポイントを使うにあたっては重要な考慮点
-
「重要」とあるだけに、資格試験でも問われそう
-
-
8ステートメント(同時実行レベル) (デフォルト)
-
ウェアハウスによって実行される SQL ステートメント(つまり、クエリおよび DML)の並行性レベルを指定します。
...
デフォルト8
-
デフォルトの最大同時実行レベルは
8
です。レベルを下げるには、 ALTER WAREHOUSE コマンドを使用してより低い数値を指定します。 -
ウェアハウス1台あたり、デフォルトで8クエリ同時に捌けるということ
-
SQLがあるタイミングで大量に同時実行されるようなワークロードで効いてくる
-
マルチクラスターの最大化モードの話と合わせてとよく出てくる
-
-
8MB(8,388,608バイト)(仕様,最大)
-
バイナリ型データの最大長
-
最大長は
8MB
(8,388,608バイト)です。VARCHAR とは異なり、 BINARY データ型にはUnicode文字の概念がないため、長さは常にバイト単位で測定されます。
-
9
特になさそうでした。
10
-
10 (台,クラスター) (最大)
-
Snowflakeは、マルチクラスターウェアハウスを使用して、静的または動的に追加のクラスターを割り当てて、より多くのコンピューティングリソースを利用できるようにします。マルチクラスターウェアハウスは、次のプロパティを指定することで定義されます。
クラスターの最大数。1より大きい(最大10
)。
クラスターの最小数。最大値以下(最大10
)。 -
マルチクラスターウェアハウスの設定で指定できる最大の数が10
-
-
10分 (仕様,最大)
-
このエンドポイントには次の制限があります。
10、000の最新のイベントが保持されます。
イベントは最大10分間
保持されます。 -
Snowpipe insertReport エンドポイントの仕様上の最大分数
-
このエンドポイントを使う上では重要なポイント
-
-
10分 (仕様)
-
コンシューマーのデータが欠落している、または同期されていない
自動複製リストからのビューが表示されなくなったとコンシューマーから報告されました。
...
オブジェクトが再作成された後、共有に再付与されなかった
あるいは、オブジェクトが再付与されたが、10分未満しか経過していない。共有に付与されたオブジェクトの変更は10分ごと
にチェックされるので、10分未満であれば、更新されたオブジェクトはまだコンシューマーのリージョンに自動複製されていません。 -
複製における仕様として、10分毎の変更チェック〜反映という周期になる
-
複製先に反映されていない時は10分待って再確認が必要
-
-
10分 (仕様)
-
アクセストークンは短期間有効で、通常は
10分
です。アクセストークンの有効期限が切れると、クライアントは更新トークンを送信して新しいアクセストークンを取得できます。 -
比較的短いので利用時は注意
-
-
10% (仕様)
-
クラウドサービスの使用量は、クラウドサービスの日次消費量が仮想ウェアハウスの日次使用量の
10%
を超えた場合にのみ請求されます。料金は毎日計算されます(UTC タイムゾーン)。これにより、その日のクレジット価格で、毎日10%
の調整が正確に適用されます。 -
コストに関する数値
-
コストを計算するにあたっては重要な考慮点
-
Snowflakeアカウント作成直後〜初期構築段階等、ウェアハウスをあまり稼働していない時に請求されがちなコスト
-
-
10回 (デフォルト)
-
SUSPEND_TASK_AFTER_NUM_FAILURES
タスク実行が連続して失敗した後、スタンドアロンタスクまたは タスクグラフ ルートタスクが自動的に中断した回数。失敗したタスク実行には、タスク本体の SQL コードがユーザーエラーを生成するかタイムアウトになった実行が含まれます。スキップ、キャンセル、またはシステムエラーが原因で失敗したタスク実行は不確定と見なされ、失敗したタスク実行の数には含まれません。
...
パラメーターのデフォルト値は10
に設定されています。これは、10回
連続してタスクの実行に失敗すると、タスクが自動的に中断されることを意味します。 -
タスクがいつの間にか state : SUSPENDED になっているのは、大体これのせいと思われる(参考)
-
実務向けの考慮点かもしれない
-
-
10K (仕様,最大)
-
SHOW IMAGE REPOSITORIES - 使用上の注意
コマンドは、コマンドを実行するために使用されるロールのアクセス権によって決定された通り、指定されたオブジェクトタイプに対して 最大 10Kの記録を返します。フィルタが適用されていても、10Kの制限を超える記録は返されません。
-
-
10TB (仕様,最大)
-
エラー
共有が10TB
を超えるデータベースに関連付けられているため、自動複製は使用できません。
データ製品が10TB
を超えるデータベースに関連付けられているため、自動複製は使用できません。 -
複製の制限(上限)として最大10TB/データベースが設定されている
-
サポートに連絡すれば上限緩和は可能とのこと
-
おわりに
こうやって並べてみると、色んな数値がありますね...
こういった数値に関してはとりあえず把握はするものの、どうやって決まるのか?あたりが気になったりしますね。
恒久的にこの数値なのか、改修やバージョンアップで見直されるのか、とかも。
資格試験で問われるような数値に関しては、ほぼ恒久的に決まっているのかなとも思ったりします。
まだまだ色んな数値が存在しますが、10よりも大きな数値に関しても別途まとめたいかなと思います。
以上です。