외부 테이블 소개

외부 테이블은 데이터가 Snowflake의 테이블 내부에 있는 것처럼 외부 스테이지 에 저장된 데이터를 쿼리할 수 있는 Snowflake 기능입니다. 외부 스테이지는 Snowflake의 기능이 아니므로 Snowflake에서 스테이지를 저장하거나 관리하지 않습니다.

외부 테이블을 사용하면 파일 이름, 버전 식별자, 관련 속성을 비롯한 특정 파일 수준 메타데이터를 (Snowflake 내에) 저장할 수 있습니다. 외부 테이블은 COPY INTO <테이블> 명령에서 지원하는 임의의 형식으로 저장된 데이터에 액세스할 수 있습니다.

외부 테이블은 읽기 전용입니다. 외부 테이블에서는 DML(데이터 조작 언어) 작업을 수행할 수 없습니다. 그러나 쿼리 및 조인 작업에 외부 테이블을 사용할 수 있습니다. 외부 테이블에 대한 뷰를 생성할 수도 있습니다.

외부 테이블의 데이터를 쿼리하는 것은 Snowflake 내의 테이블에 기본적으로 저장한 데이터를 쿼리하는 것보다 느릴 수 있습니다. 쿼리 성능을 개선하기 위해 외부 테이블을 기반으로 하는 구체화된 뷰 를 사용할 수 있습니다.

참고

Snowflake가 쿼리 작업 중 클라우드 저장소의 파일을 스캔하는 동안 오류가 발생하면 파일을 건너뛰고 다음 파일에서 스캔을 계속합니다. 쿼리는 파일을 부분적으로 스캔하고 오류가 발생하기 전에 스캔한 행을 반환할 수 있습니다.

이 항목의 내용:

외부 테이블의 스키마 계획하기

이 섹션에서는 외부 테이블을 설계하기 위해 사용할 수 있는 옵션에 대해 설명합니다.

읽기의 스키마

모든 외부 테이블에 포함되는 열은 다음과 같습니다.

VALUE

외부 파일의 단일 행을 나타내는 VARIANT 타입의 열입니다.

METADATA$FILENAME

스테이지의 경로를 포함하여, 외부 테이블에 포함된 각 스테이징된 데이터 파일의 이름을 식별하는 의사 열입니다.

METADATA$FILE_ROW_NUMBER

스테이징된 데이터 파일에 있는 각 레코드의 행 번호를 표시하는 의사 열입니다.

외부 테이블을 생성하려면 소스 데이터 파일의 파일 형식과 레코드 형식에 대한 약간의 지식만 있으면 됩니다. 데이터 파일의 스키마를 알 필요는 없습니다.

SELECT * 는 항상 모든 일반 데이터 또는 반정형 데이터가 베리언트 행으로 캐스팅되는 VALUE 열을 반환합니다.

가상 열

소스 데이터 파일의 스키마에 익숙하다면 VALUE 열 및/또는 METADATA$FILENAME 또는 METADATA$FILE_ROW_NUMBER 의사 열을 사용하여 추가 가상 열을 식으로 생성할 수 있습니다. 외부 데이터를 스캔할 때 데이터 파일의 지정된 필드 또는 반정형 데이터 요소의 데이터 타입은 외부 테이블에 있는 이러한 추가 열의 데이터 타입과 일치해야 합니다. 이를 통해 외부 데이터에 대한 강력한 타입 검사 및 스키마 유효성 검사가 가능합니다.

일반 파일 크기 조정 권장 사항

외부 테이블을 쿼리할 때 병렬 스캔 작업의 수를 최적화하려면 다음과 같은 형식당 파일 또는 행 그룹 크기가 권장됩니다.

형식

권장 크기 범위

참고

Parquet 파일

256 - 512 MB

Parquet 행 그룹

16 - 256 MB

Parquet 파일에 여러 개의 행 그룹이 포함된 경우 Snowflake는 다른 서버의 각 행 그룹에서 작동할 수 있습니다. 쿼리 성능을 향상하려면 Parquet 파일의 크기를 권장 범위 내에서 조정하는 것이 좋습니다. 또는 각 파일에 여러 개의 행 그룹을 포함하여 큰 파일 크기가 필요한 경우에도 그렇게 하는 것이 좋습니다.

지원되는 기타 모든 파일 형식

16 - 256 MB

대용량 데이터 파일을 쿼리할 때 최적의 성능을 위해서는 외부 테이블에 대한 구체화된 뷰 를 생성하여 쿼리합니다.

분할된 외부 테이블

경로에 날짜, 시간, 국가 또는 유사한 차원이 포함된 논리적 경로를 사용하여 기본 데이터를 구성해야 하는 외부 테이블을 분할하는 것이 매우 좋습니다. 파티셔닝은 파티션 열을 사용하여 외부 테이블 데이터를 여러 부분으로 나눕니다.

외부 테이블 정의에는 외부 데이터에 다차원 구조를 부과하는 여러 파티션 열이 포함될 수 있습니다. 파티션은 외부 테이블 메타데이터에 저장됩니다.

파티셔닝의 이점에는 향상된 쿼리 성능이 포함됩니다. 외부 데이터가 별도의 조각/부분으로 분할되기 때문에 전체 데이터 세트를 스캔하는 대신 데이터의 작은 부분을 처리할 때 쿼리 응답 시간이 더 빠릅니다.

개별 사용 사례를 기반으로, 다음 중 하나 를 수행할 수 있습니다.

  • 각 파티션 열의 식을 정의하는 외부 테이블을 새로 고쳐 새 파티션을 자동으로 추가합니다.

  • 수동으로 새 파티션을 추가합니다.

외부 테이블이 생성될 때 CREATE EXTERNAL TABLE … PARTITION BY 구문을 사용하여 파티션 열이 정의됩니다. 외부 테이블이 생성된 후에는 파티션을 추가하는 방법을 변경할 수 없습니다.

다음 섹션에서는 파티션을 추가하는 다양한 옵션을 더 자세히 설명합니다. 예는 CREATE EXTERNAL TABLE 을 참조하십시오.

자동으로 추가된 파티션

외부 테이블 작성자는 새 외부 테이블의 파티션 열을 METADATA$FILENAME 의사 열에 저장된 경로 및/또는 파일 이름 정보를 구문 분석하는 식으로 정의합니다. 파티션은 파티션 열에 대한 식의 경로 및/또는 파일 이름과 일치하는 모든 데이터 파일로 구성됩니다.

식을 기반으로 파티션을 자동으로 추가하는 CREATE EXTERNAL TABLE 구문은 다음과 같습니다.

CREATE EXTERNAL TABLE
  <table_name>
     ( <part_col_name> <col_type> AS <part_expr> )
     [ , ... ]
  [ PARTITION BY ( <part_col_name> [, <part_col_name> ... ] ) ]
  ..
Copy

Snowflake는 외부 테이블 메타데이터를 새로 고칠 때 정의된 파티션 열 식을 기반으로 파티션을 계산하고 추가합니다. 기본적으로, 오브젝트가 생성될 때 메타데이터를 자동으로 새로 고칩니다. 그 밖에도, 오브젝트 소유자는 외부 스테이지에서 새 데이터 파일이나 업데이트된 데이터 파일을 사용할 수 있을 때 자동으로 새로 고치도록 메타데이터를 구성할 수 있습니다. 또는 소유자는 ALTER EXTERNAL TABLE … REFRESH 명령을 실행하여 수동으로 메타데이터를 새로 고칠 수 있습니다.

수동으로 추가된 파티션

외부 테이블 작성자는 새 외부 테이블의 파티션 유형을 사용자 정의 로 결정하고 파티션 열의 데이터 타입만 지정합니다. 식과 일치하는 외부 저장소 위치에 있는 모든 새 파일의 파티션을 자동으로 추가하기보다는 파티션을 선택적으로 추가 및 제거하고 싶을 때 이 옵션을 사용합니다.

일반적으로 외부 테이블을 다른 메타스토어(예: AWS Glue 또는 Apache Hive)와 동기화하기 위해 이 옵션이 선택됩니다.

수동으로 추가된 파티션에 대한 CREATE EXTERNAL TABLE 구문은 다음과 같습니다.

CREATE EXTERNAL TABLE
  <table_name>
     ( <part_col_name> <col_type> AS <part_expr> )
     [ , ... ]
  [ PARTITION BY ( <part_col_name> [, <part_col_name> ... ] ) ]
  PARTITION_TYPE = USER_SPECIFIED
  ..
Copy

필수 PARTITION_TYPE = USER_SPECIFIED 매개 변수를 포함합니다.

파티션 열 정의는 내부(숨겨진) METADATA$EXTERNAL_TABLE_PARTITION 열의 열 메타데이터를 구문 분석하는 식입니다.

오브젝트 소유자는 ALTER EXTERNAL TABLE … ADD PARTITION 명령을 실행하여 외부 테이블 메타데이터에 파티션을 수동으로 추가합니다.

ALTER EXTERNAL TABLE <name> ADD PARTITION ( <part_col_name> = '<string>' [ , <part_col_name> = '<string>' ] ) LOCATION '<path>'
Copy

사용자 정의 파티션으로 외부 테이블을 자동으로 새로 고치는 기능은 지원되지 않습니다. 이 유형의 외부 테이블을 수동으로 새로 고치려고 하면 사용자 오류가 발생합니다.

Delta Lake 지원

Delta Lake 는 다른 기능 중에서도 ACID(원자성, 일관성, 격리, 영속성) 트랜잭션을 지원하는 데이터 레이크의 테이블 형식입니다. Delta Lake의 모든 데이터는 Apache Parquet 형식으로 저장됩니다. Delta Lake로 향상된 클라우드 저장소 위치를 참조하는 외부 테이블을 생성합니다.

Delta Lake를 참조하는 외부 테이블을 만들려면 CREATE EXTERNAL TABLE 문에서 TABLE_FORMAT = DELTA 매개 변수를 설정하십시오.

이 매개 변수가 설정되면 외부 테이블은 [ WITH ] LOCATION 위치에서 Delta Lake 트랜잭션 로그 파일을 검색합니다. 델타 로그 파일에는 _delta_log/00000000000000000000.json, _delta_log/00000000000000000010.checkpoint.parquet 등과 같은 이름이 있습니다. 외부 테이블에 대한 메타데이터가 새로 고쳐지면 Snowflake는 Delta Lake 트랜잭션 로그를 구문 분석하고 어떤 Parquet 파일이 최신인지 확인합니다. 백그라운드에서 새로 고침은 파일 추가 및 제거 작업을 수행하여 외부 테이블 메타데이터를 동기화 상태로 유지합니다.

클라우드 저장소에서 DDL 작업에 의해 트리거되는 이벤트 알림의 순서는 보장되지 않습니다. 따라서 Delta Lake 파일을 참조하는 외부 테이블에는 메타데이터를 자동으로 새로 고치는 기능을 사용할 수 없습니다. 대신, 추가되거나 제거된 파일을 등록하려면 ALTER EXTERNAL TABLE … REFRESH 문을 주기적으로 실행하십시오.

예를 포함한 자세한 내용은 CREATE EXTERNAL TABLE 을 참조하십시오.

열 추가 또는 삭제하기

다음 ALTER TABLE 구문을 사용하여 기존 외부 테이블을 변경하여 열을 추가하거나 제거합니다.

  • 열 추가: ALTER TABLE … ADD COLUMN.

  • 열 제거: ALTER TABLE … DROP COLUMN.

참고

기본 VALUE 열과 METADATA$FILENAME 및 METADATA$FILE_ROW_NUMBER 의사 열은 삭제할 수 없습니다.

ALTER TABLE 의 예를 참조하십시오.

외부 테이블 보호하기

마스킹 정책과 행 액세스 정책을 사용하여 외부 테이블을 보호할 수 있습니다. 자세한 내용은 다음을 참조하십시오.

외부 테이블의 구체화된 뷰

많은 경우 외부 테이블에 대한 구체화된 뷰 는 기본 외부 테이블에 대한 동등한 쿼리보다 빠른 성능을 제공할 수 있습니다. 이러한 성능 차이는 쿼리가 자주 실행되거나 충분히 복잡한 경우에 중요할 수 있습니다.

구체화된 뷰가 참조된 클라우드 저장소 위치에 있는 현재 파일 세트를 반영하도록 쿼리된 모든 외부 테이블에서 파일 수준 메타데이터를 새로 고칩니다.

클라우드 저장소 서비스에 대한 이벤트 알림 서비스를 사용하여 자동으로 또는 ALTER EXTERNAL TABLE … REFRESH 문을 사용하여 수동으로 외부 테이블의 메타데이터를 새로 고칠 수 있습니다.

외부 테이블 메타데이터 자동 새로 고치기

클라우드 저장소 서비스에 대해 이벤트 알림 서비스를 사용하여 외부 테이블에 대한 메타데이터를 자동으로 새로 고칠 수 있습니다.

새로 고침 작업은 외부 스테이지 및 경로에 있는 최신 관련 파일 세트과 메타데이터를 동기화합니다. 즉,

  • 경로의 새 파일이 테이블 메타데이터에 추가됩니다.

  • 경로의 파일에 대한 변경 사항은 테이블 메타데이터에서 업데이트됩니다.

  • 경로에 더 이상 없는 파일은 테이블 메타데이터에서 제거됩니다.

자세한 내용은 자동으로 외부 테이블 새로 고치기 섹션을 참조하십시오.

외부 테이블에 대한 청구

외부 테이블 메타데이터의 자동 새로 고침에 대한 이벤트 알림을 관리하는 오버헤드가 요금에 포함됩니다. 이 오버헤드는 외부 테이블에 대해 지정된 외부 스테이지 및 경로에 대해 클라우드 저장소에 추가된 파일 수와 관련하여 증가합니다. Snowpipe는 자동 외부 테이블 새로 고침을 위한 이벤트 알림에 사용되므로 이 간접비는 청구서에 Snowpipe 요금으로 나타납니다. PIPE_USAGE_HISTORY 함수를 쿼리하거나 Account Usage PIPE_USAGE_HISTORY 뷰 를 검사하여 이 요금을 추정할 수 있습니다.

또한 외부 테이블 메타데이터(ALTER EXTERNAL TABLE … REFRESH 사용)를 수동으로 새로 고치는 데 약간의 유지 관리 오버헤드가 부과됩니다. 이 오버헤드는 Snowflake의 모든 유사한 활동과 마찬가지로 표준 클라우드 서비스 청구 모델 에 따라 청구됩니다. 표준 외부 테이블의 수동 새로 고침은 클라우드 서비스 작업에만 해당하지만, Delta Lake로 강화된 외부 테이블의 수동 새로 고침에서는 사용자 관리형 컴퓨팅 리소스(예: 가상 웨어하우스)가 사용됩니다.

ACCOUNTADMIN 역할의 사용자 또는 전역 MONITOR USAGE 권한이 있는 역할은 AUTO_REFRESH_REGISTRATION_HISTORY 테이블 함수를 쿼리하여 지정된 오브젝트의 메타데이터에 등록된 데이터 파일의 기록과 이러한 작업에 대해 청구된 크레딧을 검색할 수 있습니다.

워크플로

Amazon S3

이 섹션에서는 Amazon S3 스테이지를 참조하는 외부 테이블의 설정 및 로드 워크플로에 대한 높은 수준의 개요를 제공합니다. 전체 지침은 Amazon S3에 대해 자동으로 외부 테이블 새로 고치기 를 참조하십시오.

  1. 데이터 파일이 스테이징 외부 위치(즉, S3 버킷)를 참조하는 명명된 스테이지 오브젝트를 생성합니다(CREATE STAGE 사용).

  2. 명명된 스테이지를 참조하는 외부 테이블을 생성합니다(CREATE EXTERNAL TABLE 사용).

  3. ALTER EXTERNAL TABLE … REFRESH를 사용하여 외부 테이블 메타데이터를 수동으로 새로 고쳐 메타데이터를 스테이지 경로의 현재 파일 목록과 동기화합니다. 이 단계에서는 외부 테이블 정의에 대한 설정도 확인합니다.

  4. S3 버킷에 대한 이벤트 알림을 구성합니다. Snowflake는 이벤트 알림을 활용하여 외부 테이블 메타데이터를 지속적으로 새로 고쳐 스테이징된 파일과의 일관성을 유지합니다.

  5. ALTER EXTERNAL TABLE … REFRESH를 사용하여 외부 테이블 메타데이터를 수동으로 한 번 더 새로 고쳐 메타데이터를 3단계 이후 수행된 변경 사항과 동기화합니다. 그 후 S3 이벤트 알림은 메타데이터 새로 고침을 자동으로 트리거합니다.

  6. 추가 역할에 대해 Snowflake 액세스 제어 권한을 구성하여 외부 테이블에 대한 쿼리 액세스 권한을 부여합니다.

Google Cloud Storage

이 섹션에서는 Google Cloud Storage(GCS) 스테이지를 참조하는 외부 테이블의 설정 및 로드 워크플로에 대한 높은 수준의 개요를 제공합니다.

  1. GCS 이벤트에 대한 Google Pub/Sub 구독을 구성합니다.

  2. Snowflake에서 알림 통합을 생성합니다. 알림 통합은 Snowflake와 서드 파티 클라우드 메시지 큐 서비스(예: Pub/Sub) 간의 인터페이스를 제공하는 Snowflake 오브젝트입니다.

  3. 데이터 파일이 스테이징 외부 위치(즉, GCS 버킷)를 참조하는 명명된 스테이지 오브젝트를 생성합니다(CREATE STAGE 사용).

  4. 명명된 스테이지 및 통합을 참조하는 외부 테이블을 생성합니다(CREATE EXTERNAL TABLE 사용).

  5. ALTER EXTERNAL TABLE … REFRESH를 사용하여 외부 테이블 메타데이터를 수동으로 한 번 새로 고쳐 4단계 이후 발생한 변경 사항과 메타데이터를 동기화합니다. 그 후 Pub/Sub 알림은 메타데이터 새로 고침을 자동으로 트리거합니다.

  6. 추가 역할에 대해 Snowflake 액세스 제어 권한을 구성하여 외부 테이블에 대한 쿼리 액세스 권한을 부여합니다.

Microsoft Azure

이 섹션에서는 Azure 스테이지를 참조하는 외부 테이블의 설정 및 로드 워크플로에 대한 높은 수준의 개요를 제공합니다. 전체 지침은 Azure Blob 저장소에 대해 자동으로 외부 테이블 새로 고치기 를 참조하십시오.

  1. Azure Storage 이벤트에 대한 Event Grid 구독을 구성합니다.

  2. Snowflake에서 알림 통합을 생성합니다. 알림 통합은 Snowflake와 서드 파티 클라우드 메시지 큐 서비스(예: Microsoft Event Grid) 간의 인터페이스를 제공하는 Snowflake 오브젝트입니다.

  3. 데이터 파일이 스테이징 외부 위치(즉, Azure 컨테이너)를 참조하는 명명된 스테이지 오브젝트를 생성합니다(CREATE STAGE 사용).

  4. 명명된 스테이지 및 통합을 참조하는 외부 테이블을 생성합니다(CREATE EXTERNAL TABLE 사용).

  5. ALTER EXTERNAL TABLE … REFRESH를 사용하여 외부 테이블 메타데이터를 수동으로 한 번 새로 고쳐 4단계 이후 발생한 변경 사항과 메타데이터를 동기화합니다. 그 후 Event Grid 알림은 메타데이터 새로 고침을 자동으로 트리거합니다.

  6. 추가 역할에 대해 Snowflake 액세스 제어 권한을 구성하여 외부 테이블에 대한 쿼리 액세스 권한을 부여합니다.

외부 테이블 쿼리하기

표준 테이블에서와 같이 외부 테이블을 쿼리 합니다.

Snowflake가 쿼리 작업 중 클라우드 저장소의 파일을 스캔하는 동안 오류가 발생하면 파일을 건너뛰고 다음 파일에서 스캔을 계속합니다. 쿼리는 파일을 부분적으로 스캔하고 오류가 발생하기 전에 스캔한 행을 반환할 수 있습니다.

Parquet 파일의 레코드 필터링하기

행 그룹 통계를 이용하여 Parquet 파일의 데이터를 잘라내기 위해, WHERE 절은 파티션 열이나 일반 열 또는 둘 다를 포함할 수 있습니다. 다음 제한 사항이 적용됩니다.

  • 이 절은 VARIANT 열을 포함할 수 없습니다.

  • 이 절은 다음 비교 연산자 중 하나 또는 그 이상을 포함할 수 있을 뿐입니다.

    • =

    • >

    • <

  • 이 절은 STARTSWITH SQL 함수뿐 아니라, 하나 또는 그 이상의 논리/부울 연산자 를 포함할 수 있을 뿐입니다.

또한 "value:<경로>::<데이터 타입>" (또는 GET/GET_PATH , : 함수와 같음) 형식의 쿼리는 벡터화된 스캐너를 활용합니다. "value" 또는 간단히 "value:<경로>" 형식의 쿼리는 벡터화되지 않은 스캐너를 사용하여 처리됩니다.

파일이 쿼리 필터에 포함된 키를 기준으로 정렬되고 파일에 여러 개의 행 그룹이 있는 경우, 더 나은 잘라내기 결과가 가능합니다.

다음 표에는 이 섹션의 동작을 설명하는 유사한 쿼리 구조가 나와 있는데, 여기서 et 는 외부 테이블이고 c1, c2, c3 는 가상 열입니다.

최적화됨

최적화되지 않음

SELECT c1, c2, c3 FROM et;

SELECT value:c1, c2, c3 FROM et;

SELECT c1, c2, c3  FROM et WHERE c1 = 'foo';

SELECT c1, c2, c3 FROM et WHERE value:c1::string = 'foo';

SELECT c1, c2, c3 FROM et WHERE value:c1 = 'foo';

지속형 쿼리 결과

테이블과 유사하게, 외부 테이블에 대한 쿼리 결과는 24시간 동안 지속됩니다. 이러한 24시간 동안 다음 작업은 외부 테이블에 대한 쿼리 결과 캐시를 무효화하고 제거합니다.

  • 외부 테이블 정의를 수정하는 모든 DDL 작업. 여기에는 외부 테이블 정의를 명시적으로 수정(ALTER EXTERNAL TABLE 사용)하거나 외부 테이블 재생성(CREATE OR REPLACE EXTERNAL TABLE 사용)이 포함됩니다.

  • 외부 테이블 메타데이터에 등록된 클라우드 저장소 파일 세트의 변경 사항입니다. 저장소 위치에 대한 이벤트 알림 서비스를 사용하는 자동 새로 고침 작업 또는 수동 새로 고침 작업(ALTER EXTERNAL TABLE … REFRESH 사용)은 결과 캐시를 무효화합니다.

클라우드 저장소에서 참조되는 파일을 변경하면 다음과 같은 상황에서 쿼리 결과 캐시가 무효화되지 않으며, 결과적으로 최신 상태가 아닌 쿼리 결과가 됩니다.

  • 자동 새로 고침 작업이 비활성화되었거나(즉, AUTO_REFRESH = FALSE) 올바르게 구성되지 않았습니다.

  • 외부 테이블 메타데이터는 수동으로 새로 고쳐지지 않습니다.

외부 테이블 메타데이터에서 이전 스테이징된 파일 제거하기

저장 프로시저는 ALTER EXTERNAL TABLE … REMOVE FILES 문을 사용하여 외부 테이블의 메타데이터에서 이전 스테이징된 파일을 제거할 수 있습니다. 저장 프로시저는 스테이지에서 마지막으로 수정한 날짜를 기준으로 메타데이터에서 파일을 제거합니다.

예:

  1. CREATE PROCEDURE 문을 사용하여 저장 프로시저를 생성합니다.

    CREATE or replace PROCEDURE remove_old_files(external_table_name varchar, num_days float)
      RETURNS varchar
      LANGUAGE javascript
      EXECUTE AS CALLER
      AS
      $$
      // 1. Get the relative path of the external table
      // 2. Find all files registered before the specified time period
      // 3. Remove the files
    
    
      var resultSet1 = snowflake.execute({ sqlText:
        `call exttable_bucket_relative_path('` + EXTERNAL_TABLE_NAME + `');`
      });
      resultSet1.next();
      var relPath = resultSet1.getColumnValue(1);
    
    
      var resultSet2 = snowflake.execute({ sqlText:
        `select file_name
         from table(information_schema.EXTERNAL_TABLE_FILES (
             TABLE_NAME => '` + EXTERNAL_TABLE_NAME +`'))
         where last_modified < dateadd(day, -` + NUM_DAYS + `, current_timestamp());`
      });
    
      var fileNames = [];
      while (resultSet2.next())
      {
        fileNames.push(resultSet2.getColumnValue(1).substring(relPath.length));
      }
    
      if (fileNames.length == 0)
      {
        return 'nothing to do';
      }
    
    
      var alterCommand = `ALTER EXTERNAL TABLE ` + EXTERNAL_TABLE_NAME + ` REMOVE FILES ('` + fileNames.join(`', '`) + `');`;
    
      var resultSet3 = snowflake.execute({ sqlText: alterCommand });
    
      var results = [];
      while (resultSet3.next())
      {
        results.push(resultSet3.getColumnValue(1) + ' -> ' + resultSet3.getColumnValue(2));
      }
    
      return results.length + ' files: \n' + results.join('\n');
    
      $$;
    
      CREATE or replace PROCEDURE exttable_bucket_relative_path(external_table_name varchar)
      RETURNS varchar
      LANGUAGE javascript
      EXECUTE AS CALLER
      AS
      $$
      var resultSet = snowflake.execute({ sqlText:
        `show external tables like '` + EXTERNAL_TABLE_NAME + `';`
      });
    
      resultSet.next();
      var location = resultSet.getColumnValue(10);
    
      var relPath = location.split('/').slice(3).join('/');
      return relPath.endsWith("/") ? relPath : relPath + "/";
    
      $$;
    
    Copy
  2. 저장 프로시저를 호출합니다.

    -- Remove all files from the exttable external table metadata:
    call remove_old_files('exttable', 0);
    
    -- Remove files staged longer than 90 days ago from the exttable external table metadata:
    call remove_old_files('exttable', 90);
    
    Copy

    또는 저장 프로시저를 주기적으로 호출하여 외부 테이블 메타데이터에서 기존 파일을 제거하는 CREATE TASK 를 사용하여 작업을 생성합니다.

Apache Hive 메타스토어 통합

Snowflake는 외부 테이블을 사용하여 Apache Hive 메타스토어를 Snowflake와 통합하는 것을 지원합니다. Hive 커넥터는 메타스토어 이벤트를 감지하고 Snowflake로 전송하여 외부 테이블을 Hive 메타스토어와 동기화된 상태로 유지합니다. 이를 통해 사용자는 Snowflake에서 쿼리하는 동안 Hive에서 데이터를 관리할 수 있습니다.

자세한 지침은 Snowflake와 Apache Hive 메타스토어 통합 섹션을 참조하십시오.

외부 테이블 DDL

외부 테이블의 생성 및 관리를 지원하기 위해 Snowflake가 제공하는 특수 DDL 명령 세트는 다음과 같습니다.

필수 액세스 권한

외부 테이블을 생성 및 관리하려면 최소한 다음 역할 권한을 가진 역할이 필요합니다.

오브젝트

권한

데이터베이스

USAGE

스키마

USAGE, CREATE STAGE(새 스테이지를 생성하는 경우), CREATE EXTERNAL TABLE

스테이지(기존 스테이지를 사용하는 경우)

USAGE

Information Schema

Snowflake Snowflake Information Schema 에는 외부 테이블 및 스테이징된 데이터 파일에 대한 정보를 검색하기 위해 쿼리할 수 있는 뷰 및 테이블 함수가 포함되어 있습니다.

EXTERNAL_TABLES 뷰

지정된(또는 현재) 데이터베이스의 외부 테이블에 대한 정보를 표시합니다.

테이블 함수

AUTO_REFRESH_REGISTRATION_HISTORY

지정된 오브젝트의 메타데이터에 등록된 데이터 파일의 내역과 이러한 작업에 대해 청구된 크레딧을 검색합니다.

EXTERNAL_TABLE_FILES

지정된 외부 테이블의 메타데이터에 포함된 스테이징된 데이터 파일에 대한 정보를 검색합니다.

EXTERNAL_TABLE_FILE_REGISTRATION_HISTORY

메타데이터를 새로 고칠 때 발견된 오류를 포함하여 외부 테이블의 메타데이터 기록에 대한 정보를 검색합니다.