CREATE STORAGE LIFECYCLE POLICY

현재 또는 지정된 스키마에서 새 :doc:`저장소 수명 주기 정책</user-guide/storage-management/storage-lifecycle-policies>`을 생성하거나 기존 정책을 대체합니다. 정책은 정책이 연결된 테이블에서 만료할 행을 결정하기 위해 지정하는 인자에 대해 식을 실행합니다. 정책의 인자는 테이블의 열을 참조합니다.

정책을 만든 후 ALTER TABLE 명령을 사용하여 테이블에 정책을 추가합니다.

참고 항목:

ALTER STORAGE LIFECYCLE POLICY , DESCRIBE STORAGE LIFECYCLE POLICY , DROP STORAGE LIFECYCLE POLICY , SHOW STORAGE LIFECYCLE POLICIES

구문

CREATE [ OR REPLACE ] STORAGE LIFECYCLE POLICY [ IF NOT EXISTS ] <name>
  AS ( <arg_name> <arg_type> [ , ... ] )
  RETURNS BOOLEAN -> <body>
  [ ARCHIVE_TIER = { COOL | COLD } ]
  [ ARCHIVE_FOR_DAYS = <number_of_days> ]
  [ COMMENT = '<string_literal>' ]
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
Copy

필수 매개 변수

name

저장소 수명 주기 정책의 식별자를 지정하는 문자열입니다. 이는 스키마에 대해 고유해야 합니다.

또한, 식별자는 알파벳 문자로 시작해야 하며 전체 식별자 문자열을 큰따옴표(예: "My object")로 묶지 않는 한 공백이나 특수 문자를 포함할 수 없습니다. 큰따옴표로 묶인 식별자도 대/소문자를 구분합니다.

자세한 내용은 식별자 요구 사항 섹션을 참조하십시오.

AS ( arg_name arg_type [ , ... ] )

정책의 서명입니다. 서명에는 하나 이상의 인자를 포함해야 합니다.

서명은 행이 만료될 준비가 되었는지 여부를 결정하기 위해 고려해야 하는 속성의 세트를 지정합니다. 특성 값은 데이터베이스 오브젝트(테이블)에서 가져옵니다.

RETURNS BOOLEAN -> body

저장소 수명 주기 정책은 true 또는 false로 평가되어야 합니다. 저장소 수명 주기 정책으로 보호되는 테이블을 쿼리하는 사용자에게는 :samp:`{body}`가 작성되는 방식에 따라 출력에서 행이 표시됩니다.

body

Snowflake가 만료할 행을 결정하는 데 사용하는 SQL 식입니다.

데이터를 변환하려면 조건식 함수 또는 :doc:`사용자 정의 함수</developer-guide/udf/udf-overview>`(UDFs)와 같은 기본 제공 함수를 사용하면 됩니다.

참고

현재, 저장소 수명 주기 정책 본문에서는 SQL 및 JavaScript UDFs만 지원됩니다.

선택적 매개 변수

ARCHIVE_TIER = { COOL | COLD }

행 보관에 사용할 저장소 계층의 유형을 지정합니다. 정책에 ARCHIVE_TIER를 설정한 후에는 수정할 수 없습니다. 자세한 내용은 아카이브 저장소 계층 섹션을 참조하십시오.

이 매개 변수를 지정하지 않는 경우 해당 정책은 행을 보관하지 않고 삭제하는 만료 정책이 됩니다.

  • :code:`COOL`을 사용하려면 보관 기간(ARCHIVE_FOR_DAYS)을 90일 이상으로 설정하여 아카이브를 활성화해야 합니다.

  • :code:`COLD`를 사용하려면 보관 기간(ARCHIVE_FOR_DAYS)을 180일 이상으로 설정하여 아카이브를 활성화해야 합니다.

기본값: 값 없음

ARCHIVE_FOR_DAYS = number_of_days

아카이브 저장소에 정책 식과 일치하는 행을 보관할 일수를 지정합니다. 설정한 경우 Snowflake는 ARCHIVE_TIER에 대해 선택한 값에 따라 데이터를 아카이브 저장소로 이동합니다. 설정하지 않은 경우 Snowflake는 데이터를 보관하지 않고 테이블에서 행을 만료합니다.

값:

  • ARCHIVE_TIER = COOL: 90 - 2147483647

  • ARCHIVE_TIER = COLD: 180 - 2147483647

기본값: 설정 해제

COMMENT = 'string_literal'

저장소 수명 주기 정책에 대한 설명을 지정합니다.

기본값: 값 없음

TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )

태그 이름과 태그 문자열 값을 지정합니다.

태그 값은 항상 문자열이며, 태그 값의 최대 문자 수는 256자입니다.

문에서 태그를 지정하는 방법에 대한 자세한 내용은 Tag quotas 섹션을 참조하십시오.

액세스 제어 요구 사항

이 작업을 실행하는 데 사용되는 역할 에는 최소한 다음 권한 이 있어야 합니다.

권한

오브젝트

참고

CREATE STORAGE LIFECYCLE POLICY

스키마

없음

스키마의 모든 오브젝트에 대해 작업을 수행하려면 상위 데이터베이스 및 스키마에 대한 USAGE 권한. 스키마에 대한 특정 권한을 부여받은 역할은 해당 스키마를 확인할 수 있습니다. 예를 들어, 스키마에 대해 CREATE 권한을 부여받은 역할은 해당 스키마에 대한 USAGE 권한을 함께 부여받지 않더라도 해당 스키마에 대한 오브젝트를 생성할 수 있습니다.

지정된 권한 세트로 사용자 지정 역할을 만드는 방법에 대한 지침은 사용자 지정 역할 만들기 섹션을 참조하십시오.

보안 오브젝트 에 대해 SQL 작업을 수행하기 위한 역할과 권한 부여에 대한 일반적인 정보는 액세스 제어의 개요 섹션을 참조하십시오.

사용법 노트

  • OR REPLACE 및 IF NOT EXISTS 절은 상호 배타적입니다. 같은 문에서 둘 다 사용할 수는 없습니다.

  • CREATE OR REPLACE <오브젝트> 문은 원자성입니다. 즉, 오브젝트가 바뀔 때 단일 트랜잭션으로 이전 오브젝트가 삭제되고 새 오브젝트가 생성됩니다.

  • CREATE OR REPLACE <오브젝트> 문은 원자성입니다. 즉, 오브젝트가 바뀔 때 단일 트랜잭션으로 이전 오브젝트가 삭제되고 새 오브젝트가 생성됩니다.

    • OR REPLACE를 지정하고 정책이 오브젝트에 연결된 경우 명령이 실패합니다.

    • 이 명령에는 OR REPLACE``IF NOT EXISTS``를 함께 사용할 수 없습니다.

    • 기존 저장소 수명 주기 정책을 대체하고 정책의 현재 정의를 확인해야 하는 경우 GET_DDL 함수를 호출하거나 DESCRIBE STORAGE LIFECYCLE POLICY 명령을 실행합니다.

  • 정책 본문에 하나 이상의 :doc:`하위 쿼리</user-guide/querying-subqueries>`를 포함하면 오류가 발생할 수 있습니다. 가능하면 하위 쿼리 수를 제한하고 JOIN 작업 수를 제한하며 WHERE 절 조건을 단순화하십시오.

  • 정책이 테이블에 연결된 경우 정책 서명을 변경할 수 없습니다. 서명을 변경해야 하는 경우 DROP STORAGE LIFECYCLE POLICY 명령을 사용하고 새 정책을 만듭니다.

  • 메타데이터 관련:

    주의

    고객은 Snowflake 서비스를 사용할 때 개인 데이터(사용자 오브젝트 제외), 민감한 데이터, 수출 통제 대상 데이터 또는 기타 규제 데이터가 메타데이터로 입력되지 않도록 해야 합니다. 자세한 내용은 Snowflake의 메타데이터 필드 섹션을 참조하십시오.

다음 수명 주기 정책은 해지된 계정에 해당하고 60일 이상 지난 행의 데이터를 아카이브 저장소(COOL 계층)로 이동합니다.

CREATE STORAGE LIFECYCLE POLICY example_policy
  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 = 180;
Copy