저장소 수명 주기 정책 생성 및 관리하기

참고

:doc:`저장소 수명 주기 정책</user-guide/storage-management/storage-lifecycle-policies>`은 현재 정부 리전에서 사용할 수 없습니다.

다음 섹션에서는 테이블에서 저장소 수명 주기 정책을 생성, 다시 생성 및 관리하는 방법에 대해 설명합니다.

저장소 수명 주기 정책 생성

저장소 수명 주기 정책을 생성하려면 CREATE STORAGE LIFECYCLE POLICY 명령을 사용합니다.

저장소 수명 주기 정책을 생성하는 경우 :ref:`아카이브 계층<label-slp_archive_tiers>`을 선택하고 선택적으로 보관 기간(일)을 설정할 수 있습니다. 보관 기간을 설정하는 경우 Snowflake는 행이 만료되기 전에 지정된 일수 동안 정책 식과 일치하는 테이블 행을 더 저렴한 저장소 계층으로 이동합니다. 또한 Snowflake는 정책을 연결하는 모든 테이블에서 변경 내용 추적을 활성화합니다.

예:

CREATE STORAGE LIFECYCLE POLICY my_slp
  AS (event_ts TIMESTAMP, account_id NUMBER)
  RETURNS BOOLEAN ->
    event_ts < DATEADD(DAY, -60, CURRENT_TIMESTAMP())
    AND EXISTS (
      SELECT 1 FROM closed_accounts
      WHERE id = account_id
    )
  ARCHIVE_TIER = COOL
  ARCHIVE_FOR_DAYS = 90;
Copy

참고

아카이브 저장소 정책이 있는 테이블로 작업할 때의 고려 사항은 아카이브 저장소 정책 섹션을 참조하세요.

모범 사례: 시간 기반 식에 날짜 변환 사용하기

성능을 개선하고 일관된 정책 실행을 보장하려면 시간 값을 비교할 때 정책 식에서 타임스탬프를 날짜로 변환합니다.

예를 들어, 다음 정책 식을 고려합니다.

event_time < DATEADD(DAY, -400, CURRENT_TIMESTAMP())
Copy

이 비교에는 일관되지 않은 동작을 유발할 수 있는 타임스탬프의 시간 구성 요소가 포함됩니다. ``event_time``에 의해 데이터가 시간순으로 삽입되는 경우, 정책의 실행 시간은 각 파일에서 삭제되는 행 수에 영향을 미칩니다.

이 문제를 방지하려면 식에서 타임스탬프를 날짜로 변환합니다.

TO_DATE(event_time) < TO_DATE(DATEADD(DAY, -400, CURRENT_TIMESTAMP()))
Copy

이 접근 방식은 하루 중 시간에 관계없이 일관된 정책 실행을 제공합니다.

저장소 수명 주기 정책 다시 만들기

이 기능은 GET_DDL 명령을 사용하여 지정된 저장소 수명 주기 정책을 다시 생성합니다. 정책의 아카이브 계층을 변경하려는 경우 이 작업을 수행할 수 있습니다.

DDL을 반환하여 이름이 ``my_slp``인 저장소 수명 주기 정책을 다시 생성합니다.

SELECT GET_DDL('policy','my_slp');
Copy

출력:

---------------------------------------------------------------------+
                      GET_DDL('POLICY','SLP')                        |
---------------------------------------------------------------------+
create or replace storage lifecycle policy SLP as                    |
  (event_ts timestamp, account_id number)
    returns boolean ->
    event_ts < dateadd(day, -60, current_timestamp())
    and exists (
      select 1 from closed_accounts
      where id = account_id
  )
  ARCHIVE_FOR_DAYS = 365                                             |
;                                                                    |
---------------------------------------------------------------------+

테이블에 대한 저장소 수명 주기 정책 관리하기

다음 옵션을 사용하여 저장소 수명 주기 정책 첨부 파일을 관리합니다.

테이블에 정책 연결하기

하나의 저장소 수명 주기 정책으로 여러 테이블을 관리할 수 있습니다. 테이블을 생성하거나 변경할 때 정책을 연결합니다.

:doc:`/sql-reference/sql/create-table`을 사용하여 테이블을 생성하고 지정된 열을 사용하여 새 테이블에 정책을 연결합니다.

참고

  • 정책을 적용하려면 필요한 권한이 있어야 합니다. 필요한 권한에 대한 정보는 Storage lifecycle policy privileges 섹션을 참조하십시오.

  • 테이블에는 저장소 수명 주기 정책을 하나만 연결할 수 있습니다.

  • 열 개수는 정책 함수 서명의 인자 개수와 일치해야 하며 열 데이터는 인자 유형과 호환되어야 합니다.

  • 테이블 열의 이름을 바꿔도 관련 정책은 영향을 받지 않습니다. Snowflake는 열 IDs를 사용하여 정책을 테이블에 연결합니다.

  • 저장소 수명 주기 정책 식을 평가하고 적용하기 위해 Snowflake는 테이블에 대한 모든 거버넌스 정책을 내부적으로 일시적으로 우회합니다.

CREATE TABLE my_table
  ...
  WITH STORAGE LIFECYCLE POLICY my_slp ON (col1);
Copy

:doc:`/sql-reference/sql/alter-table`을 사용하여 지정된 열을 통해 기존 테이블에 정책을 연결합니다.

ALTER TABLE my_table ADD STORAGE LIFECYCLE POLICY my_slp
  ON (col1);
Copy

정책을 일회성 작업으로 적용하기

과거 데이터를 한 번만 만료하거나 보관해야 하는 경우(일회성 작업) 다음 접근 방식을 권장합니다.

  1. 저장소 수명 주기 정책을 생성하여 테이블에 연결합니다.

  2. 정책이 실행될 때까지 기다렸다가 데이터를 보관하거나 만료합니다. INFORMATION_SCHEMA.STORAGE_LIFECYCLE_POLICY_HISTORY 테이블 함수를 모니터링하여 프로세스가 완료되었는지 확인합니다.

  3. 요금이 반복적으로 부과되지 않도록 방지하려면 테이블에서 :ref:`저장소 수명 주기 정책 제거<label-slp_remove_slp>`를 수행합니다. 저장소 수명 주기 정책에서는 실행당 비용이 발생합니다.

이 접근 방식에서는 적격한 모든 데이터를 이미 처리한 정책에 대해 지속적인 일일 요금을 부과하는 대신 단일 실행에 대해서만 요금을 지불하도록 보장합니다. 비용에 대한 자세한 내용은 저장소 수명 주기 정책에 대한 요금 청구 섹션을 참조하세요.

테이블에서 정책 제거하기

:doc:`/sql-reference/sql/alter-table`을 사용하여 테이블에서 저장소 수명 주기 정책을 제거합니다.

ALTER TABLE my_table DROP STORAGE LIFECYCLE POLICY;
Copy
  • 그러면 이 테이블에 대한 모든 향후 정책 실행이 제거됩니다.

  • 실행 중인 정책 실행은 테이블에서 삭제되기 전에 완료될 수 있습니다.

  • 저장소 수명 주기 정책을 삭제하려면 정책이 연결된 테이블에 대한 OWNERSHIP 권한이 있어야 합니다.