자동 클러스터링

자동 클러스터링은 필요에 따라 클러스터링된 테이블의 모든 재클러스터링을 원활하고 지속적으로 관리하는 Snowflake 서비스입니다.

클러스터링된 테이블이 정의된 후 재클러스터링이 반드시 즉시 시작되는 것은 아닙니다. Snowflake는 작업의 이점이 있는 경우에만 클러스터링된 테이블을 재클러스터합니다.

참고

계정에서 수동 재클러스터링을 계속 사용할 수 있는 경우 계정에 대해 자동 클러스터링이 아직 활성화되지 않을 수 있습니다. 자세한 내용은 수동 재클러스터링 — 사용되지 않음 섹션을 참조하십시오.

이 항목의 내용:

자동 클러스터링의 이점

편리한 유지 관리

자동 클러스터링을 사용하면 다음 작업을 수행할 필요가 없습니다.

  • 클러스터링된 테이블의 상태를 모니터링합니다.

    대신 이러한 테이블에 대해 DML이 수행될 때 Snowflake는 테이블을 모니터링 및 평가하여 재클러스터링의 이점이 있는지 여부를 결정하고 필요에 따라 자동으로 재클러스터합니다.

  • 재클러스터링에 사용할 웨어하우스를 계정에 지정합니다.

    Snowflake는 백그라운드에서 자동 재클러스터링을 수행하므로 사용할 웨어하우스를 지정할 필요가 없습니다.

필요한 경우 각 테이블에 대해 클러스터링 키를 정의하기만 하면(해당되는 경우) Snowflake가 모든 향후 유지 관리를 관리합니다.

전체 제어

ALTER TABLE … SUSPEND / RESUME RECLUSTER를 사용하여 언제든지 클러스터링된 테이블에 대한 자동 클러스터링을 일시 중단하고 재개할 수 있습니다. 자동 클러스터링이 테이블에 대해 일시 중단된 동안 테이블은 클러스터링 상태에 관계없이 자동으로 다시 클러스터링되지 않으므로 관련 크레딧 청구가 발생하지 않습니다.

또한 언제든지 클러스터링된 테이블에서 클러스터링 키를 삭제할 수 있습니다. 그러면 나중에 테이블에서 모든 재클러스터링이 방지됩니다.

비차단 DML

자동 클러스터링은 투명하며 재클러스터링되는 동안 테이블에 대해 발행된 DML 문을 차단하지 않습니다.

최적의 효율성

자동 클러스터링을 통해 Snowflake는 클러스터링된 테이블의 상태와 모든 자동화된 클러스터링 작업에 사용되는 리소스(서버, 메모리 등)를 내부적으로 관리합니다. 이를 통해 Snowflake는 필요에 따라 리소스를 동적으로 할당하여 가장 효율적이고 효과적인 재클러스터링을 수행할 수 있습니다.

또한 자동 클러스터링은 불필요한 재클러스터링을 수행하지 않습니다. 재클러스터링은 테이블이 작업의 이점을 얻을 수 있는 경우에만 트리거됩니다.

자동 클러스터링을 위한 크레딧 사용 및 웨어하우스

자동 클러스터링은 Snowflake 크레딧을 사용하지만 가상 웨어하우스를 제공할 필요는 없습니다. 대신 Snowflake는 테이블을 재클러스터링하기 위한 효율적인 리소스 활용을 내부적으로 관리하고 달성합니다.

클러스터링된 테이블에서 자동 클러스터링 작업에 의해 소비된 실제 크레딧에 대해서만 계정에 요금이 청구됩니다.

중요

클러스터링된 테이블에서 자동 클러스터링을 활성화하거나 재개한 후 테이블이 재클러스터된 지 얼마 되지 않은 경우 Snowflake가 테이블을 최적의 클러스터링 상태로 가져옴에 따라 재클러스터링 활동(및 해당 크레딧 청구)이 발생할 수 있습니다. 테이블이 최적으로 클러스터링되면 재클러스터링 활동이 중단됩니다.

마찬가지로 기존 테이블에서 클러스터링 키를 정의하거나 클러스터링된 테이블에서 클러스터링 키를 변경하면 재클러스터링 및 크레딧 청구가 발생할 수 있습니다.

예상치 못한 크레딧 청구가 발생하지 않도록 하려면 하나 또는 두 개의 선택한 테이블에서 시작하여 DML이 수행될 때 테이블을 잘 클러스터링하는 것과 관련된 크레딧 청구를 관찰하는 것이 좋습니다. 이것은 재클러스터링 활동에 의해 소비된 크레딧 수에 대한 기준을 설정하는 데 도움이 됩니다.

테이블에 대한 자동 클러스터링 활성화

대부분의 경우, 테이블에 대해 자동 클러스터링을 활성화하는 데 필요한 작업은 없습니다. 테이블에 대해 클러스터링 키 를 정의하기만 하면 됩니다.

하지만 클러스터링 키가 있는 원본 테이블에서 복제(CREATE TABLE … CLONE …)하여 만든 테이블에는 규칙이 적용되지 않습니다. 원본 테이블에 대해 자동 클러스터링이 일시 중단되지 않더라도 새 테이블은 자동 클러스터링이 일시 중단된 상태로 시작합니다. (이는 CLONE 명령이 테이블, 테이블을 포함하는 스키마 또는 테이블을 포함하는 데이터베이스를 복제했는지 여부에 관계없이 사실입니다.)

테이블에 대한 클러스터링 키를 정의하기 전에 재클러스터링 활동(및 해당 크레딧 청구)을 유발할 수 있는 다음 조건을 고려하십시오.

따라서 하나 또는 두 개의 선택한 테이블로 시작하여 이러한 테이블에 대한 자동 클러스터링의 영향을 평가하는 것이 좋습니다. 자동 클러스터링이 재클러스터링을 수행하는 방법에 익숙해지면 다른 테이블에 대한 클러스터링 키를 정의할 수 있습니다.

최적의 클러스터링 키 선택에 대한 정보는 클러스터링 키 선택 전략 를 참조하십시오.

테이블에 클러스터링을 추가하려면 테이블을 포함한 스키마와 데이터베이스에 대한 USAGE 또는 OWNERSHIP 권한도 있어야 합니다.

테이블에 대한 자동 클러스터링 상태 보기

SQL을 사용하여 테이블에 대해 자동 클러스터링이 활성화되었는지 확인할 수 있습니다.

출력의 AUTO_CLUSTERING_ON 열에는 각 테이블의 자동 클러스터링 상태가 표시되므로, 지정된 테이블의 자동 클러스터링을 일시 중단하거나 재개할지를 결정할 수 있습니다.

또한 CLUSTER_BY 열(SHOW TABLES) 또는 CLUSTERING_KEY 열(TABLES 뷰)에는 각 테이블의 클러스터링 키로 정의된 열이 표시됩니다.

테이블에 대한 자동 클러스터링 일시 중단하기

테이블에 대한 자동 클러스터링을 일시 중단하려면 ALTER TABLE 절과 함께 SUSPEND RECLUSTER 명령을 사용합니다. 예:

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).

  • (Account Usage 의) AUTOMATIC_CLUSTERING_HISTORY 뷰.

    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일 평균

    이 쿼리는 작년에 자동 클러스터링에서 사용된 평균 일일 크레딧을 주 단위로 나누어 보여줍니다. 이는 그 해의 일일 평균 이상을 식별하는 데 도움이 될 수 있으므로 사용량의 급증이나 예상치 못한 변화를 조사할 수 있습니다.

    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에서 제공하는 웨어하우스의 크레딧 사용을 관리하기 위한 용도로는 사용할 수는 없습니다.