카탈로그 콘텐츠 구성하기

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

중요

Snowflake Open Catalog에서 테이블을 제거하지 않고 삭제한 경우 삭제한 테이블과 이름 및 위치가 같은 새 테이블을 생성하지 마십시오. 이렇게 하면 액세스 권한이 없어야 하는 사용자가 원래 테이블의 데이터에 액세스할 수 있습니다. 예를 들어, 저장소 디렉터리 위치가 /MyCatalog/Schema1/Table1Table1 을 삭제하지만 제거하지 않는 경우 동일한 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를 사용하여 최상위 네임스페이스 만들기

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

테이블 만들기

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

중요

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

예: 테이블 만들기

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

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

예: 테이블에 행 삽입하기

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

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