自動クラスタリング

自動クラスタリングは、必要に応じてクラスタ化されたテーブルのすべての再クラスタリングをシームレスかつ継続的に管理するSnowflakeサービスです。

クラスタ化されたテーブルが定義された後、再クラスタリングは必ずしもすぐに開始されるわけではないことに注意してください。Snowflakeは、操作の恩恵を受ける場合にのみ、クラスタ化されたテーブルを再クラスター化します。

注釈

アカウントで手動の再クラスタリングが引き続き利用できる場合、自動クラスタリングがアカウントでまだ有効になっていない可能性があります。詳細については、 手動再クラスタリング--- 非推奨 をご参照ください。

このトピックの内容:

自動クラスタリングの利点

簡単なメンテナンス

自動クラスタリングにより、次のタスクを実行する必要がなくなります:

  • クラスタ化されたテーブルの状態の監視。

    代わりに、これらのテーブルで DML が実行されると、Snowflakeはテーブルを監視および評価して、必要に応じて再クラスタリングのメリットがあるかどうかを判断し、自動的に再クラスタリングします。

  • 再クラスタリングに使用するアカウント内のウェアハウスを指定します。

    Snowflakeはバックグラウンドで自動再クラスタリングを実行するため、使用するウェアハウスを指定する必要はありません。

必要なことは、各テーブルのクラスタリングキーを定義するだけで(必要な場合)、Snowflakeは今後のすべてのメンテナンスを管理します。

フル制御

ALTER TABLE ... SUSPEND / RESUME RECLUSTER を使用して、クラスタ化されたテーブルの自動クラスタリングをいつでも一時停止および再開できます。テーブルの自動クラスタリングが中断されている間、テーブルはクラスタリング状態に関係なく自動的に再クラスタリングされることはないため、関連するクレジットチャージは発生しません。

クラスタ化されたテーブルにクラスタリングキーをいつでもドロップすることもできます。これにより、今後のテーブルでのすべての再クラスタリングが防止されます。

ノンブロッキング DML

自動クラスタリングは透過的であり、再クラスタ化中にテーブルに対して発行された DML ステートメントをブロックしません。

最適な効率

自動クラスタリングを使用すると、Snowflakeは、クラスタ化されたテーブルの状態と、すべての自動クラスタリング操作に使用されるリソース(サーバー、メモリなど)を内部で管理します。これにより、Snowflakeは必要に応じてリソースを動的に割り当てることができ、最も効率的かつ効果的な再クラスタリングが可能になります。

また、自動クラスタリングは不要な再クラスタリングを実行しません。再クラスタリングは、テーブルが操作の恩恵を受ける場合にのみトリガーされます。

自動クラスタリングのクレジット使用状況とウェアハウス

自動クラスタリングはSnowflakeクレジットを消費しますが、仮想ウェアハウスを提供する必要はありません。代わりに、Snowflakeは内部的に管理し、テーブルを再クラスタリングするための効率的なリソース使用率を達成します。

アカウントは、クラスタ化されたテーブルでの自動クラスタリング操作によって消費された実際のクレジットに対してのみ請求されます。

重要

クラスタ化されたテーブルで自動クラスタリングを有効化または再開した後、テーブルが再クラスタ化されてからしばらく経っている場合、Snowflakeがテーブルを最適なクラスタ化状態にするため、再クラスタリングアクティビティ(および対応するクレジット料金)が発生する可能性があります。テーブルが最適にクラスタ化されると、再クラスタリングアクティビティは終了します。

同様に、既存のテーブルでクラスタリングキーを定義するか、クラスタ化されたテーブルでクラスタリングキーを変更すると、再クラスタリングとクレジット料金をトリガーする場合があります。

予期しないクレジット請求を防ぐために、選択した1つまたは2つのテーブルから開始し、 DML の実行時にテーブルを適切にクラスタ化することに関連するクレジット請求を確認することをお勧めします。これは、アクティビティの再クラスタリングによって消費されるクレジット数のベースラインを確立するのに役立ちます。

テーブルの自動クラスタリングを有効にする

多くの場合、テーブルの自動クラスタリングを有効にするためのタスクは必要ありません。テーブルに クラスタリングキー を定義するだけです。

ただし、このルールは、クラスタリングキーを持つソーステーブルからクローニング(CREATE TABLE ... CLONE ...)によって作成されたテーブルには適用されません。新しいテーブルは、ソーステーブルの自動クラスタリングが一時停止されていない場合でも、自動クラスタリングが一時停止された状態で始まります。(これは、 CLONE コマンドがテーブル、テーブルを含むスキーマ、またはテーブルを含むデータベースのクローンを作成したかどうかに関係なく当てはまります。)

ちなみに

テーブルのクラスタリングキーを定義する前に、再クラスタリングアクティビティ(および対応するクレジット料金)を引き起こす可能性がある次の条件を考慮してください。

そのため、選択した1つまたは2つのテーブルから開始し、これらのテーブルに対する自動クラスタリングの影響を評価することをお勧めします。自動クラスタリングが再クラスタリングを実行する方法に慣れたら、他のテーブルのクラスタリングキーを定義できます。

最適なクラスタリングキーの選択については、 クラスタリングキーを選択するための戦略 をご参照ください。

テーブルにクラスタリングを追加するには、テーブルを含むスキーマとデータベースに対する USAGE または OWNERSHIP 権限も必要です。

テーブルの自動クラスタリングステータスの表示

SQL を使用して、テーブルで自動クラスタリングが有効になっているかどうかを表示できます。

出力の AUTO_CLUSTERING_ON 列には、各テーブルの自動クラスタリングステータスが表示されます。これは、特定のテーブルの自動クラスタリングを一時停止または再開するかどうかを決定するために使用できます。

さらに、 CLUSTER_BY 列(SHOW TABLES)または CLUSTERING_KEY 列(TABLES ビュー)には、各テーブルのクラスタリングキーとして定義された列が表示されます。

テーブルの自動クラスタリングの一時停止

テーブルの自動クラスタリングを一時停止するには、 SUSPEND RECLUSTER 句を指定して ALTER TABLE コマンドを使用します。例:

ALTER TABLE t1 SUSPEND RECLUSTER;

SHOW TABLES LIKE 't1';

+---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+----------+----------------+----------------------+
|           created_on            | name | database_name | schema_name | kind  | comment | cluster_by | rows | bytes |  owner   | retention_time | automatic_clustering |
+---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+----------+----------------+----------------------+
| Thu, 12 Apr 2018 13:29:01 -0700 | T1   | TESTDB        | MY_SCHEMA   | TABLE |         | LINEAR(C1) | 0    | 0     | SYSADMIN | 1              | OFF                  |
+---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+----------+----------------+----------------------+
Copy

テーブルの自動クラスタリングの再開

クラスタ化されたテーブルの自動クラスタリングを再開するには、 RESUME RECLUSTER 句を指定して ALTER TABLE コマンドを使用します。例:

ALTER TABLE t1 RESUME RECLUSTER;

SHOW TABLES LIKE 't1';

+---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+----------+----------------+----------------------+
|           created_on            | name | database_name | schema_name | kind  | comment | cluster_by | rows | bytes |  owner   | retention_time | automatic_clustering |
+---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+----------+----------------+----------------------+
| Thu, 12 Apr 2018 13:29:01 -0700 | T1   | TESTDB        | MY_SCHEMA   | TABLE |         | LINEAR(C1) | 0    | 0     | SYSADMIN | 1              | ON                   |
+---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+----------+----------------+----------------------+
Copy

ちなみに

クラスタ化されたテーブルで自動クラスタリングを再開する前に、再クラスタリングアクティビティ(および対応するクレジット料金)を引き起こす可能性のある次の条件を考慮してください:

  • テーブルは最適にクラスタ化されていません(例えば、テーブルが最後に再クラスタ化されてから重要な DML が実行されています)。

  • テーブルのクラスタリングキーが変更されました。

詳細については、 マイクロパーティションとデータクラスタリング および クラスタリングキーとクラスタ化されたテーブル をご参照ください。

自動クラスタリングのコストの表示

自動クラスタリングは、必要に応じた初期クラスタリングおよび再クラスタリングを含む、各クラスター化テーブルの自動バックグラウンドメンテナンスに、 サーバーレスコンピューティングリソース を使用するため、クレジットを消費します。自動クラスタリングにより消費されたコンピューティング時間あたりのクレジット量を知る方法については、 Snowflakeサービス利用テーブル の「サーバーレス機能クレジットテーブル」をご参照ください。

適切な権限を持つユーザーは、 Snowsight、 Classic Console、または SQL を使用して、自動クラスタリングのコストを表示できます。

Snowsight

Select Admin » Cost Management

Classic Console

Account Account tab » Billing & Usage をクリックします

自動クラスタリングのコストは、Snowflakeが別途提供する Snowflake logo in blue (no text) AUTOMATIC_CLUSTERING という名前のウェアハウスとして表示されます。

SQL

次のいずれかをクエリします。

  • AUTOMATIC_CLUSTERING_HISTORY テーブル関数( Snowflake Information Schema 内)。

  • AUTOMATIC_CLUSTERING_HISTORY ビューAccount Usage 内)。

    AUTOMATIC_CLUSTERING_HISTORY ビューに対して次のクエリを実行できます。

    クエリ: 自動クラスタリングのコスト履歴(日別、オブジェクト別)

    このクエリは、自動クラスタリングを使用したテーブルのリストと、過去30日間にサービスを介して消費したクレジット量を日別に表示します。クレジットの消費に不規則性があるか、一貫して消費量が多い場合は、さらに調査する必要があることを表します。

    SELECT TO_DATE(start_time) AS date,
      database_name,
      schema_name,
      table_name,
      SUM(credits_used) AS credits_used
    FROM snowflake.account_usage.automatic_clustering_history
    WHERE start_time >= DATEADD(month,-1,CURRENT_TIMESTAMP())
    GROUP BY 1,2,3,4
    ORDER BY 5 DESC;
    
    Copy

    クエリ: 自動クラスタリング履歴およびm日平均

    このクエリは、自動クラスタリングによって消費された日次の平均クレジットを、前年の週ごとにグループ化して表示します。1年間の日次平均の異常を特定するのに役立ちます。これにより、消費の急増や予期しない変化をさらに調査することができます。

    WITH credits_by_day AS (
      SELECT TO_DATE(start_time) AS date,
        SUM(credits_used) AS credits_used
      FROM snowflake.account_usage.automatic_clustering_history
      WHERE start_time >= DATEADD(year,-1,CURRENT_TIMESTAMP())
      GROUP BY 1
      ORDER BY 2 DESC
    )
    
    SELECT DATE_TRUNC('week',date),
          AVG(credits_used) AS avg_daily_credits
    FROM credits_by_day
    GROUP BY 1
    ORDER BY 1;
    
    Copy

注釈

リソースモニター は、仮想ウェアハウスのクレジット使用状況を制御します。ただし、これらを使用して、 Snowflake logo in blue (no text) AUTOMATIC_CLUSTERING ウェアハウスを含む、Snowflake提供のウェアハウスのクレジット使用状況を制御することはできません。