Configuração de uma integração de catálogo para tabelas Iceberg¶
Este tópico fornece informações para ajudar você a criar e configurar uma integração de catálogo para tabelas Iceberg. Para criar uma tabela Iceberg que use um catálogo Iceberg externo ou nenhum catálogo, você deve especificar uma integração de catálogo.
Nota
Uma integração de catálogo é necessária somente quando você deseja criar uma tabela Iceberg somente leitura usando um catálogo Iceberg externo. Você não precisa de uma integração de catálogo para criar uma tabela Iceberg que use Snowflake como catálogo Iceberg. Para usar o Snowflake como seu catálogo, defina o parâmetro CATALOG
como SNOWFLAKE
no comando CREATE ICEBERG TABLE.
Criação de uma integração de catálogo¶
Você pode criar uma integração de catálogo para tabelas Iceberg usando o comando CREATE CATALOG INTEGRATION.
Exemplo: criar uma integração de catálogo para arquivos Iceberg no armazenamento de objetos¶
A instrução de exemplo a seguir cria uma integração de catálogo para metadados Iceberg que estão em um local de armazenamento em nuvem externo, definindo OBJECT_STORE
como o valor CATALOG_SOURCE
.
CREATE OR REPLACE CATALOG INTEGRATION icebergCatalogInt
CATALOG_SOURCE=OBJECT_STORE
TABLE_FORMAT=ICEBERG
ENABLED=TRUE;
Depois de criar uma integração de catálogo, você poderá criar uma tabela Iceberg.
Configuração de uma integração de catálogo para AWS Glue¶
Esta seção aborda como criar uma integração de catálogo para o AWS Glue e conceder ao Snowflake acesso restrito ao catálogo de dados do Amazon Glue.
Etapa 1: configurar permissões de acesso para o catálogo de dados do AWS Glue
Etapa 3: recuperar o usuário AWS IAM e o ID externo para sua conta Snowflake
Etapa 4: conceder ao usuário IAM permissões para acessar o catálogo de dados do AWS Glue
Nota
Para concluir as instruções nesta seção, você deve ter permissões na Amazon Web Services (AWS) para criar e gerenciar políticas e funções de IAM. Se você não for um administrador AWS, peça a seu administrador AWS que complete estas tarefas.
Etapa 1: configurar permissões de acesso para o catálogo de dados do AWS Glue¶
Como prática recomendada, crie uma nova política de IAM para o Snowflake acessar o Catálogo de dados do Glue. Você pode então anexar a política a uma função IAM e usar as credenciais de segurança que o AWS gera para aquela função para acessar os arquivos no catálogo. Para obter instruções, consulte Criação de políticas de IAM e Modificação de uma política de permissões de função no Guia do usuário do gerenciamento de identidade e acesso do AWS.
No mínimo, o Snowflake requer as seguintes permissões no catálogo de dados do Glue para acessar informações sobre tabelas.
glue:GetTable
glue:GetTables
O exemplo de política a seguir (no formato JSON) fornece as permissões necessárias para acessar todas as tabelas em um banco de dados especificado.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowGlueCatalogTableAccess",
"Effect": "Allow",
"Action": [
"glue:GetTable",
"glue:GetTables"
],
"Resource": [
"arn:aws:glue:*:<accountid>:table/*/*",
"arn:aws:glue:*:<accountid>:catalog",
"arn:aws:glue:*:<accountid>:database/<database-name>"
]
}
]
}
Nota
Você pode modificar o elemento
Resource
desta política para restringir ainda mais os recursos permitidos (por exemplo, catálogo, bancos de dados ou tabelas). Para obter mais informações, consulte Tipos de recursos definidos pelo AWS Glue.Se você usar criptografia para o AWS Glue, deverá modificar a política para adicionar permissões do AWS Key Management Service (AWS KMS). Para obter mais informações, consulte Configuração de criptografia no AWS Glue.
Etapa 2: criar uma integração de catálogo no Snowflake¶
Crie uma integração de catálogo para o catálogo de dados do Glue usando o comando CREATE CATALOG INTEGRATION.
O exemplo a seguir cria uma integração de catálogo que usa uma fonte de catálogo do AWS Glue. O exemplo especifica um valor para o parâmetro opcional GLUE_REGION
.
CREATE CATALOG INTEGRATION glueCatalogInt
CATALOG_SOURCE=GLUE
CATALOG_NAMESPACE='my.catalogdb'
TABLE_FORMAT=ICEBERG
GLUE_AWS_ROLE_ARN='arn:aws:iam::123456789012:role/myGlueRole'
GLUE_CATALOG_ID='123456789012'
GLUE_REGION='us-east-2'
ENABLED=TRUE;
Etapa 3: recuperar o usuário AWS IAM e o ID externo para sua conta Snowflake¶
Para recuperar informações sobre o usuário AWS IAM e o ID externo que foram criados para sua conta Snowflake quando você criou a integração do catálogo, execute o comando DESCRIBE CATALOG INTEGRATION. Você fornece essas informações ao AWS na próxima seção para estabelecer uma relação de confiança.
O comando de exemplo a seguir descreve a integração do catálogo criada na etapa anterior:
DESCRIBE CATALOG INTEGRATION glueCatalogInt;
Registre os seguintes valores:
Valor
Descrição
GLUE_AWS_IAM_USER_ARN
O usuário AWS IAM criado para sua conta Snowflake, por exemplo,
arn:aws:iam::123456789001:user/abc1-b-self1234
. O Snowflake fornece um único usuário IAM para toda a sua conta Snowflake. Todas as integrações do catálogo do Glue em sua conta usam esse usuário IAM.
GLUE_AWS_EXTERNAL_ID
A ID externa que é necessária para estabelecer uma relação de confiança.
Você fornecerá estes valores na próxima seção.
Etapa 4: conceder ao usuário IAM permissões para acessar o catálogo de dados do AWS Glue¶
Atualize a política de confiança para a mesma função IAM especificada por ARN ao criar a integração do catálogo (GLUE_AWS_ROLE_ARN
). Adicione os valores registrados em Etapa 3: recuperar o usuário AWS IAM e o ID externo para sua conta Snowflake à política de confiança.
Para obter instruções, consulte Modificação de uma política de confiança.
O exemplo de política de confiança a seguir demonstra onde especificar os valores GLUE_AWS_IAM_USER_ARN
e GLUE_AWS_EXTERNAL_ID
:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"AWS": "<glue_iam_user_arn>"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "<glue_aws_external_id>"
}
}
}
]
}
Onde:
glue_iam_user_arn
é o valorGLUE_IAM_USER_ARN
que você registrou.
glue_aws_external_id
é o valorGLUE_AWS_EXTERNAL_ID
que você registrou.
Nota
Por motivos de segurança, se você criar uma nova integração de catálogo (ou recriar uma integração de catálogo existente usando a sintaxe CREATE OR REPLACE CATALOG INTEGRATION), a nova integração de catálogo terá um ID externo diferente e não poderá resolver a relação de confiança, a menos que você modifique a política de confiança com o novo ID externo.
Para verificar se suas permissões estão configuradas corretamente, crie uma tabela Iceberg usando esta integração de catálogo. O Snowflake não verifica se suas permissões estão definidas corretamente até que você crie uma tabela Iceberg que faça referência a essa integração de catálogo.
Próximos passos¶
Depois de configurar uma integração de catálogo para o AWS Glue, você poderá Criação de uma tabela Iceberg com AWS Glue como catálogo.
Para atualizar a tabela e mantê-la sincronizada com as alterações no AWS Glue, use uma instrução ALTER ICEBERG TABLE … REFRESH. Para obter mais informações, consulte Atualização dos metadados de uma tabela Iceberg que usa AWS Glue como catálogo.
Definição de uma integração de catálogo no nível da conta, do banco de dados ou do esquema¶
Para definir qual integração de catálogo existente usar para tabelas Iceberg, você pode definir o parâmetro CATALOG nos seguintes níveis:
- Conta:
Os administradores de conta podem usar o comando ALTER ACCOUNT para definir o parâmetro para a conta. Se o valor for definido para a conta, todas as tabelas Iceberg criadas na conta que usam um catálogo externo usarão essa integração de catálogo por padrão.
- Objeto:
Os usuários podem executar o comando CREATE <objeto> ou ALTER <objeto> apropriado para substituir o valor do parâmetro CATALOG no nível do banco de dados ou esquema. A declaração de escopo mais baixo é usada: esquema > banco de dados > conta.
Além dos privilégios mínimos necessários para modificar um objeto usando o comando ALTER <tipo_de_objeto> apropriado, uma função deve ter o privilégio USAGE na integração de catálogo.
Exemplo¶
A instrução a seguir define uma integração de catálogo (shared_catalog_integration
) para um banco de dados denominado my_database_1
:
ALTER DATABASE my_database_1
SET CATALOG = 'shared_catalog_integration';
Depois de definir uma integração de catálogo no nível do banco de dados, você poderá criar uma tabela Iceberg nesse banco de dados sem especificar uma integração de catálogo. A instrução a seguir cria uma tabela Iceberg a partir de metadados no armazenamento de objetos em my_database_1
que usa a integração de catálogo padrão (shared_catalog_integration
) definida para o banco de dados.
CREATE ICEBERG TABLE my_iceberg_table
EXTERNAL_VOLUME='my_external_volume'
METADATA_FILE_PATH='path/to/metadata/v1.metadata.json';