카탈로그 콘텐츠 구성하기

이 항목에서는 Snowflake Open Catalog에서 내부 카탈로그에 대한 네임스페이스와 테이블을 만드는 방법에 대한 지침을 제공합니다.

중요

Snowflake Open Catalog에서 테이블을 제거하지 않고 삭제한 경우 삭제한 테이블과 이름 및 위치가 같은 새 테이블을 생성하지 마십시오. 이렇게 하면 액세스 권한이 없어야 하는 사용자가 원래 테이블의 데이터에 액세스할 수 있습니다. 예를 들어, 저장소 디렉터리 위치가 //Schema1/Table1 인 MyCatalogTable1 을 삭제하지만 제거하지 않는 경우 동일한 Table1 저장소 디렉터리 내에 Table1 을 새로 생성하지 마십시오. 테이블을 제거하지 않고 삭제하면 해당 데이터는 외부 클라우드 저장소에 유지됩니다.

중요

카탈로그에 대해 정의된 액세스 권한이 올바르게 적용되도록 하려면 다음 조건을 충족해야 합니다.

  • 디렉터리에는 단일 테이블에 속한 데이터 파일만 포함됩니다.

  • 디렉터리 계층 구조는 카탈로그의 네임스페이스 계층 구조와 일치합니다.

카탈로그에 다음 항목이 포함된 경우를 예로 들겠습니다.

  • 최상위 네임스페이스 namespace1

  • 중첩된 네임스페이스 namespace1a

  • 중첩된 네임스페이스 namespace1a 아래에 그룹화된 customers 테이블

  • 중첩된 네임스페이스 namespace1a 아래에 그룹화된 orders 테이블

카탈로그의 디렉터리 계층 구조는 다음과 같아야 합니다.

  • /namespace1/namespace1a/customers/<files for the customers table *only*>

  • /namespace1/namespace1a/orders/<files for the orders table *only*>

이러한 조건은 내부 카탈로그와 외부 카탈로그 모두에 적용되며, 여기에는 Snowflake가 관리하는 Apache Iceberg™ 테이블이 포함된 외부 카탈로그가 포함됩니다. 내부 카탈로그에서 테이블을 만들 때 카탈로그 열기에서는 기존 테이블의 디렉터리 또는 하위 디렉터리 내에 테이블을 만들 수 없습니다. 외부 카탈로그에서 Snowflake 관리 Iceberg 테이블을 생성하는 경우 Open Catalog는 디렉터리 위치가 중첩되는 것을 금지하지 않습니다. 따라서 이러한 테이블을 만들 때 BASE_LOCATION 매개 변수를 사용하여 각 테이블의 고유한 상위 디렉터리를 지정하십시오. 자세한 내용은 CREATE ICEBERG TABLE (Snowflake as the Iceberg 카탈로그)을 참조하십시오.

내부 및 외부 카탈로그에 대한 자세한 내용은 카탈로그 유형 섹션을 참조하십시오.

카탈로그 콘텐츠 구성하기

카탈로그 관리자는 Open Catalog 또는 서드 파티 쿼리 엔진을 사용하여 다음과 같이 카탈로그 콘텐츠를 구성할 수 있습니다.

오브젝트

용도

네임스페이스

<ul><li>Open Catalog</li><li>서드 파티 쿼리 엔진</li></ul>

테이블

서드 파티 쿼리 엔진

참고

외부 카탈로그의 테이블과 네임스페이스는 Open Catalog에서 읽기 전용입니다. 외부 카탈로그의 카탈로그 콘텐츠를 구성해야 하는 경우 Snowflake를 사용해야 합니다. 자세한 내용은 Snowflake 관리 Apache Iceberg™ 테이블 섹션을 참조하십시오.

이 항목의 예제 코드는 Apache Spark를 사용하여 카탈로그 콘텐츠를 구성하는 방법을 보여줍니다. 예제 코드는 PySpark로 작성되었습니다.

네임스페이스 만들기

이 섹션에서는 최상위 네임스페이스 또는 중첩된 네임스페이스를 만드는 방법에 대한 지침을 제공합니다.

중요

네임스페이스를 만들 때 네임스페이스 이름에 마침표나 공백을 사용하지 마십시오.

최상위 네임스페이스 만들기

최상위 네임스페이스를 만들려면 Apache Spark나 Open Catalog를 사용하면 됩니다.

예: Apache Spark를 사용하여 최상위 네임스페이스 만들기

다음 예제 코드에서는 카탈로그 catalog1 에 namespace1 이라는 최상위 네임스페이스를 생성합니다.

spark.sql("use catalog1").show()
spark.sql("CREATE NAMESPACE namespace1")

Open Catalog를 사용하여 최상위 네임스페이스 만들기

  1. Open Catalog에 로그인합니다.

  2. 왼쪽 메뉴에서 카탈로그 를 선택합니다.

  3. 카탈로그 목록에서 최상위 네임스페이스를 만들려는 카탈로그를 선택합니다.

  4. + 네임스페이스 를 선택합니다.

  5. ** 이름** 에 네임스페이스의 이름을 입력한 다음 제출 을 선택합니다.

중첩된 네임스페이스 만들기

중첩된 네임스페이스를 만들려면 Apache Spark나 Open Catalog를 사용하면 됩니다.

예: Apache Spark를 사용하여 중첩된 네임스페이스 만들기

다음 예제 코드에서는 카탈로그 catalog1 에 namespace1a 라는 중첩된 네임스페이스를 생성합니다. 이 중첩된 네임스페이스는 기존 최상위 네임스페이스 namespace1 아래에 생성됩니다.

spark.catalog.setCurrentCatalog("catalog1")
spark.sql("use catalog1").show()
spark.sql("CREATE NAMESPACE namespace1.namespace1a")

Open Catalog를 사용하여 중첩된 네임스페이스 만들기

  1. Open Catalog에 로그인합니다.

  2. 왼쪽 메뉴에서 카탈로그 를 선택합니다.

  3. 카탈로그 목록에서 중첩된 네임스페이스를 만들려는 카탈로그를 선택합니다.

  4. 네임스페이스 탭에서 중첩된 네임스페이스를 만들려는 상위 네임스페이스로 이동합니다.

  5. + 네임스페이스 를 선택합니다.

  6. 이름 에 중첩된 네임스페이스의 이름을 입력한 다음 제출 을 선택합니다.

테이블 만들기

이 섹션에서는 Apache Spark를 사용하여 테이블을 만드는 방법에 대한 예를 제공합니다.

중요

Snowflake Open Catalog에서 테이블을 제거하지 않고 삭제한 경우 삭제한 테이블과 이름 및 위치가 같은 새 테이블을 생성하지 마십시오. 이렇게 하면 액세스 권한이 없어야 하는 사용자가 원래 테이블의 데이터에 액세스할 수 있습니다. 예를 들어, 저장소 디렉터리 위치가 //Schema1/Table1 인 MyCatalogTable1 을 삭제하지만 제거하지 않는 경우 동일한 Table1 저장소 디렉터리 내에 Table1 을 새로 생성하지 마십시오. 테이블을 제거하지 않고 삭제하면 해당 데이터는 외부 클라우드 저장소에 유지됩니다.

예: 테이블 만들기

다음 예제 코드에서는 카탈로그 catalog1 의 중첩된 네임스페이스 namespace1a 아래에 customers 테이블을 생성합니다. 이 테이블은 id 및 custnum 열과 함께 생성되며 두 열의 데이터 타입은 모두 integer 입니다.

spark.sql("use catalog1").show()
spark.sql ("use namespace1.namespace1a")
spark.sql("CREATE OR REPLACE TABLE customers (id int, custnum int) using iceberg")

예: 테이블에 행 삽입

다음 예제 코드에서는 customers 테이블에 행을 삽입합니다.

spark.sql("use catalog1").show()
spark.sql ("use namespace1.namespace1a")
spark.sql("INSERT INTO customers VALUES (123,456)")