Organização do conteúdo do catálogo

Este tópico fornece instruções sobre como criar namespaces e tabelas para um catálogo interno no Snowflake Open Catalog.

Importante

Se você descartar uma tabela no Snowflake Open Catalog sem eliminá-la, não crie uma nova tabela com o mesmo nome e local da tabela descartada. Se fizer isso, um usuário poderá obter acesso aos dados da tabela original quando não deveria ter permissão para acessá-los. Por exemplo, se você descartar, mas não eliminar Table1, em que o local do diretório de armazenamento é /MyCatalog/Schema1/Table1, não crie uma nova Table1 no mesmo diretório de armazenamento da Table1. Quando você descarta uma tabela sem eliminá-la, seus dados são mantidos no armazenamento externo na nuvem.

Importante

Para garantir que os privilégios de acesso definidos para um catálogo sejam aplicados corretamente, as seguintes condições devem ser atendidas:

  • Um diretório contém apenas os arquivos de dados que pertencem a uma única tabela.

  • Uma hierarquia de diretório corresponde à hierarquia de namespace do catálogo.

Por exemplo, se um catálogo inclui os seguintes itens:

  • Namespace de nível superior namespace1

  • Namespace aninhado namespace1a

  • Uma tabela de customers agrupada sob o namespace aninhado namespace1a

  • Uma tabela de orders agrupada sob o namespace aninhado namespace1a

A hierarquia de diretório para o catálogo deve ser:

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

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

Essas condições se aplicam a catálogos internos e externos, incluindo catálogos externos que contenham [Tabelas Apache Iceberg™ gerenciadas pelo Snowflake] (https://docs.snowflake.com/en/user-guide/tables-iceberg). Quando o usuário cria uma tabela em um catálogo interno, o Open Catalog proíbe a criação da tabela dentro do diretório ou subdiretório de uma tabela existente. Quando você cria tabelas Iceberg gerenciadas pelo Snowflake em um catálogo externo, o Open Catalog não proíbe a sobreposição de locais de diretório. Portanto, quando você criar essas tabelas, use o parâmetro BASE_LOCATION para especificar um diretório primário exclusivo para cada tabela. Para obter mais informações, consulte CREATE ICEBERG TABLE (Snowflake como o catálogo Iceberg).

Para obter mais informações sobre catálogos internos e externos, consulte Tipos de catálogo.

Organização do conteúdo do catálogo

Um administrador de catálogo pode usar o Open Catalog ou um mecanismo de consulta de terceiros para organizar o conteúdo do catálogo da seguinte forma:

Objeto

Uso

Namespace

<ul><li>Catálogo aberto</li><li>Mecanismo de consulta de terceiros</li></ul>

Tabela

Mecanismo de consulta de terceiros

Observação

As tabelas e os namespaces de um catálogo externo são somente leitura no Open Catalog. Se você precisar organizar o conteúdo do catálogo para um catálogo externo, deverá usar o Snowflake. Para obter mais informações, consulte Tabelas do Apache Iceberg™ gerenciadas pelo Snowflake.

O código de exemplo neste tópico mostra como usar o Apache Spark para organizar o conteúdo do catálogo. O código de exemplo está em PySpark.

Criação de um namespace

Esta seção fornece instruções para criar namespaces de nível superior ou aninhados.

Importante

Ao criar um namespace, não use pontos ou espaços no nome do namespace.

Crie um namespace de nível superior

Para criar um namespace de nível superior, você pode usar o Apache Spark ou o Open Catalog.

Exemplo: Crie um namespace de nível superior usando o Apache Spark

O código de exemplo a seguir cria um namespace de nível superior chamado namespace1 no catálogo catalog1:

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

Criação de um namespace de nível superior usando o Open Catalog

  1. Entre no Open Catalog.

  2. No menu à esquerda, selecione Catálogos.

  3. Na lista de catálogos, selecione o catálogo onde deseja criar um namespace de nível superior.

  4. Selecione + Namespace.

  5. Para Nome, insira um nome para o namespace e selecione Enviar.

Criação de um namespace aninhado

Para criar um namespace aninhado, você pode usar o Apache Spark ou o Open Catalog.

Exemplo: Crie um namespace aninhado usando o Apache Spark

O código de exemplo a seguir cria um namespace aninhado chamado namespace1a no catálogo catalog1. Este namespace aninhado é criado sob o namespace de nível superior existente, namespace1:

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

Crie um namespace aninhado usando o Open Catalog

  1. Entre no Open Catalog.

  2. No menu à esquerda, selecione Catálogos.

  3. Na lista de catálogos, selecione o catálogo onde deseja criar um namespace aninhado.

  4. Na guia Namespaces, navegue até o namespace pai onde deseja criar o namespace aninhado.

  5. Selecione + Namespace.

  6. Para Nome, insira um nome para o namespace aninhado e selecione Enviar.

Criação de uma tabela

Esta seção fornece exemplos para criar tabelas usando o Apache Spark.

Importante

Se você descartar uma tabela no Snowflake Open Catalog sem eliminá-la, não crie uma nova tabela com o mesmo nome e local da tabela descartada. Se fizer isso, um usuário poderá obter acesso aos dados da tabela original quando não deveria ter permissão para acessá-los. Por exemplo, se você descartar, mas não eliminar Table1, em que o local do diretório de armazenamento é /MyCatalog/Schema1/Table1, não crie uma nova Table1 no mesmo diretório de armazenamento da Table1. Quando você descarta uma tabela sem eliminá-la, seus dados são mantidos no armazenamento externo na nuvem.

Exemplo: Como criar uma tabela

O código de exemplo a seguir cria uma tabela customers no namespace aninhado, namespace1a, no catálogo catalog1. Ele é criado com colunas id e custnum, e o tipo de dados para ambas as colunas é inteiro:

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

Exemplo: Como inserir linhas em uma tabela

O código de exemplo a seguir insere uma linha na tabela customers:

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