Apache Iceberg™ 테이블에 카탈로그 연결 데이터베이스 사용¶
참고
Update: We will start billing for catalog-linked databases sometime in December 2025.
카탈로그 연결 데이터베이스를 사용하면 개별 :ref:`외부 관리형 테이블<label-tables_iceberg_catalog_integration>`을 생성하지 않고도 Snowflake에서 여러 원격 Iceberg 테이블에 액세스할 수 있습니다.
카탈로그 연결 데이터베이스는 외부 Iceberg REST 카탈로그에 연결된 Snowflake 데이터베이스입니다. Snowflake는 외부 카탈로그와 자동으로 동기화하여 네임스페이스 및 Iceberg 테이블을 감지하고 원격 테이블을 카탈로그 연결 데이터베이스에 등록합니다. 카탈로그 연결 데이터베이스는 스키마 또는 Iceberg 테이블 생성 및 삭제도 지원합니다.
카탈로그 연결 데이터베이스에 대한 요금 청구¶
When billing starts sometime in December 2025, Snowflake bills your account for the following usage:
자동 테이블 검색, 스키마 생성, 스키마 삭제, 테이블 삭제. Snowflake는 CREDITS_USED_CLOUD_SERVICES 사용 유형에 따라 이 사용에 대한 요금을 계정에 청구합니다. 클라우드 서비스의 사용 요금은 클라우드 서비스의 일일 사용량이 가상 웨어하우스 일일 사용량의 10%를 초과하는 경우에만 청구됩니다. 자세한 내용은 클라우드 서비스 사용 요금 이해하기 섹션을 참조하십시오.
테이블 만들기. Snowflake는 자동 새로 고침을 통해 CREDITS_USED_COMPUTE 사용 유형에 따라 이 사용에 대해 계정에 요금을 청구합니다. 이 사용에 대한 비용은 Snowflake 웹 사이트의 `Snowflake Service Consumption Table<https://www.snowflake.com/legal-files/CreditConsumptionTable.pdf>`_, 테이블 5에 설명되어 있습니다. 자동 새로 고침 및 데이터 등록 행은 Snowflake 관리형 컴퓨팅 열을 참조하세요.
Snowflake는 테이블 생성 중에 사용하는 클라우드 서비스에 대해 요금을 청구하지 않습니다.
참고
청구가 시작되면 카탈로그 연결 데이터베이스의 크레딧 사용을 보는 데 사용할 수 있는 새로운 CATALOG_LINKED_DATABASE_USAGE_HISTORY 뷰를 출시할 예정입니다.
외부 카탈로그 및 테이블 저장소에 대한 액세스를 구성하는 워크플로¶
다음 단계에서는 카탈로그 연결 데이터베이스를 만들고, Snowflake와 카탈로그 간의 동기화 상태를 확인하고, 데이터베이스에서 테이블을 만들거나 쿼리하는 방법을 다룹니다.
외부 카탈로그 및 테이블 저장소에 대한 액세스 구성하기¶
카탈로그 연결 데이터베이스를 만들기 전에 외부 카탈로그 및 테이블 저장소에 대한 액세스를 구성해야 합니다. 이 액세스를 구성하려면 발급된 자격 증명을 사용하여 카탈로그 통합을 구성합니다. 이 옵션을 사용하면 원격 Iceberg 카탈로그가 자격 증명 발급을 지원해야 합니다.
자세한 지침은 Apache Iceberg™ 테이블에 카탈로그 판매 자격 증명 사용 섹션을 참조하십시오.
참고
원격 Iceberg 카탈로그가 자격 증명 자동 발급을 지원하지 않는 경우 외부 볼륨 및 카탈로그 통합. 그런 다음, 원격 Iceberg 카탈로그에 대한 Apache Iceberg™ REST 카탈로그 통합을 구성합니다.
카탈로그 연결 데이터베이스 만들기¶
CREATE DATABASE(카탈로그 연결) 명령을 사용하여 카탈로그 연결 데이터베이스 만들기:
다음 예에서는 발급된 자격 증명을 사용하는 카탈로그 연결 데이터베이스를 생성합니다. 동기화 간격은 기본값인 30초입니다. 동기화 간격은 Snowflake에 원격 카탈로그를 폴링하는 빈도를 알려줍니다.
CREATE DATABASE my_linked_db
LINKED_CATALOG = (
CATALOG = 'my_catalog_int'
);
참고
외부 볼륨을 사용하는 카탈로그 연결 데이터베이스를 생성하려면 예제<label-create_catalog_linked_database_examples>`를 포함하여 :doc:/sql-reference/sql/create-database-catalog-linked` 섹션을 참조하세요.
카탈로그 연결 데이터베이스에는 링크 아이콘이 포함되어 있습니다.
카탈로그 동기화 상태 확인하기¶
Snowflake가 원격 카탈로그를 데이터베이스에 연결했는지 확인하려면 SYSTEM$CATALOG_LINK_STATUS 기능을 사용합니다.
이 기능은 원격 카탈로그에서 동기화에 실패한 테이블을 식별하는 데 도움이 되는 정보도 제공합니다.
SELECT SYSTEM$CATALOG_LINK_STATUS('my_linked_db');
생성되었지만 초기화할 수 없는 테이블 식별¶
동기화에 성공했지만 자동으로 새로 고치지 못한 원격 카탈로그의 테이블을 식별하려면 SHOW ICEBERG TABLES 명령을 실행한 다음, 출력의 auto_refresh_status 열을 참조하세요. 이러한 테이블에는 출력에 :code:`ICEBERG_TABLE_NOT_INITIALIZED`의 :code:`executionState`가 있습니다.
예를 들어, Snowflake가 원격 카탈로그에서 테이블을 성공적으로 검색하고 카탈로그 연결 데이터베이스에 생성할 수 있지만, 이 테이블에는 원격 카탈로그의 손상된 데이터 파일이 포함됩니다. 결과적으로 Snowflake는 이 오류를 해결할 때까지 테이블을 자동으로 새로 고칠 수 없습니다.
이러한 종류의 테이블에 대해서는 자동 새로 고침이 해제되어 있으므로, Snowflake에서 테이블을 쿼리하면 테이블이 초기화되지 않았다는 오류가 반환됩니다. 테이블을 쿼리하려면 이 오류를 수정한 다음, 테이블에 대한 자동 새로 고침을 켜야 합니다.
카탈로그 연결 데이터베이스에서 테이블 쿼리하기¶
카탈로그 연결 데이터베이스를 생성한 후 Snowflake는 테이블 검색 프로세스를 시작하고 SYNC_INTERVAL_SECONDS 매개 변수 값(기본 간격 30초)을 통해 연결된 카탈로그를 자동으로 폴링하여 변경 사항을 확인합니다.
데이터베이스에서 원격 카탈로그의 허용된 네임스페이스는 스키마로 나타나며, Iceberg 테이블은 해당 스키마 아래에 나타납니다.
SELECT 문을 사용하여 원격 테이블을 쿼리할 수 있습니다.
참고
카탈로그 연결 데이터베이스에서 오브젝트를 식별하기 위한 요구 사항은 카탈로그 연결 데이터베이스의 식별자 확인 요구 사항 섹션을 참조하세요.
오브젝트 식별자에 대한 자세한 내용은 식별자 요구 사항 섹션을 참조하세요.
예:
USE DATABASE my_linked_db;
SELECT * FROM my_namespace.my_iceberg_table
LIMIT 20;
원격 카탈로그에 작성¶
Snowflake를 사용하여 연결된 카탈로그에 네임스페이스와 Iceberg 테이블을 생성할 수 있습니다. 자세한 내용은 다음 항목을 참조하십시오.
카탈로그 연결 데이터베이스의 식별자 확인 요구 사항¶
식별자 확인을 위한 요구 사항은 다음에 따라 달라집니다.
카탈로그 연결 데이터베이스를 만들 때 CATALOG_CASE_SENSITIVITY 매개 변수에 대해 지정한 값
외부 Iceberg 카탈로그에서 대/소문자를 구분하는 식별자를 사용하는지 아니면 대/소문자를 구분하지 않는 식별자를 사용하는지
참고
이러한 요구 사항은 기존 스키마, 테이블 및 테이블 열을 식별할 때 적용됩니다. 여기에는 오브젝트를 생성하거나 변경하기 위한 몇 가지 특별한 사례도 포함됩니다.
AWS Glue 또는 Unity Catalog와 같은 대/소문자를 구분하는 카탈로그에서 새 스키마, 테이블 또는 열을 생성하는 경우 소문자를 사용하고 스키마, 테이블 및 열 이름을 큰따옴표로 묶어야 합니다. 이 작업은 소문자 식별자만 지원하는 다른 Iceberg REST 카탈로그에도 필요합니다.
다음 테이블은 각 시나리오에 대한 요구 사항을 보여줍니다.
CATALOG_CASE_SENSITIVITY 값 |
외부 Iceberg 카탈로그에서 사용하는 항목 |
요구 사항 |
|---|---|---|
CASE_SENSITIVE |
대/소문자를 구분하는 식별자 |
Snowflake는 대/소문자를 포함하여 표시되는 그대로 식별자를 일치시킵니다. Snowflake는 따옴표가 없는 식별자를 대문자로 자동으로 변환하지만, 따옴표가 있는 식별자는 외부 카탈로그의 대/소문자와 정확히 일치해야 합니다. 다음 예는 테이블을 생성하기 위한 유효한 쿼리를 보여줍니다. CREATE TABLE "Table1" (id INT, name STRING);
Snowflake는 외부 카탈로그에 사용된 대/소문자를 유지하는 다음 예는 SELECT * FROM "Table1";
이전 예에서 대/소문자를 정확히 일치시키려면 큰따옴표가 필요합니다. 다음 예는 SELECT * FROM table1;
이전 예에서는 식별자가 큰따옴표로 묶이지 않으므로 이 쿼리는 ``TABLE1``이 존재하지 않는 경우 유효하지 않습니다. 결과적으로, Snowflake는 식별자를 대문자로 변환합니다. 다음 예는 모두 대문자인 ``TABLE1``이 존재하지 않는 경우에 유효하지 않은 쿼리를 보여줍니다. SELECT * FROM TABLE1;
|
CASE_SENSITIVE |
대/소문자를 구분하지 않는 식별자 |
외부 Iceberg 카탈로그가 실제로 대/소문자를 구분하지 않고 소문자로 정규화되는 경우 식별자를 큰따옴표로 묶어야 합니다. 다음 예제는 유효한 쿼리를 보여줍니다. SELECT * from "s1";
SELECT * from "lowercasetablename";
|
CASE_INSENSITIVE |
대/소문자를 구분하지 않는 식별자 |
|
CASE_INSENSITIVE |
대/소문자를 구분하는 식별자 |
외부 Iceberg 카탈로그가 실제로 대/소문자를 구분하는 경우 Snowflake는 따옴표가 없는 식별자를 대/소문자를 구분하지 않는 것으로 처리하고 따옴표가 없는 식별자를 대문자로 자동으로 변환합니다. 오브젝트를 생성하거나 쿼리할 때 Snowflake는 따옴표가 없는 한, 대/소문자에 관계없이 식별자를 일치시킵니다. Snowflake는 대/소문자가 다른 두 개의 다른 식별자를 확인할 수 없으므로 이 패턴은 사용하지 않는 것이 좋습니다. 이 패턴은 대/소문자만 다른 두 식별자가 없는 경우에만 작동합니다. 원격 카탈로그에 SELECT * from table1;
SELECT * from TABLE1;
SELECT * from Table1;
SELECT * from "Table1";
따옴표가 있는 식별자는 대/소문자를 유지하고 정확히 일치시킵니다. 그러나 CASE_INSENSITIVE 모드에서는 따옴표가 없는 형식과 따옴표가 있는 형식이 모두 지원됩니다. |
Iceberg 테이블에 카탈로그 연결 데이터베이스 사용 시 고려 사항¶
카탈로그 연결 데이터베이스를 사용할 때 다음 사항을 고려하세요.
Iceberg REST용 카탈로그 통합을 사용하는 경우에만 지원됩니다(예: Snowflake Open Catalog).
Update: We will start billing sometime in December 2025.
자동 테이블 검색을 특정 네임스페이스 세트로 제한하려면 ALLOWED_NAMESPACES 매개 변수를 사용합니다. BLOCKED_NAMESPACES 매개 변수를 사용하여 네임스페이스 세트를 차단할 수도 있습니다.
Snowflake는 사용자 또는 역할에 대해 원격 카탈로그 액세스 제어를 동기화하지 않습니다.
카탈로그 연결 데이터베이스에서 스키마 또는 외부 관리형 Iceberg 테이블을 생성할 수 있습니다. 다른 Snowflake 오브젝트 생성은 현재 지원되지 않습니다.
카탈로그 연결 데이터베이스에는 데이터베이스 역할을 만들 수 없습니다.
대기 시간:
원격 카탈로그에서 7,500개의 네임스페이스에 연결된 데이터베이스의 경우 네임스페이스 및 테이블 검색에는 약 1시간이 걸립니다.
500,000개의 테이블이 있는 원격 카탈로그의 경우 자동 새로 고침 프로세스를 완료하는 데 약 1시간이 걸립니다. 대기 시간 요구 사항이 다른 네임스페이스의 경우 별도의 카탈로그 연결 데이터베이스를 만드는 것이 좋습니다. 각 데이터베이스는 적절한 자동 새로 고침 간격(REFRESH_INTERVAL_SECONDS)으로 카탈로그 통합을 참조해야 합니다.
카탈로그 연결 데이터베이스의 Iceberg 테이블의 경우:
Snowflake는 원격 카탈로그 테이블 속성(예: 보존 정책 또는 버퍼)을 복사하지 않으며, 현재 테이블 속성 변경을 지원하지 않습니다.
자동 새로 고침</user-guide/tables-iceberg-auto-refresh>`은 기본적으로 활성화됩니다. 외부 테이블의 ``table-uuid` 및 카탈로그 연결 데이터베이스 테이블이 일치하지 않으면 새로 고침이 실패하고 Snowflake가 카탈로그 연결 데이터베이스에서 테이블을 삭제합니다. Snowflake는 원격 테이블을 변경하지 않습니다.
원격 카탈로그에서 테이블을 삭제하면 Snowflake는 카탈로그 연결 데이터베이스에서 테이블을 삭제합니다. 이 작업은 비동기식이므로 원격 카탈로그에서 변경 사항을 바로 확인하지 못할 수도 있습니다.
원격 카탈로그에서 테이블의 이름을 바꾸면 Snowflake는 카탈로그 연결 데이터베이스에서 기존 테이블을 삭제하고 새 이름으로 테이블을 생성합니다.
마스킹 정책 및 태그가 지원됩니다. 복제를 포함한 기타 Snowflake 고유 기능은 지원되지 않습니다.
NAMESPACE_FLATTEN_DELIMITER 매개 변수에 대해 선택하는 문자는 원격 네임스페이스에 나타날 수 없습니다. 자동 검색 프로세스 중에 Snowflake는 구분 기호가 포함된 네임스페이스를 건너뛰고 카탈로그 연결 데이터베이스에 해당 스키마를 생성하지 않습니다.
NAMESPACE_FLATTEN_DELIMITER 매개 변수에
_,$또는 숫자 이외의 값을 지정하는 경우 테이블을 쿼리할 때 스키마 이름을 따옴표로 묶어야 합니다.AWS Glue에 연결된 데이터베이스의 경우 소문자를 사용해야 하며 스키마, 테이블 및 열 이름을 큰따옴표로 묶어야 합니다. 이는 소문자 식별자만 지원하는 다른 Iceberg REST 카탈로그에도 필요합니다.
다음 예제는 유효한 쿼리를 보여줍니다.
CREATE SCHEMA "s1";
다음 문은 대문자를 사용하거나 큰따옴표를 생략하므로 유효하지 않습니다.
CREATE SCHEMA s1; CREATE SCHEMA "Schema1";
UNDROP ICEBERG TABLE 사용은 지원되지 않습니다.
공유:
목록과의 공유는 현재 지원되지 않습니다.
직접 공유가 지원됩니다.
카탈로그 연결 데이터베이스의 테이블에 쓰는 경우:
중첩된 네임스페이스에 테이블을 만드는 기능은 현재 지원되지 않습니다.
중첩된 네임스페이스의 테이블에 쓰는 기능은 현재 지원되지 않습니다.
위치
행 수준 삭제<https://iceberg.apache.org/spec/#row-level-deletes>`_는 Amazon S3, Azure 또는 Google Cloud에 저장된 테이블에 대해 지원됩니다. 동등 삭제 파일을 사용한 행 수준 삭제는 지원되지 않습니다. 행 수준 삭제에 대한 자세한 내용은 :ref:`label-tables_iceberg_row_level_deletes섹션을 참조하세요. copy-on-write 모드에서 DML(Data Manipulation Language) 작업을 실행시키는 위치 삭제를 끄려면 테이블, 스키마 또는 데이터베이스 수준에서ENABLE_ICEBERG_MERGE_ON_READ매개 변수를 FALSE로 설정합니다.