ALTER STAGE
ALTER STAGE
기존 이름 있는 내부 또는 외부 스테이지(stage)의 속성을 수정하는 명령이에요.
출처: 문서
본문
관련 명령: CREATE STAGE, DROP STAGE, SHOW STAGES, DESCRIBE STAGE
구문 (Syntax)
ALTER STAGE [ IF EXISTS ] <name> RENAME TO <new_name>
ALTER STAGE [ IF EXISTS ] <name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]
ALTER STAGE <name> UNSET TAG <tag_name> [ , <tag_name> ... ]
ALTER STAGE [ IF EXISTS ] <name> UNSET DCM PROJECT
-- Internal stage
ALTER STAGE [ IF EXISTS ] <name> SET
[ FILE_FORMAT = ( { FORMAT_NAME = '<file_format_name>' | TYPE = { CSV | JSON | AVRO | ORC | PARQUET | XML | CUSTOM } [ formatTypeOptions ] } ) ]
{ [ COMMENT = '<string_literal>' ] }
-- External stage
ALTER STAGE [ IF EXISTS ] <name> SET {
[ externalStageParams ]
[ FILE_FORMAT = ( { FORMAT_NAME = '<file_format_name>' | TYPE = { CSV | JSON | AVRO | ORC | PARQUET | XML | CUSTOM } [ formatTypeOptions ] } ) ]
[ COMMENT = '<string_literal>' ]
}
여기에서:
externalStageParams (for Amazon S3) ::=
URL = '<protocol>://<bucket>[/<path>/]'
[ AWS_ACCESS_POINT_ARN = '<string>' ]
[ { STORAGE_INTEGRATION = <integration_name> } | { CREDENTIALS = ( { { AWS_KEY_ID = '<string>' AWS_SECRET_KEY = '<string>' [ AWS_TOKEN = '<string>' ] } | AWS_ROLE = '<string>' } ) } ]
[ ENCRYPTION = ( [ TYPE = 'AWS_CSE' ] MASTER_KEY = '<string>'
| TYPE = 'AWS_SSE_S3'
| TYPE = 'AWS_SSE_KMS' [ KMS_KEY_ID = '<string>' ]
| TYPE = 'NONE' ) ]
[ USE_PRIVATELINK_ENDPOINT = { TRUE | FALSE } ]
externalStageParams (for Google Cloud Storage) ::=
[ URL = 'gcs://<bucket>[/<path>/]' ]
[ STORAGE_INTEGRATION = <integration_name> } ]
[ ENCRYPTION = ( TYPE = 'GCS_SSE_KMS' [ KMS_KEY_ID = '<string>' ]
| TYPE = 'NONE' ) ]
externalStageParams (for Microsoft Azure) ::=
[ URL = 'azure://<account>.blob.core.windows.net/<container>[/<path>/]' ]
[ { STORAGE_INTEGRATION = <integration_name> } | { CREDENTIALS = ( [ AZURE_SAS_TOKEN = '<string>' ] ) } ]
[ ENCRYPTION = ( TYPE = 'AZURE_CSE' [ MASTER_KEY = '<string>' ]
| TYPE = 'NONE' ) ]
[ USE_PRIVATELINK_ENDPOINT = { TRUE | FALSE } ]
formatTypeOptions ::=
-- If TYPE = CSV
COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
RECORD_DELIMITER = '<string>' | NONE
FIELD_DELIMITER = '<string>' | NONE
MULTI_LINE = TRUE | FALSE
FILE_EXTENSION = '<string>'
PARSE_HEADER = TRUE | FALSE
SKIP_HEADER = <integer>
SKIP_BLANK_LINES = TRUE | FALSE
DATE_FORMAT = '<string>' | AUTO
TIME_FORMAT = '<string>' | AUTO
TIMESTAMP_FORMAT = '<string>' | AUTO
BINARY_FORMAT = HEX | BASE64 | UTF8
ESCAPE = '<character>' | NONE
ESCAPE_UNENCLOSED_FIELD = '<character>' | NONE
TRIM_SPACE = TRUE | FALSE
FIELD_OPTIONALLY_ENCLOSED_BY = '<character>' | NONE
NULL_IF = ( '<string>' [ , '<string>' ... ] )
ERROR_ON_COLUMN_COUNT_MISMATCH = TRUE | FALSE
REPLACE_INVALID_CHARACTERS = TRUE | FALSE
EMPTY_FIELD_AS_NULL = TRUE | FALSE
SKIP_BYTE_ORDER_MARK = TRUE | FALSE
ENCODING = '<string>' | UTF8
-- If TYPE = JSON
COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
DATE_FORMAT = '<string>' | AUTO
TIME_FORMAT = '<string>' | AUTO
TIMESTAMP_FORMAT = '<string>' | AUTO
BINARY_FORMAT = HEX | BASE64 | UTF8
TRIM_SPACE = TRUE | FALSE
MULTI_LINE = TRUE | FALSE
NULL_IF = ( '<string>' [ , '<string>' ... ] )
FILE_EXTENSION = '<string>'
ENABLE_OCTAL = TRUE | FALSE
ALLOW_DUPLICATE = TRUE | FALSE
STRIP_OUTER_ARRAY = TRUE | FALSE
STRIP_NULL_VALUES = TRUE | FALSE
REPLACE_INVALID_CHARACTERS = TRUE | FALSE
IGNORE_UTF8_ERRORS = TRUE | FALSE
SKIP_BYTE_ORDER_MARK = TRUE | FALSE
-- If TYPE = AVRO
COMPRESSION = AUTO | GZIP | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
TRIM_SPACE = TRUE | FALSE
REPLACE_INVALID_CHARACTERS = TRUE | FALSE
NULL_IF = ( '<string>' [ , '<string>' ... ] )
-- If TYPE = ORC
TRIM_SPACE = TRUE | FALSE
REPLACE_INVALID_CHARACTERS = TRUE | FALSE
NULL_IF = ( '<string>' [ , '<string>' ... ] )
-- If TYPE = PARQUET
COMPRESSION = AUTO | LZO | SNAPPY | NONE
SNAPPY_COMPRESSION = TRUE | FALSE
BINARY_AS_TEXT = TRUE | FALSE
USE_LOGICAL_TYPE = TRUE | FALSE
TRIM_SPACE = TRUE | FALSE
USE_VECTORIZED_SCANNER = TRUE | FALSE
REPLACE_INVALID_CHARACTERS = TRUE | FALSE
NULL_IF = ( '<string>' [ , '<string>' ... ] )
-- If TYPE = XML
COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
IGNORE_UTF8_ERRORS = TRUE | FALSE
PRESERVE_SPACE = TRUE | FALSE
STRIP_OUTER_ELEMENT = TRUE | FALSE
DISABLE_AUTO_CONVERT = TRUE | FALSE
REPLACE_INVALID_CHARACTERS = TRUE | FALSE
SKIP_BYTE_ORDER_MARK = TRUE | FALSE
디렉터리 테이블 구문 (Directory table syntax)
ALTER STAGE [ IF EXISTS ] <name> SET DIRECTORY = ( { ENABLE = TRUE | FALSE } )
ALTER STAGE [ IF EXISTS ] <name> REFRESH [ SUBPATH = '<relative-path>' ]
파라미터 (Parameters)
*name*
수정할 스테이지의 식별자를 지정해요. 식별자에 공백이나 특수 문자가 포함되면 전체 문자열을 큰따옴표로 감싸야 해요. 큰따옴표로 감싼 식별자는 대소문자를 구분해요.
RENAME TO *new_name*
스테이지의 새 식별자를 지정해요. 스키마 내에서 고유해야 해요.
자세한 내용은 Identifier requirements를 참고하세요.
객체를 선택적으로 이름을 바꾸면서 다른 데이터베이스 및/또는 스키마로 이동할 수 있어요. 그러려면 새 데이터베이스 및/또는 스키마 이름을 포함한 정규화된 new_name 값을 각각 db_name.schema_name.object_name 또는 schema_name.object_name 형식으로 지정해요.
참고
-
대상 데이터베이스 및/또는 스키마는 이미 존재해야 해요. 또한 새 위치에 같은 이름의 객체가 이미 있으면 안 되며, 그렇지 않으면 문이 오류를 반환해요.
-
객체 소유자(즉 객체에 OWNERSHIP 권한이 있는 역할)가 대상 스키마도 소유하지 않는 한 관리 액세스 스키마로 객체를 이동하는 것은 금지돼요.
SET ...
스테이지에 대해 설정할 옵션/속성을 지정해요:
URL = ' ... ', STORAGE_INTEGRATION = ..., CREDENTIALS = ( ... ), ENCRYPTION = ( ... )
외부 스테이지의 클라우드별 URL, 스토리지 통합 또는 자격 증명 및/또는 암호화를 수정해요. 자세한 내용은 외부 스테이지 파라미터(이 문서의)를 참고하세요.
TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ]
태그(tag) 이름과 태그 문자열 값을 지정해요.
태그 값은 항상 문자열이고 태그 값의 최대 문자 수는 256이에요.
문에서 태그를 지정하는 방법에 대한 정보는 Tag quotas를 참고하세요.
COMMENT = '*string_literal*'
스테이지에 주석을 추가하거나 기존 주석을 덮어써요.
UNSET DCM PROJECT
스테이지를 현재 관리하는 DCM 프로젝트에서 분리해요. 이 명령은 스테이지를 삭제하지 않고 스테이지와 DCM 프로젝트 사이의 연관을 제거해요. 자세한 내용은 Detach objects from a DCM project를 참고하세요.
FILE_FORMAT = ( FORMAT_NAME = '*file_format_name*' ) 또는 FILE_FORMAT = ( TYPE = CSV | JSON | AVRO | ORC | PARQUET | XML | CUSTOM [ ... ] )
스테이지의 파일 형식을 수정해요. 다음 중 하나일 수 있어요:
FORMAT_NAME = *file_format_name*
스테이지에 사용할 기존 파일 형식 객체를 지정해요. 지정된 파일 형식 객체는 데이터 파일의 형식 유형(CSV, JSON 등)과 기타 형식 옵션을 결정해요.
문자열에 추가 형식 옵션이 지정되지 않는다는 점에 유의하세요. 대신 이름 있는 파일 형식 객체가 데이터 로드/언로드에 사용되는 다른 파일 형식 옵션을 정의해요. 자세한 내용은 CREATE FILE FORMAT을 참고하세요.
TYPE = CSV | JSON | AVRO | ORC | PARQUET | XML | CUSTOM [ ... ]
스테이지의 파일 형식 유형을 지정해요:
-
스테이지에서 데이터 로드(COPY INTO
)는 지원되는 모든 파일 형식 유형을 수용해요.
스테이지로 데이터 언로드(COPY INTO
)는 CSV, JSON 또는 PARQUET을 수용해요. 파일 형식 유형이 지정되면 추가 형식별 옵션을 수정할 수 있어요. 자세한 내용은 형식 유형 옵션(이 문서의)을 참고하세요.
CUSTOM형식 유형은 기본 스테이지가 비정형 데이터를 보유하고FILE_PROCESSOR복사 옵션으로만 사용할 수 있음을 지정해요.참고
FORMAT_NAME과TYPE은 상호 배타적이에요. 스테이지에 대해 둘 중 하나만 지정할 수 있어요.참고
CREATE STAGE, ALTER STAGE, CREATE TABLE, ALTER TABLE 명령으로 복사 옵션(copy options)을 지정하지 마세요. 복사 옵션을 지정하려면 COPY INTO
명령을 사용하는 것을 권장해요.
외부 스테이지 파라미터 (externalStageParams)
URL = '*cloud_specific_url*'— 스테이지에 URL이 없으면 내부 스테이지예요.경고
스테이지의
URL파라미터를 수정하면 스테이지에 의존하는 다음 객체의 기능이 깨질 수 있어요:-
데이터 로드를 트리거하기 위해 클라우드 메시징을 활용하는 파이프 객체(즉
AUTO_INGEST = TRUE). -
메타데이터 새로고침을 트리거하기 위해 클라우드 메시징을 활용하는 외부 테이블(즉
AUTO_REFRESH = TRUE).
Amazon S3
URL = '*protocol*://*bucket*[/*path*/]'로드/언로드용 데이터 파일을 저장하는 데 사용되는 외부 위치(기존 S3 버킷)의 URL을 수정해요. 여기서:
-
*protocol*은 다음 중 하나예요:-
s3는 중국 외부의 공용 AWS 리전의 S3 스토리지를 가리켜요. -
s3china는 중국의 공용 AWS 리전의 S3 스토리지를 가리켜요. -
s3gov는 정부 리전(government regions)의 S3 스토리지를 가리켜요.
스토리지 통합을 사용한 정부 리전의 클라우드 스토리지 접근은 같은 정부 리전에 호스팅된 Snowflake 계정으로 제한돼요.
마찬가지로 중국의 리전 클라우드 스토리지에 접근해야 한다면 같은 중국 리전에 호스팅된 Snowflake 계정에서만 스토리지 통합을 사용할 수 있어요.
이런 경우 인증 자격 증명을 제공하려면 스토리지 통합을 사용하는 대신 CREATE STAGE 명령의 CREDENTIALS 파라미터를 사용해요.
-
-
*bucket*은 S3 버킷의 이름 또는 S3 버킷 액세스 포인트의 버킷 스타일 별칭(bucket-style alias)이에요. S3 액세스 포인트의 경우AWS_ACCESS_POINT_ARN파라미터 값도 지정해야 해요. -
*path*는 파일 집합을 제한하는 클라우드 스토리지 위치의 파일에 대한 선택적인 대소문자 구분 경로(파일들은 공통 문자열로 시작하는 이름을 가짐)예요. 경로는 클라우드 스토리지 서비스에 따라 접두사(prefixes) 또는 *폴더(folders)*라고도 불려요.
AWS_ACCESS_POINT_ARN = 'string'S3 액세스 포인트의 Amazon resource name(ARN)을 지정해요. 스토리지
URL에 S3 액세스 포인트 별칭을 지정한 경우에만 필요해요.Google Cloud Storage
URL = 'gcs://*bucket*[/*path*/]'로드/언로드용 데이터 파일을 저장하는 데 사용되는 외부 위치(기존 GCS 버킷)의 URL을 수정해요. 여기서:
-
*bucket*은 GCS 버킷의 이름이에요. -
*path*는 로드할 파일 집합을 제한하는 클라우드 스토리지 위치의 파일에 대한 선택적인 대소문자 구분 경로(즉 공통 문자열로 시작하는 이름의 파일)예요. 경로는 클라우드 스토리지 서비스에 따라 접두사 또는 폴더라고도 불려요.
Microsoft Azure
URL = 'azure://*account*.blob.core.windows.net/*container*[/*path*/]'로드용 데이터 파일을 저장하는 데 사용되는 외부 위치(기존 Azure 컨테이너)의 URL을 수정해요. 여기서:
-
*account*는 Azure 계정의 이름(예:myaccount)이에요. Data Lake Storage Gen2를 포함한 지원되는 모든 유형의 Azure blob 스토리지 계정에 대해blob.core.windows.net엔드포인트를 사용해요. -
*container*는 Azure 컨테이너의 이름(예:mycontainer)이에요. -
*path*는 로드할 파일 집합을 제한하는 클라우드 스토리지 위치의 파일에 대한 선택적인 대소문자 구분 경로(즉 공통 문자열로 시작하는 이름의 파일)예요. 경로는 클라우드 스토리지 서비스에 따라 접두사 또는 폴더라고도 불려요.
STORAGE_INTEGRATION = *integration_name*또는CREDENTIALS = ( *cloud_specific_credentials* )— Amazon S3, Google Cloud Storage 또는 Microsoft Azure가 프라이빗일 때만 필요해요. 공용 버킷/컨테이너에는 필요하지 않아요.Amazon S3
STORAGE_INTEGRATION = *integration_name*외부 클라우드 스토리지에 대한 인증 책임을 Snowflake identity와 access management(IAM) 엔티티에 위임하는 데 사용되는 스토리지 통합의 이름을 지정해요. 자세한 내용은 CREATE STORAGE INTEGRATION을 참고하세요.
참고
스토리지 통합의 사용을 강력히 권장해요. 이 옵션은 스테이지를 만들거나 데이터를 로드할 때 CREDENTIALS 파라미터를 사용해 클라우드 스토리지 자격 증명을 제공할 필요를 없애줘요.
CREDENTIALS = ( AWS_KEY_ID = '*string*' AWS_SECRET_KEY = '*string*' [ AWS_TOKEN = '*string*' ] )또는CREDENTIALS = ( AWS_ROLE = '*string*' )AWS에 연결하고 로드/언로드할 파일이 스테이징된 프라이빗 S3 버킷에 접근하는 보안 자격 증명을 수정해요. 자세한 내용은 Configuring secure access to Amazon S3를 참고하세요.
지정하는 자격 증명은 버킷에 대한 Snowflake 접근 권한을 AWS IAM(Identity & Access Management) 사용자 또는 역할과 연결했는지 여부에 따라 달라져요:
-
IAM 사용자: IAM 자격 증명이 필요해요. 임시("scoped"라고도 함) 자격 증명은 AWS Security Token Service(STS)가 생성하며 다음 세 구성 요소로 구성돼요:
-
AWS_KEY_ID -
AWS_SECRET_KEY -
AWS_TOKEN
프라이빗 버킷에 접근하려면 세 가지 모두 필요해요. 지정된 기간 후 임시 자격 증명은 만료되어 더 이상 사용할 수 없어요. 그런 다음 유효한 새 임시 자격 증명 집합을 생성해야 해요.
중요
COPY 명령은 영구("장기"라고도 함) 자격 증명도 허용하지만, 보안상의 이유로 Snowflake는 이를 권장하지 않아요. 영구 자격 증명을 사용해야 한다면 외부 스테이지용으로 주기적으로 새 영구 자격 증명을 생성하는 것을 권장해요.
-
-
IAM 역할: 보안 자격 증명과 액세스 키를 생략하고, 대신
AWS_ROLE로 역할을 식별하고 AWS 역할 ARN(Amazon Resource Name)을 지정해요.중요
AWS IAM 역할을 사용해 프라이빗 S3 버킷에 접근해 데이터를 로드/언로드하는 기능은 이제 더 이상 사용되지 않아요(즉 향후 릴리스에서 지원이 제거될 예정). 이 기능을 사용하는 기존 S3 스테이지가 대신 스토리지 통합 객체를 참조하도록 수정하는 것을 강력히 권장해요. 지침은 Option 1: Configure a Snowflake storage integration to access Amazon S3을 참고하세요.
Google Cloud Storage
STORAGE_INTEGRATION = *integration_name*외부 클라우드 스토리지에 대한 인증 책임을 Snowflake identity와 access management(IAM) 엔티티에 위임하는 데 사용되는 스토리지 통합의 이름을 지정해요. 자세한 내용은 CREATE STORAGE INTEGRATION을 참고하세요.
Microsoft Azure
STORAGE_INTEGRATION = *integration_name*외부 클라우드 스토리지에 대한 인증 책임을 Snowflake identity와 access management(IAM) 엔티티에 위임하는 데 사용되는 스토리지 통합의 이름을 지정해요. 자세한 내용은 CREATE STORAGE INTEGRATION을 참고하세요.
참고
스토리지 통합의 사용을 강력히 권장해요. 이 옵션은 스테이지를 만들거나 데이터를 로드할 때 CREDENTIALS 파라미터를 사용해 클라우드 스토리지 자격 증명을 제공할 필요를 없애줘요.
CREDENTIALS = ( AZURE_SAS_TOKEN = '*string*' )Azure에 연결하고 로드된 데이터가 포함된 파일이 스테이징된 프라이빗 컨테이너에 접근하는 SAS(공유 액세스 서명) 토큰을 수정해요. 자격 증명은 Azure가 생성해요.
ENCRYPTION = ( *cloud_specific_encryption* )— 암호화된 파일에서 로드/암호화된 파일로 언로드할 때만 필요해요. 스토리지 위치와 파일이 암호화되어 있지 않으면 필요하지 않아요.데이터 로드:
스토리지 위치의 암호화된 파일을 해독하고 데이터를 추출하는 데 사용되는 암호화 설정을 수정해요.
데이터 언로드:
스토리지 위치로 언로드된 파일을 암호화하는 데 사용되는 암호화 설정을 수정해요.
Amazon S3
ENCRYPTION = ( [ TYPE = 'AWS_CSE' ] MASTER_KEY = '*string*' | TYPE = 'AWS_SSE_S3' | TYPE = 'AWS_SSE_KMS' [ KMS_KEY_ID = '*string*' ] | TYPE = 'NONE' )TYPE = ...사용되는 암호화 유형을 지정해요. 가능한 값은:
-
AWS_CSE: 클라이언트 측 암호화(MASTER_KEY값 필요). 현재 제공하는 클라이언트 측 마스터 키는 대칭 키만 될 수 있어요.MASTER_KEY값이 제공되면 Snowflake는TYPE = AWS_CSE라고 가정한다는 점에 유의하세요(즉MASTER_KEY값이 제공되면TYPE은 필요하지 않음). -
AWS_SSE_S3: 추가 암호화 설정이 필요 없는 서버 측 암호화. -
AWS_SSE_KMS: 선택적KMS_KEY_ID값을 받아들이는 서버 측 암호화.
암호화 유형에 대한 자세한 내용은 AWS 문서의 client-side encryption 또는 server-side encryption을 참고하세요.
NONE: 암호화 없음.
MASTER_KEY = '*string*'(AWS_CSE암호화에만 적용)버킷의 파일을 암호화하는 데 사용되는 클라이언트 측 마스터 키를 지정해요. 마스터 키는 Base64 인코딩 형태의 128비트 또는 256비트 키여야 해요.
KMS_KEY_ID = '*string*'(AWS_SSE_KMS암호화에만 적용)버킷으로 언로드된 파일을 암호화하는 데 사용되는 AWS KMS 관리 키의 ID를 선택적으로 지정해요. 값이 제공되지 않으면 기본 KMS 키 ID가 언로드 시 파일을 암호화하는 데 사용돼요.
이 값은 데이터 로드에는 무시된다는 점에 유의하세요.
기본값:
NONEGoogle Cloud Storage
ENCRYPTION = ( TYPE = 'GCS_SSE_KMS' [ KMS_KEY_ID = '*string*' ] | TYPE = 'NONE' )TYPE = ...사용되는 암호화 유형을 지정해요. 가능한 값은:
-
GCS_SSE_KMS: 선택적KMS_KEY_ID값을 받아들이는 서버 측 암호화.자세한 내용은 Google Cloud 문서를 참고하세요:
-
NONE: 암호화 없음.
KMS_KEY_ID = '*string*'(GCS_SSE_KMS암호화에만 적용)버킷으로 언로드된 파일을 암호화하는 데 사용되는 Cloud KMS 관리 키의 ID를 선택적으로 지정해요. 값이 제공되지 않으면 버킷에 설정된 기본 KMS 키 ID가 언로드 시 파일을 암호화하는 데 사용돼요.
이 값은 데이터 로드에는 무시된다는 점에 유의하세요. 서비스 계정이 버킷의 데이터를 해독할 충분한 권한이 있으면 로드 작업이 성공해야 해요.
기본값:
NONEMicrosoft Azure
ENCRYPTION = ( TYPE = 'AZURE_CSE' MASTER_KEY = '*string*' | TYPE = 'NONE' )TYPE = ...사용되는 암호화 유형을 지정해요. 가능한 값은:
-
AZURE_CSE: 클라이언트 측 암호화(MASTER_KEY 값 필요). 자세한 내용은 Microsoft Azure 문서의 Client-side encryption information을 참고하세요. -
NONE: 암호화 없음.
MASTER_KEY = '*string*'(AZURE_CSE 암호화에만 적용)파일을 암호화 또는 해독하는 데 사용되는 클라이언트 측 마스터 키를 지정해요. 마스터 키는 Base64 인코딩 형태의 128비트 또는 256비트 키여야 해요.
기본값:
NONEUSE_PRIVATELINK_ENDPOINT = { TRUE | FALSE }보안 상태를 강화하기 위해 외부 스테이지에 프라이빗 연결(private connectivity)을 사용할지 여부를 지정해요.
외부 스테이지가 스토리지 통합을 사용하고 그 통합이 프라이빗 연결용으로 구성된 경우 이 파라미터를 FALSE로 설정해요.
이 파라미터 사용에 대한 정보는 다음 중 하나를 참고하세요:
-
Private connectivity to external stages for Amazon Web Services
-
Private connectivity to external stages and Snowpipe automation for Microsoft Azure
디렉터리 테이블 파라미터
ENABLE = { TRUE | FALSE }스테이지에 디렉터리 테이블(directory table)을 추가할지 여부를 지정해요. 값이 TRUE이면 스테이지에 디렉터리 테이블이 추가돼요.
참고
S3 호환 외부 스테이지에서는 이 파라미터를 TRUE로 설정하는 것이 지원되지 않아요. S3 호환 외부 스테이지의 메타데이터는 자동으로 새로고침될 수 없어요.
기본값:
FALSEREFRESH디렉터리 테이블 정의에 참조된 스테이징된 데이터 파일에 접근해 테이블 메타데이터를 업데이트해요:
-
경로의 새 파일이 테이블 메타데이터에 추가돼요.
-
경로의 파일 변경이 테이블 메타데이터에 업데이트돼요.
-
더 이상 경로에 없는 파일이 테이블 메타데이터에서 제거돼요.
이 명령은 파일이 스테이지에 추가, 업데이트 또는 삭제될 때마다 실행할 수 있어요. 이 단계는 디렉터리 테이블의 스테이지 정의에서 관련 파일의 최신 집합으로 메타데이터를 동기화해요.
SUBPATH = '*relative-path*'데이터 파일의 특정 하위 집합에 대한 메타데이터를 새로고침하려면 상대 경로를 선택적으로 지정해요.
형식 유형 옵션 (formatTypeOptions)
지정된 파일 형식 유형(
FILE_FORMAT = ( TYPE = ... ))에 따라 다음 형식별 옵션 중 하나 이상을 포함할 수 있어요(공백, 쉼표 또는 새 줄로 구분):TYPE = CSV
COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE사용: 데이터 로드, 데이터 언로드, 외부 테이블
정의:
-
데이터 로드 시 데이터 파일의 현재 압축 알고리즘을 지정해요. Snowflake는 이 옵션을 사용해 이미 압축된 데이터 파일이 어떻게 압축되었는지 감지하여 파일의 압축 데이터가 로드를 위해 추출될 수 있게 해요.
-
데이터 언로드 시 지정된 압축 알고리즘으로 데이터 파일을 압축해요.
값:
Supported Values Notes AUTO 데이터 로드 시 Brotli 압축 파일을 제외하고 압축 알고리즘을 자동으로 감지해요(현재 Brotli 파일은 자동 감지 불가). 데이터 언로드 시 파일이 기본값인 gzip을 사용해 자동으로 압축돼요. GZIP BZ2 BROTLI Brotli 압축 파일을 로드/언로드할 때 지정해야 해요. ZSTD Zstandard v0.8(이상)이 지원돼요. DEFLATE Deflate 압축 파일(zlib 헤더 포함, RFC1950). RAW_DEFLATE Raw Deflate 압축 파일(헤더 없음, RFC1951). NONE 데이터 로드 시 파일이 압축되지 않았음을 나타내요. 데이터 언로드 시 언로드된 파일이 압축되지 않음을 지정해요. 기본값:
AUTORECORD_DELIMITER = 'string' | NONE사용: 데이터 로드, 데이터 언로드, 외부 테이블
정의: 입력 파일(데이터 로드) 또는 언로드된 파일(데이터 언로드)에서 레코드를 구분하는 단일바이트 또는 멀티바이트 문자 하나 이상. 일반적인 이스케이프 시퀀스 또는 다음 단일바이트/멀티바이트 문자를 받아들여요:
-
단일바이트 문자: 8진 값(
\\접두사) 또는 16진 값(0x또는\x접두사). 예를 들어 캐럿 액센트(^) 문자로 구분된 레코드의 경우 8진(\\136) 또는 16진(0x5e) 값을 지정해요. -
멀티바이트 문자: 16진 값(
\x접두사). 예를 들어 센트(¢) 문자로 구분된 레코드의 경우 16진(\xC2\xA2) 값을 지정해요.
RECORD_DELIMITER 또는 FIELD_DELIMITER의 구분자는 다른 파일 형식 옵션의 구분자의 하위 문자열일 수 없어요(예:
FIELD_DELIMITER = 'aa' RECORD_DELIMITER = 'aabb').지정된 구분자는 유효한 UTF-8 문자여야 하고 임의의 바이트 시퀀스가 아니어야 해요. 또한 구분자는 최대 20자로 제한된다는 점에 유의하세요.
NONE값을 받아들여요.기본값:
데이터 로드: 새 줄 문자. "새 줄"은 논리적이라서 Windows 플랫폼의 파일에서
\r\n이 새 줄로 이해된다는 점에 유의하세요.데이터 언로드: 새 줄 문자(
\n).FIELD_DELIMITER = 'string' | NONE사용: 데이터 로드, 데이터 언로드, 외부 테이블
정의: 입력 파일(데이터 로드) 또는 언로드된 파일(데이터 언로드)에서 필드를 구분하는 단일바이트 또는 멀티바이트 문자 하나 이상. 일반적인 이스케이프 시퀀스 또는 다음 단일바이트/멀티바이트 문자를 받아들여요:
-
단일바이트 문자: 8진 값(
\\접두사) 또는 16진 값(0x또는\x접두사). 예를 들어 캐럿 액센트(^) 문자로 구분된 레코드의 경우 8진(\\136) 또는 16진(0x5e) 값을 지정해요. -
멀티바이트 문자: 16진 값(
\x접두사). 예를 들어 센트(¢) 문자로 구분된 레코드의 경우 16진(\xC2\xA2) 값을 지정해요.
RECORD_DELIMITER 또는 FIELD_DELIMITER의 구분자는 다른 파일 형식 옵션의 구분자의 하위 문자열일 수 없어요(예:
FIELD_DELIMITER = 'aa' RECORD_DELIMITER = 'aabb').참고
비-ASCII 문자의 경우 결정적 동작을 얻으려면 16진 바이트 시퀀스 값을 사용해야 해요.
지정된 구분자는 유효한 UTF-8 문자여야 하고 임의의 바이트 시퀀스가 아니어야 해요. 또한 구분자는 최대 20자로 제한된다는 점에 유의하세요.
NONE값을 받아들여요.기본값: 쉼표(
,)MULTI_LINE = TRUE | FALSE사용: 데이터 로드 및 외부 테이블
정의: 여러 줄이 허용되는지 여부를 지정하는 Boolean이에요. MULTI_LINE이
FALSE로 설정되고 CSV 필드 내에 지정된 레코드 구분자가 있으면 해당 필드를 포함한 레코드가 오류로 해석돼요.기본값:
TRUE참고
RFC4180 사양을 따르는 큰 비압축 CSV 파일(128MB 초과)을 로드하는 경우, MULTI_LINE이
FALSE, COMPRESSION이NONE, ON_ERROR가ABORT_STATEMENT또는CONTINUE로 설정되면 Snowflake는 이러한 CSV 파일의 병렬 스캔을 지원해요.FILE_EXTENSION = 'string' | NONE사용: 데이터 언로드 전용
정의: 스테이지로 언로드된 파일의 확장자를 지정해요. 모든 확장자를 받아들여요. 원하는 소프트웨어나 서비스가 읽을 수 있는 파일 확장자를 지정하는 것은 사용자의 책임이에요.
기본값: null, 즉 파일 확장자가 형식 유형에 의해 결정됨:
.csv[compression]. 여기서compression은COMPRESSION이 설정된 경우 압축 방법이 추가한 확장자예요.참고
SINGLE복사 옵션이TRUE이면 COPY 명령은 기본적으로 파일 확장자 없이 파일을 언로드해요. 파일 확장자를 지정하려면internal_location또는external_location경로에 파일 이름과 확장자를 제공해요(예:copy into @stage/data.csv).PARSE_HEADER = TRUE | FALSE사용: 데이터 로드 전용
정의: 데이터 파일의 첫 번째 행 헤더를 사용해 열 이름을 결정할지 여부를 지정하는 Boolean이에요.
이 파일 형식 옵션은 다음 작업에만 적용돼요:
-
INFER_SCHEMA 함수를 사용한 열 정의 자동 감지.
-
INFER_SCHEMA 함수와 MATCH_BY_COLUMN_NAME 복사 옵션을 사용해 CSV 데이터를 별도 열로 로드.
옵션이 TRUE로 설정되면 첫 번째 행 헤더가 열 이름을 결정하는 데 사용돼요. 기본값 FALSE는
c*형태로 열 이름을 반환해요. 여기서*는 열의 위치예요.참고
-
이 옵션은 외부 테이블에서 지원되지 않아요.
-
PARSE_HEADER = TRUE를 설정하면 SKIP_HEADER 옵션은 지원되지 않아요.
기본값:
FALSESKIP_HEADER = integer사용: 데이터 로드 및 외부 테이블
정의: 파일 시작 부분에서 건너뛸 줄 수예요.
SKIP_HEADER는 RECORD_DELIMITER나 FIELD_DELIMITER 값을 사용해 헤더 줄이 무엇인지 결정하지 않는다는 점에 유의하세요. 대신 파일에서 지정된 수의 CRLF(캐리지 리턴, 줄 바꿈)로 구분된 줄을 단순히 건너뛰어요. 그 후 RECORD_DELIMITER와 FIELD_DELIMITER를 사용해 로드할 데이터 행을 결정해요.
기본값:
0SKIP_BLANK_LINES = TRUE | FALSE사용: 데이터 로드 및 외부 테이블
정의: 데이터 파일에서 만나는 빈 줄을 건너뛸지 지정하는 Boolean이에요. 그렇지 않으면 빈 줄은 레코드 끝 오류(기본 동작)를 일으켜요.
기본값:
FALSEDATE_FORMAT = 'string' | AUTO사용: 데이터 로드 및 언로드
정의: 데이터 파일(데이터 로드) 또는 테이블(데이터 언로드)의 날짜 값 형식을 정의해요. 값이 지정되지 않거나
AUTO이면 DATE_INPUT_FORMAT(데이터 로드) 또는 DATE_OUTPUT_FORMAT(데이터 언로드) 파라미터의 값이 사용돼요.기본값:
AUTOTIME_FORMAT = 'string' | AUTO사용: 데이터 로드 및 언로드
정의: 데이터 파일(데이터 로드) 또는 테이블(데이터 언로드)의 시간 값 형식을 정의해요. 값이 지정되지 않거나
AUTO이면 TIME_INPUT_FORMAT(데이터 로드) 또는 TIME_OUTPUT_FORMAT(데이터 언로드) 파라미터의 값이 사용돼요.기본값:
AUTOTIMESTAMP_FORMAT = string' | AUTO사용: 데이터 로드 및 언로드
정의: 데이터 파일(데이터 로드) 또는 테이블(데이터 언로드)의 타임스탬프 값 형식을 정의해요. 값이 지정되지 않거나
AUTO이면 TIMESTAMP_INPUT_FORMAT(데이터 로드) 또는 TIMESTAMP_OUTPUT_FORMAT(데이터 언로드) 파라미터의 값이 사용돼요.기본값:
AUTOBINARY_FORMAT = HEX | BASE64 | UTF8사용: 데이터 로드 및 언로드
정의: 이진 입력 또는 출력의 인코딩 형식을 정의해요. 테이블의 이진 열에 데이터를 로드하거나 그 열에서 데이터를 언로드할 때 이 옵션을 사용할 수 있어요.
기본값:
HEXESCAPE = 'character' | NONE사용: 데이터 로드 및 언로드
정의: 묶이거나(enclosed) 묶이지 않은(unenclosed) 필드 값의 이스케이프 문자로 사용되는 단일바이트 문자 문자열이에요. 이스케이프 문자는 문자 시퀀스의 후속 문자에 대한 대체 해석을 호출해요. ESCAPE 문자를 사용해 데이터에서
FIELD_OPTIONALLY_ENCLOSED_BY문자의 인스턴스를 리터럴로 해석할 수 있어요.일반적인 이스케이프 시퀀스, 8진 값 또는 16진 값을 받아들여요.
데이터 로드: 묶인 필드에 대한 이스케이프 문자만 지정해요.
FIELD_OPTIONALLY_ENCLOSED_BY를 설정해 필드를 묶는 데 사용되는 문자를 지정해요.참고
이 파일 형식 옵션은 단일바이트 문자만 지원해요. UTF-8 문자 인코딩은 높은 순서의 ASCII 문자를 멀티바이트 문자로 표현한다는 점에 유의하세요. 데이터 파일이 UTF-8 문자 집합으로 인코딩된 경우 높은 순서의 ASCII 문자를 옵션 값으로 지정할 수 없어요.
또한 높은 순서의 ASCII 문자를 지정하면 문자를 올바르게 해석하도록 데이터 파일의 문자 인코딩으로
ENCODING = 'string'파일 형식 옵션을 설정하는 것을 권장해요.데이터 언로드: 이 옵션이 설정되면
ESCAPE_UNENCLOSED_FIELD의 이스케이프 문자 집합을 재정의해요.기본값:
NONEESCAPE_UNENCLOSED_FIELD = 'character' | NONE사용: 데이터 로드, 데이터 언로드, 외부 테이블
정의: 묶이지 않은 필드 값에만 사용되는 이스케이프 문자로 사용되는 단일바이트 문자 문자열이에요. 이스케이프 문자는 문자 시퀀스의 후속 문자에 대한 대체 해석을 호출해요. ESCAPE 문자를 사용해 데이터에서
FIELD_DELIMITER또는RECORD_DELIMITER문자의 인스턴스를 리터럴로 해석할 수 있어요. 이스케이프 문자는 데이터에서 그 자신의 인스턴스를 이스케이프하는 데도 사용할 수 있어요.일반적인 이스케이프 시퀀스, 8진 값 또는 16진 값을 받아들여요.
데이터 로드: 묶이지 않은 필드에 대한 이스케이프 문자만 지정해요.
참고
-
기본값은
\\예요. 데이터 파일의 행이 백슬래시(\) 문자로 끝나면 이 문자가RECORD_DELIMITER파일 형식 옵션에 지정된 새 줄 또는 캐리지 리턴 문자를 이스케이프해요. 그 결과 로드 작업은 이 행과 다음 행을 단일 데이터 행으로 취급해요. 이 문제를 피하려면 값을NONE으로 설정해요. -
이 파일 형식 옵션은 단일바이트 문자만 지원해요. UTF-8 문자 인코딩은 높은 순서의 ASCII 문자를 멀티바이트 문자로 표현한다는 점에 유의하세요. 데이터 파일이 UTF-8 문자 집합으로 인코딩된 경우 높은 순서의 ASCII 문자를 옵션 값으로 지정할 수 없어요.
-
또한 높은 순서의 ASCII 문자를 지정하면 문자를 올바르게 해석하도록 데이터 파일의 문자 인코딩으로
ENCODING = 'string'파일 형식 옵션을 설정하는 것을 권장해요.
데이터 언로드:
ESCAPE가 설정되면 그 파일 형식 옵션의 이스케이프 문자 집합이 이 옵션을 재정의해요.기본값: 백슬래시(
\\)TRIM_SPACE = TRUE | FALSE사용: 데이터 로드 및 외부 테이블
정의: 필드에서 공백을 제거할지 여부를 지정하는 Boolean이에요.
예를 들어 외부 데이터베이스 소프트웨어가 필드를 따옴표로 묶지만 선행 공백을 삽입하면, Snowflake는 여는 따옴표 문자(즉 따옴표가 필드 데이터 문자열의 일부로 해석됨)가 아니라 선행 공백을 필드의 시작으로 읽어요. 데이터 로드 중 원하지 않는 공백을 제거하려면 이 옵션을
TRUE로 설정해요.또 다른 예로 문자열을 묶는 따옴표를 선행 또는 후행 공백이 둘러싸고 있으면, 이 옵션으로 둘러싸는 공백을 제거하고
FIELD_OPTIONALLY_ENCLOSED_BY옵션으로 따옴표 문자를 제거할 수 있어요. 따옴표 안의 공백은 보존된다는 점에 유의하세요. 예를 들어FIELD_DELIMITER = '|'이고FIELD_OPTIONALLY_ENCLOSED_BY = '"'라고 가정하면:|"Hello world"| /* loads as */ >Hello world< |" Hello world "| /* loads as */ > Hello world < | "Hello world" | /* loads as */ >Hello world<기본값:
FALSE나머지 CSV 고급 옵션(
NULL_IF), JSON, AVRO, ORC, PARQUET, XML 형식 옵션들의 동작도 각 형식에 대해 아래 규칙과 동일한 패턴을 따르며, 값은 위 구문 블록에 나열된 것과 같아요:-
JSON:
COMPRESSION,DATE_FORMAT,TIME_FORMAT,TIMESTAMP_FORMAT,BINARY_FORMAT(기본HEX),TRIM_SPACE(기본FALSE),MULTI_LINE(기본FALSE),NULL_IF,FILE_EXTENSION,ENABLE_OCTAL(기본FALSE),ALLOW_DUPLICATE(기본TRUE),STRIP_OUTER_ARRAY(기본FALSE),STRIP_NULL_VALUES(기본FALSE),REPLACE_INVALID_CHARACTERS(기본FALSE),IGNORE_UTF8_ERRORS(기본FALSE),SKIP_BYTE_ORDER_MARK(기본TRUE). -
AVRO:
COMPRESSION,TRIM_SPACE(기본FALSE),REPLACE_INVALID_CHARACTERS(기본FALSE),NULL_IF(기본\N). -
ORC:
TRIM_SPACE(기본FALSE),REPLACE_INVALID_CHARACTERS(기본FALSE),NULL_IF(기본\N). -
PARQUET:
COMPRESSION(기본AUTO),SNAPPY_COMPRESSION(기본TRUE, SNAPPY 사용 — deprecated),BINARY_AS_TEXT(기본TRUE),USE_LOGICAL_TYPE,TRIM_SPACE(기본FALSE),USE_VECTORIZED_SCANNER(기본FALSE),REPLACE_INVALID_CHARACTERS(기본FALSE),NULL_IF(기본\N).USE_VECTORIZED_SCANNER = TRUE는 Parquet 로드 지연을 크게 줄일 수 있으며,BINARY_AS_TEXT를FALSE로,USE_LOGICAL_TYPE을TRUE로 취급해요. -
XML:
COMPRESSION,IGNORE_UTF8_ERRORS(기본FALSE),PRESERVE_SPACE(기본FALSE),STRIP_OUTER_ELEMENT(기본FALSE),DISABLE_AUTO_CONVERT(기본FALSE),REPLACE_INVALID_CHARACTERS(기본FALSE),SKIP_BYTE_ORDER_MARK(기본TRUE).
NULL_IF = ( 'string1' [ , 'string2' , ... ] )— 데이터 로드 및 외부 테이블에 사용돼요. SQL NULL로 변환하는 데 사용되는 문자열을 정의해요. Snowflake는 데이터 로드 소스에서 이 문자열들을 SQL NULL로 대체해요. 둘 이상의 문자열을 지정하려면 문자열 목록을 괄호로 감싸고 각 값을 쉼표로 구분해요. 예:NULL_IF = ('\N', 'NULL', 'NUL', ''). 기본값은\N(즉 NULL)이에요.접근 제어 요구사항 (Access control requirements)
이 작업을 실행하는 역할은 최소한 다음 권한을 가져야 해요:
Privilege Object Notes OWNERSHIP Stage ALTER STAGE … SET DIRECTORY로 스테이지 속성을 수정하고 스테이지에서 디렉터리 테이블을 활성화/비활성화하려면 필요해요. OWNERSHIP은 객체를 만든 역할에 자동으로 부여되는 특수 권한이지만, GRANT OWNERSHIP 명령으로 소유 역할(또는 MANAGE GRANTS 권한이 있는 역할)이 다른 역할에 이전할 수도 있어요. WRITE Stage ALTER STAGE … REFRESH로 메타데이터를 새로고침하려면 필요해요. 스키마의 객체를 작업하려면 상위 데이터베이스에 최소한 하나의 권한과 상위 스키마에 최소한 하나의 권한이 필요해요.
사용 참고사항 (Usage notes)
-
S3 액세스 포인트를 사용하는 외부 스테이지의 경우:
-
스토리지 통합을 사용한다면 통합의 IAM 정책이 S3 액세스 포인트에 권한을 부여하도록 구성해야 해요. 자세한 내용은 Option 1: Configure a Snowflake storage integration to access Amazon S3을 참고하세요.
-
다중 리전 액세스 포인트는 지원되지 않아요.
-
-
메타데이터에 관해: 고객은 Snowflake 서비스를 사용할 때 메타데이터로 개인 데이터(User 객체 외), 민감 데이터, 수출 통제 데이터 또는 기타 규제 데이터를 입력하지 않도록 해야 해요. 자세한 내용은 Metadata fields in Snowflake를 참고하세요.
예제 (Examples)
my_int_stage를new_int_stage로 이름을 바꾸는 예제예요:ALTER STAGE my_int_stage RENAME TO new_int_stage;CREATE STAGE 예제에서 만든
my_ext_stage를 수정해 URL이files폴더의new라는 하위 폴더를 참조하도록 변경하는 예제예요. 이 스테이지를 참조하는 COPY INTO명령이 어떤 레코드에서 데이터 오류를 만나면 해당 파일을 건너뛰어요. 다른 모든 복사 옵션은 기본값으로 설정돼요.
S3 버킷이 중국의 리전에 있으면 URL 파라미터에
s3china://프로토콜을 사용해요.ALTER STAGE my_ext_stage SET URL='s3://loading/files/new/' COPY_OPTIONS = (ON_ERROR='skip_file');my_ext_stage를 수정해 제공된 자격 증명을myint라는 스토리지 통합에 대한 참조로 교체하는 예제예요:ALTER STAGE my_ext_stage SET STORAGE_INTEGRATION = myint;my_ext_stage를 수정해 스테이지에 새 액세스 키 ID와 시크릿 액세스 키를 지정하는 예제예요:ALTER STAGE my_ext_stage SET CREDENTIALS=(AWS_KEY_ID='d4c3b2a1' AWS_SECRET_KEY='z9y8x7w6');(위 예제에 사용된 자격 증명 값은 설명 목적으로만 사용됨)
my_ext_stage3를 수정해 스테이지의 암호화 유형을AWS_SSE_S3서버 측 암호화로 변경하는 예제예요:ALTER STAGE my_ext_stage3 SET ENCRYPTION=(TYPE='AWS_SSE_S3');디렉터리 테이블 예제
mystage라는 기존 스테이지에 디렉터리 테이블을 추가하는 예제예요:ALTER STAGE mystage SET DIRECTORY = ( ENABLE = TRUE );mystage라는 스테이지에서 디렉터리 테이블 메타데이터를 수동으로 새로고침하는 예제예요:ALTER STAGE mystage REFRESH; +-------------------------+----------------+-------------------------------+ | file | status | description | |-------------------------+----------------+-------------------------------| | data/json/myfile.json | REGISTERED_NEW | File registered successfully. | +-------------------------+----------------+-------------------------------+mystage라는 스테이지의data경로에 있는 파일에 대한 디렉터리 테이블 메타데이터를 수동으로 새로고침하는 예제예요:ALTER STAGE mystage REFRESH SUBPATH = 'data';더 알아보기 (Learn more)