Gerenciamento de uma tabela Iceberg

Este tópico aborda as seguintes tarefas para ajudar você a gerenciar uma tabela Iceberg:

Você também pode converter uma tabela Iceberg que usa uma integração de catálogo em uma tabela que usa Snowflake como catálogo Iceberg. Para saber mais, consulte Conversão de uma tabela Iceberg.

Atualização manual dos metadados da tabela

Ao usar uma integração de catálogo, você pode atualizar os metadados da tabela de um arquivo de metadados Iceberg especificado usando o comando ALTER ICEBERG TABLE. A atualização dos metadados da tabela sincroniza os metadados com as alterações mais recentes da tabela.

Atualização dos metadados de uma tabela Iceberg que usa AWS Glue como catálogo

O exemplo a seguir atualiza manualmente os metadados de uma tabela que usa o AWS Glue para o catálogo Iceberg. Com esse tipo de tabela Iceberg, não é necessário especificar um caminho de arquivo de metadados no comando.

ALTER ICEBERG TABLE my_iceberg_table REFRESH;
Copy

Atualização dos metadados de uma tabela Iceberg criada a partir de arquivos no armazenamento de objetos

O exemplo a seguir atualiza manualmente uma tabela criada a partir de arquivos de metadados Iceberg em um local de armazenamento em nuvem externo, especificando o caminho relativo para um arquivo de metadados. O arquivo de metadados define os dados na tabela após a atualização.

ALTER ICEBERG TABLE my_iceberg_table REFRESH 'metadata/v1.metadata.json';
Copy

Geração de instantâneos de alterações de DML

Para tabelas que usam Snowflake como catálogo, o Snowflake gera automaticamente os metadados do Iceberg. Snowflake grava os metadados em uma pasta chamada metadata em seu volume externo no local especificado pelo parâmetro BASE_LOCATION quando a tabela foi criada.

Como alternativa, você pode chamar a função SYSTEM$GET_ICEBERG_TABLE_INFORMATION para gerar metadados do Iceberg para quaisquer novas alterações.

Por exemplo:

SELECT SYSTEM$GET_ICEBERG_TABLE_INFORMATION('db1.schema1.it1');
Copy

Saída:

+-----------------------------------------------------------------------------------------------------------+
| SYSTEM$GET_ICEBERG_TABLE_INFORMATION('DB1.SCHEMA1.IT1')                                                   |
|-----------------------------------------------------------------------------------------------------------|
| {"metadataLocation":"s3://mybucket/metadata/v1.metadata.json","status":"success"}                         |
+-----------------------------------------------------------------------------------------------------------+

Consulta de uma tabela Iceberg

Para consultar uma tabela Iceberg, um usuário deve receber ou herdar os seguintes privilégios:

  • O privilégio USAGE no banco de dados e no esquema que contém a tabela e no volume externo associado à tabela. Para consultar uma tabela que não é gerenciada pelo Snowflake, o usuário também deve ter o privilégio USAGE na integração do catálogo da tabela.

  • O privilégio SELECT na tabela.

Você pode consultar uma tabela Iceberg usando uma instrução SELECT. Por exemplo:

SELECT col1, col2 FROM my_iceberg_table;
Copy

Atualização de uma tabela Iceberg

Você pode usar as instruções INSERT e UPDATE para modificar uma tabela Iceberg que usa Snowflake como catálogo.

O exemplo a seguir insere um novo valor em uma tabela Iceberg chamada store_sales e atualiza a coluna cola para 1 se o valor for atualmente -99.

INSERT INTO store_sales values (-99);

UPDATE store_sales
  SET cola = 1
  WHERE cola = -99;
Copy

Recuperação de métricas de armazenamento para tabelas Iceberg

Snowflake não cobra de sua conta os custos de armazenamento da tabela Iceberg. No entanto, você pode acompanhar quanto armazenamento uma tabela Iceberg ocupa consultando as exibições TABLE_STORAGE_METRICS e TABLES no esquema Snowflake Information Schema ou Account Usage.

O exemplo de consulta a seguir une a exibição ACCOUNT_USAGE.TABLE_STORAGE_METRICS à exibição ACCOUNT_USAGE.TABLES, filtrando na coluna TABLES.IS_ICEBERG.

SELECT metrics.* FROM
  snowflake.account_usage.table_storage_metrics metrics
  INNER JOIN snowflake.account_usage.tables tables
  ON (
    metrics.id = tables.table_id
    AND metrics.table_schema_id = tables.table_schema_id
    AND metrics.table_catalog_id = tables.table_catalog_id
  )
  WHERE tables.is_iceberg='YES';
Copy