ALTER DYNAMIC TABLE

동적 테이블 의 속성을 수정합니다.

참고 항목:

CREATE DYNAMIC TABLE, DESCRIBE DYNAMIC TABLE, DROP DYNAMIC TABLE, SHOW DYNAMIC TABLES

이 항목의 내용:

구문

ALTER DYNAMIC TABLE [ IF EXISTS ] <name> { SUSPEND | RESUME }

ALTER DYNAMIC TABLE [ IF EXISTS ] <name> RENAME TO <new_name>

ALTER DYNAMIC TABLE [ IF EXISTS ] <name> SWAP WITH <target_dynamic_table_name>

ALTER DYNAMIC TABLE [ IF EXISTS ] <name> REFRESH

ALTER DYNAMIC TABLE [ IF EXISTS ] <name> { clusteringAction }

ALTER DYNAMIC TABLE [ IF EXISTS ] <name> { tableColumnCommentAction }

ALTER DYNAMIC TABLE <name> { SET | UNSET } COMMENT = '<string_literal>'

ALTER DYNAMIC TABLE [ IF EXISTS ] <name> dataGovnPolicyTagAction

ALTER DYNAMIC TABLE [ IF EXISTS ] <name> searchOptimizationAction

ALTER DYNAMIC TABLE [ IF EXISTS ] <name> SET
  [ TARGET_LAG = { '<num> { seconds | minutes | hours | days }'  | DOWNSTREAM } ]
  [ WAREHOUSE = <warehouse_name> ]
  [ DATA_RETENTION_TIME_IN_DAYS = <integer> ]
  [ MAX_DATA_EXTENSION_TIME_IN_DAYS = <integer> ]
  [ DEFAULT_DDL_COLLATION = '<collation_specification>' ]

ALTER DYNAMIC TABLE [ IF EXISTS ] <name> UNSET
  [ DATA_RETENTION_TIME_IN_DAYS ],
  [ MAX_DATA_EXTENSION_TIME_IN_DAYS ],
  [ DEFAULT_DDL_COLLATION ]
Copy

여기서

clusteringAction ::=
  {
    CLUSTER BY ( <expr> [ , <expr> , ... ] )
    | { SUSPEND | RESUME } RECLUSTER
    | DROP CLUSTERING KEY
  }
Copy

자세한 내용은 클러스터링 키 및 클러스터링된 테이블 섹션을 참조하십시오.

tableCommentAction ::=
  {
    ALTER | MODIFY [ ( ]
                           [ COLUMN ] <col1_name> COMMENT '<string>'
                         , [ COLUMN ] <col1_name> UNSET COMMENT
                       [ , ... ]
                   [ ) ]
  }
Copy
dataGovnPolicyTagAction ::=
  {
      ADD ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , ... ] )
    | DROP ROW ACCESS POLICY <policy_name>
    | DROP ROW ACCESS POLICY <policy_name> ,
        ADD ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , ... ] )
    | DROP ALL ROW ACCESS POLICIES
  }
  |
  {
    { ALTER | MODIFY } [ COLUMN ] <col1_name>
        SET MASKING POLICY <policy_name>
          [ USING ( <col1_name> , <cond_col_1> , ... ) ] [ FORCE ]
      | UNSET MASKING POLICY
  }
  |
  { ALTER | MODIFY } [ COLUMN ] <col1_name> SET TAG
      <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]
      , [ COLUMN ] <col2_name> SET TAG
          <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]
  |
  { ALTER | MODIFY } [ COLUMN ] <col1_name> UNSET TAG <tag_name> [ , <tag_name> ... ]
                  , [ COLUMN ] <col2_name> UNSET TAG <tag_name> [ , <tag_name> ... ]
  }
  |
  {
      SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]
    | UNSET TAG <tag_name> [ , <tag_name> ... ]
  }
Copy
searchOptimizationAction ::=
  {
    ADD SEARCH OPTIMIZATION [
      ON <search_method_with_target> [ , <search_method_with_target> ... ]
        [ EQUALITY ]
      ]

    | DROP SEARCH OPTIMIZATION [
      ON { <search_method_with_target> | <column_name> | <expression_id> }
        [ EQUALITY ]
        [ , ... ]
      ]

    | SUSPEND SEARCH OPTIMIZATION [
       ON { <search_method_with_target> | <column_name> | <expression_id> }
          [ , ... ]
     ]

    | RESUME SEARCH OPTIMIZATION [
       ON { <search_method_with_target> | <column_name> | <expression_id> }
          [ , ... ]
     ]
  }
Copy

자세한 내용은 검색 최적화 작업(searchOptimizationAction) 섹션을 참조하십시오.

매개 변수

name

변경할 동적 테이블의 식별자입니다.

식별자에 공백이나 특수 문자가 포함된 경우 전체 문자열을 큰따옴표로 묶어야 합니다. 큰따옴표로 묶인 식별자도 대/소문자를 구분합니다.

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

SUSPEND | RESUME

동적 테이블에 대해 수행할 동작을 지정합니다.

  • SUSPEND 는 동적 테이블에서 새로 고침을 일시 중단합니다. 동적 테이블을 다른 동적 테이블에서 사용하는 경우에도 일시 중단됩니다.

  • RESUME 은 동적 테이블에서 새로 고침을 재개합니다. 재개 작업은 수동으로 일시 중단되지 않은 모든 다운스트림 동적 테이블로 순차적으로 넘어가며 진행됩니다.

RENAME TO new_name

스키마의 다른 어떤 동적 테이블에서도 현재 사용하지 않는 새 식별자로 지정된 동적 테이블의 이름을 바꿉니다.

동적 테이블의 이름을 바꾸려면 동적 테이블의 스키마에 대한 CREATE DYNAMIC TABLE 권한이 필요합니다.

동적 테이블을 다른 데이터베이스 및/또는 스키마로 이동하면서 선택적으로 동적 테이블의 이름을 변경할 수도 있습니다. 그러려면 각각 db_name.schema_name.new_name 또는 schema_name.new_name 형식으로 새 데이터베이스 및/또는 스키마 이름을 포함하는 정규화된 new_name 값을 지정하십시오.

다음과 같은 제한 사항이 적용됩니다.

  • 대상 데이터베이스 및/또는 스키마가 이미 있어야 합니다. 또한, 새 위치에 이름이 같은 오브젝트가 있으면 안 됩니다. 그렇지 않으면 문이 오류를 반환합니다.

  • 오브젝트 소유자(즉, 오브젝트에 대한 OWNERSHIP 권한이 있는 역할)가 대상 스키마도 소유하지 않는 한 오브젝트를 관리되는 액세스 스키마로 이동할 수 없습니다.

  • 오브젝트(테이블, 열 등)의 이름이 바뀌면 그 오브젝트를 참조하는 다른 오브젝트도 새 이름으로 업데이트해야 합니다.

SWAP WITH target_dynamic_table_name

단일 트랜잭션에서 두 개의 동적 테이블을 바꿉니다. 이 작업을 수행하는 데 사용되는 역할에는 두 동적 테이블 모두에 대한 OWNERSHIP 권한이 있어야 합니다.

다음과 같은 제한 사항이 적용됩니다.

  • 동적 테이블 간에는 다른 동적 테이블만 바꿀 수 있습니다.

REFRESH

동적 테이블을 수동으로 새로 고쳐야 한다고 지정합니다.

사용자가 일시 중단한 동적 테이블과 자동으로 일시 중단된 동적 테이블은 모두 수동으로 새로 고칠 수 있습니다. 수동으로 새로 고친 동적 테이블은 DYNAMIC_TABLE_REFRESH_HISTORY 함수에서 refresh_trigger 에 대한 출력으로 MANUAL을 반환합니다.

동적 테이블을 새로 고치면 동일한 데이터 타임스탬프를 기준으로 모든 업스트림 동적 테이블도 새로 고쳐집니다. 자세한 내용은 동적 테이블에 대한 웨어하우스 또는 목표 지연 변경하기 섹션을 참조하십시오.

동적 테이블 새로 고침 상태에 대한 자세한 내용은 DYNAMIC_TABLE_REFRESH_HISTORY 섹션을 참조하십시오.

SET ...

테이블에 대해 설정할 하나 이상의 속성/매개 변수를 지정합니다(공백, 쉼표 또는 새 줄로 구분).

TARGET_LAG = { num { seconds | minutes | hours | days } | DOWNSTREAM }

동적 테이블의 목표 지연을 지정합니다.

'num seconds | minutes | hours | days'

동적 테이블의 콘텐츠가 기본 테이블에 대한 업데이트보다 지연되어야 하는 최대 시간을 지정합니다.

예:

  • 동적 테이블의 데이터가 5분 이상 지연되면 안 될 경우 5 minutes 를 지정하십시오.

  • 동적 테이블의 데이터가 5시간 이상 지연되면 안 될 경우 5 hours 를 지정하십시오.

최소값은 1분입니다. 동적 테이블 A가 다른 동적 테이블 B에 종속된 경우 A의 최소 지연은 B의 지연보다 크거나 같아야 합니다.

DOWNSTREAM

해당 동적 테이블 아래에 있는 동적 테이블이 새로 고쳐질 경우 동적 테이블을 새로 고치도록 지정합니다.

WAREHOUSE = warehouse_name

동적 테이블을 새로 고치기 위한 컴퓨팅 리소스를 제공하는 웨어하우스의 이름을 지정합니다.

동적 테이블의 소유자 역할에는 이 웨어하우스에 대한 USAGE 권한이 있어야 합니다.

DATA_RETENTION_TIME_IN_DAYS = integer

Time Travel용 동적 테이블의 보존 기간을 수정하는 오브젝트 수준 매개 변수입니다. 자세한 내용은 Time Travel 이해 및 사용하기임시 및 일시적 테이블 관련 작업하기 섹션을 참조하십시오.

이 매개 변수에 대한 자세한 설명과 오브젝트 매개 변수에 대한 자세한 내용은 매개 변수 섹션을 참조하십시오.

값:

  • Standard Edition: 0 또는 1

  • Enterprise Edition:

    • 영구 동적 테이블의 경우 0 ~ 90

    • 일시적 동적 테이블의 경우 0 또는 1

참고

0 의 값은 동적 테이블의 Time Travel을 효과적으로 비활성화합니다.

MAX_DATA_EXTENSION_TIME_IN_DAYS = integer

Snowflake가 동적 테이블의 스트림이 부실해지는 것을 방지하기 위해 데이터 보존 기간을 연장할 수 있는 최대 일수를 지정하는 오브젝트 매개 변수입니다.

이 매개 변수에 대한 자세한 설명은 MAX_DATA_EXTENSION_TIME_IN_DAYS 섹션을 참조하십시오.

DEFAULT_DDL_COLLATION = 'collation_specification'

동적 테이블에 추가된 모든 새 열에 대한 기본 데이터 정렬 사양 을 지정합니다.

이 매개 변수를 설정해도 기존 열의 데이터 정렬 사양은 변경되지 않습니다.

자세한 내용은 DEFAULT_DDL_COLLATION 섹션을 참조하십시오.

UNSET ...

동적 테이블에 대해 설정 해제할 속성/매개 변수를 하나 이상 지정하여 다시 기본값으로 재설정합니다.

  • DATA_RETENTION_TIME_IN_DAYS

  • MAX_DATA_EXTENSION_TIME_IN_DAYS

  • DEFAULT_DDL_COLLATION

클러스터링 작업(clusteringAction)

CLUSTER BY ( expr [ , expr , ... ] )

하나 이상의 테이블 열 또는 열 식을 동적 테이블의 클러스터링 키로 지정(또는 수정)합니다. 자동 클러스터링으로 클러스터링을 유지 관리하는 열/식입니다. 동적 테이블에 대한 클러스터링 키를 지정하기 전에 마이크로 파티션을 이해해야 합니다. 자세한 내용은 Snowflake 테이블 구조 이해하기 섹션을 참조하십시오.

동적 테이블에 클러스터링 키를 사용할 때 다음 사항에 유의하십시오.

  • 열 정의가 필요하며 문에 명시적으로 이를 지정해야 합니다.

  • 클러스터링 키는 모든 테이블에 대해 의도되거나 권장되지 않으며, 일반적으로 매우 큰(예: 멀티 테라바이트 크기의) 테이블에 이점이 있습니다.

SUSPEND | RESUME RECLUSTER

동적 테이블에 대해 자동 클러스터링 을 활성화하거나 비활성화합니다.

DROP CLUSTERING KEY

동적 테이블에 대한 클러스터링 키를 삭제합니다.

클러스터링 키와 재클러스터링에 대한 자세한 내용은 Snowflake 테이블 구조 이해하기 를 참조하십시오.

테이블 설명 작업(tableCommentAction)

ALTER | MODIFY [ ( ] ` . [ COLUMN ] <col1_name> COMMENT '<string>' . , [ COLUMN ] <col1_name> UNSET COMMENT . [ , ... ] . [ ) ]

동적 테이블의 열에 대한 설명을 변경하거나 기존 설명을 덮어씁니다.

SET | UNSET COMMENT = '<string_literal>'

동적 테이블에 대한 설명을 추가하거나 기존 설명을 덮어씁니다.

데이터 거버넌스 정책 및 태그 작업(dataGovnPolicyTagAction)

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

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

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

문에서 태그를 지정하는 방법에 대한 자세한 내용은 오브젝트 및 열에 대한 태그 할당량 섹션을 참조하십시오.

policy_name

정책의 식별자로, 스키마에 고유한 식별자여야 합니다.

ADD ROW ACCESS POLICY policy_name ON (col_name [ , ... ])

동적 테이블에 행 액세스 정책을 추가합니다.

하나 이상의 열 이름을 지정해야 합니다. 각 열 이름을 구분하는 쉼표로 추가 열을 지정할 수 있습니다.

DROP ROW ACCESS POLICY policy_name

동적 테이블에서 행 액세스 정책을 삭제합니다.

DROP ROW ACCESS POLICY policy_name, ADD ROW ACCESS POLICY policy_name ON ( col_name [ , ... ] )

동적 테이블에 설정된 행 액세스 정책을 삭제하고 단일 SQL 문으로 동일한 동적 테이블에 행 액세스 정책을 추가합니다.

DROP ALL ROW ACCESS POLICIES

동적 테이블에서 모든 행 액세스 정책 연결을 삭제합니다.

{ ALTER | MODIFY } [ COLUMN ] ...
USING ( col_name , cond_col_1 ... )

조건부 마스킹 정책에 전달할 인자를 지정합니다.

목록의 첫 번째 열은 정책 조건에 따라 마스킹하거나 토큰화할 데이터를 지정하고 마스킹 정책이 적용되는 열과 일치해야 합니다.

추가 열은 첫 번째 열에서 선택할 때 쿼리 결과의 각 행에서 마스킹 또는 토큰화를 위해 평가할 데이터를 지정합니다.

USING 절을 생략하면 Snowflake는 조건부 마스킹 정책을 일반 마스킹 정책 으로 취급합니다.

FORCE

열에 현재 설정된 마스킹 또는 프로젝션 정책을 단일 문에서 다른 정책으로 바꿉니다.

마스킹 정책과 함께 FORCE 키워드를 사용하려면 열에 현재 설정된 마스킹 정책의 데이터 타입(즉, STRING)과 일치하도록 ALTER DYNAMICTABLE 문(즉, STRING)에 있는 정책의 데이터 타입 이 필요합니다.

마스킹 정책이 열에 현재 설정되어 있지 않으면 이 키워드를 지정해도 아무 효과가 없습니다.

자세한 내용은 열의 마스킹 정책 바꾸기 또는 프로젝션 정책 바꾸기 섹션을 참조하십시오.

검색 최적화 작업(searchOptimizationAction)

ADD SEARCH OPTIMIZATION

전체 동적 테이블에 대해, 또는 특정 열에 대해 선택적인 ON 절을 지정하는 경우 검색 최적화 를 추가합니다.

특히 테이블의 데이터가 자주 변경되는 경우 검색 최적화를 유지 관리하는 비용이 많이 들 수 있습니다. 자세한 내용은 검색 최적화 비용 추정 및 관리 섹션을 참조하십시오.

ON search_method_with_target [, search_method_with_target ... ]

(전체 동적 테이블이 아니라) 특정 열 또는 VARIANT 필드에 대한 검색 최적화를 구성하도록 지정합니다.

search_method_with_target 의 경우 다음 구문을 가진 식을 사용합니다.

<search_method>(<target> [, ...])
Copy

여기서

  • search_method 는 특정 유형의 조건자에 대한 쿼리를 최적화하는 다음 방법 중 하나를 지정합니다.

  • target 은 열, VARIANT 필드 또는 별표(*)를 지정합니다.

    search_method 의 값에 따라 다음 유형 중 하나의 열 또는 VARIANT 필드를 지정할 수 있습니다.

    • GEO: GEOGRAPHY 데이터 타입의 열입니다.

    • SUBSTRING: VARIANTs 의 필드 경로를 포함한 문자열 또는 VARIANT 데이터 타입의 열입니다. EQUALITY 항목에서 설명한 대로 필드 경로를 지정합니다. 중첩된 필드에 대한 검색도 같은 방식으로 개선되었습니다.

    • EQUALITY: VARIANT 열의 필드에 대한 경로를 포함한 숫자, 문자열, 이진 및 VARIANT 데이터 타입의 열입니다.

      VARIANT 필드를 지정하려면 점 또는 대괄호 표기법 을 사용하십시오. 예:

      • my_column:my_field_name.my_nested_field_name

      • my_column['my_field_name']['my_nested_field_name']

      콜론으로 구분된 필드 경로를 사용할 수도 있습니다. 예:

      • my_column:my_field_name:my_nested_field_name

      VARIANT 필드를 지정하면 해당 필드 아래의 모든 중첩 필드에 구성이 적용됩니다.

      예를 들어 ON EQUALITY(src:a.b) 를 지정할 경우 다음과 같습니다.

      • 이 구성으로 모든 중첩 필드(예: src:a.b.c, src:a.b.c.d 등)에서 쿼리 on src:a.b 를 개선할 수 있습니다.

      • 이 구성은 src:a.b 접두사(예: src:a, src:z 등)를 사용하는 쿼리에만 영향을 미칩니다.

테이블에서 적용 가능한 모든 열을 대상으로 지정하려면 별표(*)를 사용하십시오.

주어진 검색 방법에 대해 별표와 특정 열 이름을 모두 지정할 수는 없습니다. 하지만 다양한 검색 방법에서 별표를 지정할 수 있습니다.

예를 들어 다음 식을 지정할 수 있습니다.

ON SUBSTRING(*)
ON EQUALITY(*), SUBSTRING(*), GEO(*)
Copy

다음 식은 지정할 수 없습니다.

ON EQUALITY(*, c1)
ON EQUALITY(c1, *)
ON EQUALITY(v1:path, *)
ON EQUALITY(c1), EQUALITY(*)
Copy

한 대상에 둘 이상의 검색 방법을 지정하려면 쉼표를 사용하여 각 후속 방법과 대상을 구분하십시오.

ALTER DYNAMIC TABLE product ADD SEARCH OPTIMIZATION ON EQUALITY(c1), EQUALITY(c2, c3);
Copy

같은 테이블에서 ALTER DYNAMIC TABLE … ADD SEARCH OPTIMIZATION ON … 명령을 여러 번 실행하는 경우 각 후속 명령이 테이블의 기존 구성에 추가됩니다. 예를 들어 다음 명령을 실행한다고 가정하겠습니다.

ALTER DYNAMIC TABLE product ADD SEARCH OPTIMIZATION ON EQUALITY(c1, c2);
ALTER DYNAMIC TABLE product ADD SEARCH OPTIMIZATION ON EQUALITY(c3, c4);
Copy

그러면 c1, c2, c3, c4 열에 대한 같음 조건자가 테이블 구성에 추가됩니다. 이는 다음 명령을 실행하는 것과 같습니다.

ALTER DYNAMIC TABLE product ADD SEARCH OPTIMIZATION ON EQUALITY(c1, c2, c3, c4);
Copy

예는 특정 열의 검색 최적화 활성화하기 을 참조하십시오.

DROP SEARCH OPTIMIZATION

전체 동적 테이블에 대해, 또는 특정 열에서 선택적인 ON 절을 지정하는 경우 검색 최적화 를 제거합니다.

다음과 같은 제한 사항이 적용됩니다.

  • 동적 테이블에 검색 최적화 속성이 있는 경우 동적 테이블을 삭제했다가 삭제를 취소하면 검색 최적화 속성이 유지됩니다.

  • 동적 테이블에서 검색 최적화 속성을 제거한 다음 다시 추가하면 처음 추가할 때와 똑같은 비용이 발생합니다.

ON search_method_with_target | column_name | expression_id [, ... ]

(전체 동적 테이블에 대해 검색 최적화를 삭제하는 것이 아니라) 특정 열 또는 VARIANT 필드에 대한 검색 최적화 구성을 삭제하도록 지정합니다.

삭제할 열 구성을 식별하려면 다음 중 하나를 지정하십시오.

  • search_method_with_target 의 경우 열 또는 VARIANT 필드가 될 수 있는 하나 이상의 특정 대상에 대한 쿼리를 최적화하는 방법을 지정합니다. 앞서 설명한 구문 을 사용합니다.

  • column_name 의 경우 검색 최적화를 위해 구성된 열의 이름을 지정합니다. 열 이름을 지정하면 열에서 VARIANT 필드를 사용하는 식을 포함하여 해당 열에 대한 모든 식이 삭제됩니다.

  • expression_id 의 경우 DESCRIBE SEARCH OPTIMIZATION 명령의 출력에 나열된 식의 ID를 지정합니다.

항목 사이에 쉼표를 사용하여 대상, 열 이름, 식 ID로 검색 방법의 조합을 지정할 수 있습니다.

예는 특정 열의 검색 최적화 삭제하기 을 참조하십시오.

사용법 노트

  • 동적 테이블을 변경하려면 해당 동적 테이블에 대한 OPERATE 권한이 있는 역할을 사용해야 합니다. 일반 정보는 동적 테이블의 메타데이터 보기 권한 섹션을 참조하십시오.

  • 동적 테이블을 생성한 후에는 마스킹 정책을 변경할 수 없습니다.

  • 기존 동적 테이블을 업데이트하려는데 현재 정의를 확인해야 하는 경우 GET_DDL 함수를 호출하십시오.

  • ALTER TABLE 명령을 실행하면 동적 테이블에서 데이터 메트릭 함수를 사용할 수 있습니다. 자세한 내용은 데이터 메트릭 함수 작업 섹션을 참조하십시오.

  • IDENTIFIER() 를 사용하여 변경할 동적 테이블의 이름을 지정할 수 없습니다. 예를 들어 다음 문은 지원되지 않습니다.

    ALTER DYNAMIC TABLE IDENTIFIER(product) SUSPEND;
    
    Copy
  • 메타데이터 관련:

    주의

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

이름이 product 인 동적 테이블의 목표 지연 시간을 1시간으로 변경합니다.

ALTER DYNAMIC TABLE product SET
  TARGET_LAG = '1 hour';
Copy

이름이 product 인 동적 테이블에 대한 동적 테이블의 다운스트림 목표 지연을 지정합니다.

ALTER DYNAMIC TABLE product SET TARGET_LAG = DOWNSTREAM;
Copy

product 동적 테이블을 일시 중단합니다.

ALTER DYNAMIC TABLE product SUSPEND;
Copy

product 동적 테이블을 재개합니다.

ALTER DYNAMIC TABLE product RESUME;
Copy

product 동적 테이블의 이름을 바꿉니다.

ALTER DYNAMIC TABLE product RENAME TO updated_product;
Copy

product 동적 테이블을 new-product 로 바꿉니다.

ALTER DYNAMIC TABLE product SWAP WITH new_product;
Copy

테이블에 대한 클러스터링 키를 변경합니다.

ALTER DYNAMIC TABLE product CLUSTER BY (date);
Copy

테이블에서 클러스터링을 제거합니다.

ALTER DYNAMIC TABLE product DROP CLUSTERING KEY;
Copy