Consultar Tabelas de Iceberg do Apache
O Autonomous AI Database suporta a consulta de tabelas do Apache Iceberg.
- Sobre a Consulta de Tabelas de Iceberg do Apache
O Autonomous AI Database suporta a consulta de tabelas do Apache Iceberg. - Conceitos Relacionados à Consulta de Tabelas de Iceberg do Apache
Uma compreensão dos conceitos a seguir é útil para consultar tabelas do Apache Iceberg. - Requisitos de Configuração do Iceberg
Este tópico descreve os requisitos de configuração para usar o Iceberg com o Oracle Autonomous AI Database. - Workflow Típico de Consultar Tabelas de Iceberg do Apache
Antes de começar a consultar Tabelas de Iceberg do Apache, você deve estar familiarizado com seu workflow. Esta seção explica como definir tabelas externas para acessar dados apresentados como um workflow de configuração de ponta a ponta com cinco etapas principais. - Inícios Rápidos do Provedor
Este capítulo descreve o processo de configuração do acesso a dados externos com diferentes provedores de dados na nuvem. - Referências
Esta seção fornece uma lista de referências para links citados neste capítulo:
Tópico principal: Consultar Dados Externos com o Autonomous AI Database
Sobre a Consulta de Tabelas de Iceberg do Apache
O Autonomous AI Database suporta a consulta de tabelas do Apache Iceberg.
Configurações Suportadas
Veja a seguir a matriz de compatibilidade da configuração suportada:
| Catálogo | Armazenamento(s) de objetos | Autorização de Catálogo (REST) | Autenticação de armazenamento | Observações |
|---|---|---|---|---|
| Unidade (Databricks) | Amazon S3, Azure ADLS Gen2 | OAuth2 service principal (/oidc/v1/token) - recomendado; PAT - testes rápidos | Chave de acesso/segredo S3; chave SAS Gen2 do ADLS |
|
| Polaris (floco de neve) | Amazon S3, Azure ADLS Gen2 | Token OAuth2 (credenciais do cliente) ou suportado pelo Polaris | Chave de acesso/segredo S3; chave SAS Gen2 do ADLS | O envio de credenciais do armazenamento de objetos não é suportado. |
| AWS Glue | Amazon S3 | N/A (usa autorização de conta da AWS) | S3 chave de acesso/segredo; | O envio de credenciais do armazenamento de objetos não é suportado. As mesmas credenciais devem ser usadas para S3 e Colar. S3 e a cola devem estar na mesma região da AWS. |
| Metadados JSON (opção não catalogada) | Amazon S3, Azure ADLS Gen2, OCI Object Store | Não Aplicável (sem REST) | Chave de acesso/segredo S3; Chave SAS Gen2 do ADLS, Credenciais Nativas do OCI | Aponte o ADB para o metadata.json da tabela (manifesto raiz). Snapshot pontual; recrie a tabela externa após alteração de esquema ou novo snapshot.
|
| Hadoop (não catálogo) | Armazenamento de Objetos do OCI | Não Aplicável (sem REST) | Credenciais nativas do OCI | Aponta para uma pasta do lakehouse que contém arquivos de dados e metadados. |
- Restrições de Consulta de Tabelas de Iceberg do Apache
Este capítulo lista as restrições de consulta de tabelas do Apache Iceberg.
Tópico principal: Consultar Tabelas de Iceberg do Apache
Restrições da Consulta de Tabelas de Iceberg do Apache
Este capítulo lista as restrições de consulta de tabelas do Apache Iceberg.
-
Iceberg nativo da Unity (REST): Não suportado.
Solução alternativa: Use Delta + UniForm para publicar uma view legível por Iceberg por meio do ponto final REST do Iceberg do Unity Catalog.
- Catálogos REST certificados: O ADB é certificado com Snowflake Polaris e Databricks Unity Catalog (somente UniForm) para acesso de leitura ao Iceberg.
-
Vending de credencial do catálogo: Não suportado.
Não há suporte para venda automática baseada em função nativa da nuvem, como suposição automática de função ou credenciais temporárias emitidas pelo STS. Use chaves de acesso/segredo explícitas ou tokens estáticos.)
- Credenciais do AWS ARN: não suportadas. Os ARNs da função do IAM e AssumeRole via ARN não são aceitos.
- Tabelas de Iceberg particionadas não são suportadas; apenas tabelas não particionadas são permitidas.
- Atualizações no nível da linha (intercalação na leitura): Não suportado. Se os metadados do Iceberg referenciarem arquivos de exclusão, as consultas falharão.
- O esquema de uma tabela externa fixa é determinado na criação e deve se alinhar à versão do esquema Iceberg nos metadados. Se o esquema do Iceberg for atualizado, a tabela externa deverá ser recriada.
- Nenhum deslocamento de tempo de consulta: Não há suporte para a consulta por snapshot, versão ou timestamp.
- Non_catalog somente: Novos instantâneos não são selecionados automaticamente. Para ler um instantâneo específico, direcione o instantâneo metadata.json e recrie a tabela externa.
- Alinhamento da credencial: As mesmas credenciais devem ser usadas para o AWS S3 e o AWS Glue.
- Colocalização da região: Os buckets do S3 e o catálogo do AWS Glue devem estar na mesma região da AWS.
Tópico principal: Sobre a Consulta de Tabelas de Iceberg do Apache
Conceitos Relacionados à Consulta de Tabelas de Iceberg do Apache
Uma compreensão dos conceitos a seguir é útil para consultar tabelas do Apache Iceberg.
Catálogo do Iceberg
O catálogo Iceberg é um serviço que gerencia metadados de tabela, como snapshots de tabela, o esquema de tabela e as informações de particionamento. Para consultar o snapshot mais recente de uma tabela Iceberg, os mecanismos de consulta devem primeiro acessar o catálogo e obter a localização do arquivo de metadados mais recente. Já existem várias implementações de catálogo disponíveis, incluindo AWS Glue, Hive, Nessie e Hadoop. O Autonomous Database suporta o catálogo do AWS Glue e a implementação do HadoopCatalog usada pelo Spark.
Para obter mais informações, consulte Simultaneidade de Otimização.
Arquivos de Metadados
O arquivo de metadados é um documento JSON que acompanha os snapshots da tabela, o esquema de particionamento e as informações do esquema. O arquivo de metadados é o ponto de entrada para uma hierarquia de listas de manifestos e arquivos de manifesto. Os manifestos rastreiam os arquivos de dados da tabela juntamente com informações, incluindo particionamento e estatísticas de coluna. Consulte a Especificação da Tabela Iceberg para obter mais informações.
Transações
O Iceberg suporta atualizações em nível de linha para tabelas usando cópia na gravação ou mesclagem na leitura. Copy-on-write gera novos arquivos de dados que refletem as linhas atualizadas, enquanto merge-on-read gera novos "delete files" que devem ser mesclados com os arquivos de dados durante a leitura. O sistema Oracle suporta cópia na gravação. As consultas em tabelas iceberg falharão se encontrarem um arquivo de exclusão. Para mais informações, consulte RowLevelOperationMode.
Evolução do Esquema
Iceberg suporta a evolução do esquema. As alterações de esquema são refletidas nos metadados do Iceberg usando um ID de esquema. Observe que as tabelas externas da Oracle têm um esquema fixo, determinado pela versão de esquema mais atual no momento da criação da tabela. As consultas Iceberg falham quando os metadados consultados apontam para uma versão de esquema diferente da usada no momento da criação da tabela. Para obter mais informações, consulte Evolução do Esquema.
Particionamento
O Iceberg suporta opções avançadas de particionamento, como particionamento oculto e evolução de partição, que dependem do processamento/alteração dos metadados da tabela sem alterações de layout de dados dispendiosas.
Tópico principal: Consultar Tabelas de Iceberg do Apache
Requisitos de configuração para Iceberg
Este tópico descreve os requisitos de configuração para usar o Iceberg com o Oracle Autonomous AI Database.
Tópicos
- Credenciais para Iceberg: Catálogo REST x Armazenamento de Objetos
Este tópico explica como o Apache Iceberg gerencia e acessa dados por meio das duas credenciais: Catálogo REST e Armazenamento de Objetos. Você também pode consultar duas maneiras diferentes de gerenciar informações de tabelas em formatos de tabela de data lake, como o Apache Iceberg. - Pré-requisito: Conceder ACLs (Network Access Control Lists) para Operações de Iceberg
Este tópico explica como conceder privilégios de ACL (Network Access Control Lists) ao esquema de banco de dados que executa instruções do Apache Iceberg. - Conceder Atribuições de Esquema para Operações de Iceberg
ODWROLEdeve ser concedido a qualquer esquema que crie ou gerencie tabelas externas de Iceberg.
Tópico principal: Consultar Tabelas de Iceberg do Apache
Credenciais do Iceberg: Catálogo REST versus Armazenamento de Objetos
Este tópico explica como o Apache Iceberg gerencia e acessa dados por meio das duas credenciais: Catálogo REST e Armazenamento de Objetos. Você também pode consultar duas maneiras diferentes de gerenciar informações de tabelas em formatos de tabela de data lake, como o Apache Iceberg.
Tabelas Externas Gerenciadas por Catálogo versus Metadados Diretos
A seção a seguir compara tabelas externas gerenciadas por catálogo com tabelas externas de metadados diretos destacando suas principais diferenças.
-
Gerenciado por catálogo (Unidade / Polaris / AWS Glue)
O que é: Metadados, esquema e snapshot "atual" resolvidos por meio de um catálogo REST.
Comportamento: reflete automaticamente o instantâneo mais recente do catálogo; permissões, tags e linhagem centralizadas.
O melhor para: Produtos de dados empresariais, compartilhamento entre motores, governança consistente e capacidade de descoberta (o catálogo é o único ponto de verdade).
-
-
Metadados Diretos (Filesystem via
metadata.json)O que é: A tabela externa aponta diretamente para um
metadata.jsonespecífico.Comportamento: um snapshot fixo e reproduzível; sem avanços automáticos; governança limitada a ACLs de armazenamento de objetos.
Melhor para: Experimentos, testes, auditorias.
-
Credenciais do REST versus Armazenamento de Objetos
Credenciais do Catálogo REST
As credenciais REST são obrigatórias ao estabelecer conexão com um catálogo REST do Apache Iceberg. O catálogo REST gerencia metadados para tabelas Iceberg expondo pontos finais RESTful. Para autenticação, as credenciais REST geralmente são baseadas no OAuth, exigindo que você obtenha um token ao portador de um ponto final de token usando um client ID e um secret.
-
rest_auth_cred: autentica com o serviço de catálogo (por exemplo, Unity ou Polaris). credential_name: autentica-se no armazenamento de objetos no qual residem os dados e metadados do Iceberg.
Credenciais de venda não são suportadas no momento. As credenciais de venda referem-se ao processo controlado de distribuição ou extração de credenciais de acesso (como nomes de usuário e senhas, chaves de API ou tokens) quando são necessárias, geralmente automaticamente ou sob demanda, em vez de armazená-las estaticamente em arquivos de configuração ou scripts.
Credenciais do Serviço Object Store
As credenciais do armazenamento de objetos são usadas quando as tabelas do Apache Iceberg são armazenadas diretamente no armazenamento de objetos na nuvem, como o Oracle Cloud Infrastructure (OCI) Object Storage ou o Amazon S3.
As Credenciais permitem que o Autonomous Database acesse e leia arquivos (como dados Parquet e manifestos de metadados) diretamente do armazenamento de objetos na nuvem.
Use credenciais de armazenamento de objetos ao definir tabelas externas que apontam diretamente para arquivos Parquet/metadados nos buckets do OCI/S3.
Tópico principal: Configurar Requisitos para Iceberg
Pré-requisito: Conceder Listas de Controle de Acesso à Rede (ACLs) para Operações de Iceberg
Este tópico explica como conceder privilégios ACL (Listas de Controle de Acesso) de rede ao esquema de banco de dados que executa instruções do Apache Iceberg.
Antes de consultar tabelas do Apache Iceberg no Oracle Database 23ai, configure os privilégios de acesso à rede. As operações do Iceberg se comunicam com serviços externos por HTTPS, incluindo proxies HTTP do sistema, pontos finais do serviço de catálogo e repositórios do Object Storage, como Amazon S3 ou OCI Object Storage.
Para permitir essas conexões, conceda listas de controle de acesso (ACLs) à rede para o esquema de banco de dados que executa consultas Iceberg ou instruções DDL (Data Definition Language). Se as ACLs necessárias não forem concedidas, as operações falharão com o erro, como ORA-20000: Failed to generate column list, ORA-24247: network access denied by access control list (ACL).
- O esquema que cria e possui a tabela externa Iceberg deve ter acesso HTTPS de saída aos nomes de host necessários.
- Os usuários que só precisam executar instruções
SELECTem uma tabela externa de Iceberg existente não exigem essas ACLs; eles só precisam de privilégios padrão, comoDWROLEeSELECTna tabela.
BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
host => 'objectstorage.<region>.oraclecloud.com',
lower_port => 443,
upper_port => 443,
ace => xs$ace_type(
privilege_list => xs$name_list('http'),
principal_name => '<schema>',
principal_type => xs_acl.ptype_db
)
);
END;
/ Forneça os valores apropriados para o nome <schema> e <region> com sua região do OCI.
Este exemplo concede a um esquema de banco de dados Oracle permissão para fazer solicitações HTTPS de saída para um ponto final do OCI Object Storage.
O procedimento DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE adiciona uma Entrada de Controle de Acesso (ACE) que permite ao esquema especificado usar o privilégio http (que inclui HTTPS) ao estabelecer conexão com o ponto final regional do OCI Object Storage na porta 443. Esse acesso é necessário para ler os metadados da tabela Iceberg e recuperar arquivos de dados armazenados no OCI Object Storage.
Consulte DBMS_NETWORK_ACL_ADMIN para obter mais informações.
Nomes de Host por Configuração
DBMS_CLOUD.CREATE_EXTERNAL_TABLE:
| Armazenamento | Nomes de host |
|---|---|
|
OCI Object Storage (sem catálogo externo ou HadoopCatalog) |
|
|
AWS S3 (sem catálogo externo) |
|
|
Catálogo de cola da AWS + S3 |
|
|
Catálogo Unity do Databricks + Azure (ADLS Gen2) |
|
|
Catálogo Unity do Databricks + S3 |
|
|
Snowflake Polaris + S3 |
|
|
Snowflake Polaris + Azure (ADLS Gen2) |
|
Se você utilizar um proxy HTTPS, deverá configurar ACLs para o host proxy também. Consulte Chamar Web Services do Autonomous AI Database para obter mais informações.
Tópico principal: Configurar Requisitos para Iceberg
Conceder Atribuições de Esquema para Operações de Iceberg
O DWROLE deve ser concedido a qualquer esquema que crie ou gerencie tabelas externas do Iceberg.
No Autonomous AI Database, DWROLE é o conjunto de privilégios padrão para executar o carregamento de dados e operações relacionadas usando o pacote DBMS_CLOUD. A atribuição dessa atribuição garante que o esquema tenha os privilégios necessários para acessar o armazenamento na nuvem e criar, consultar e gerenciar tabelas externas do Iceberg.
Tópico principal: Configurar Requisitos para Iceberg
Workflow Típico da Consulta de Tabelas de Iceberg do Apache
Antes de começar a consultar Tabelas do Apache Iceberg, você deve estar familiarizado com seu fluxo de trabalho. Esta seção explica como definir tabelas externas para acessar dados apresentados como um workflow de configuração de ponta a ponta com cinco etapas principais.
- Decidir Seu Modelo de Acesso:
- Gerenciado por Catálogo: Use esse modelo quando quiser que um catálogo controlado e atualizado continuamente sirva como a única origem da verdade para metadados de dados. Esse catálogo central ajuda a manter a consistência e a governança sobre seus dados.
- Metadados Diretos: Use esse modelo quando trabalhar com um snapshot fixo de metadados (por meio de metadata.json). Este modelo é mais simples, mas estático, não é recomendado para produção, pois não possui atualizações automáticas e governança.
- Reunir o Que Você Precisa:
- Gerenciado por Catálogo: Você deve ter acesso ao ponto final do catálogo (se aplicável), ao caminho exato da tabela e ao local do armazenamento de objetos onde residem os arquivos de dados reais.
- Metadados Diretos: Você só precisa do URI que aponte para o arquivo
metadata.jsonraiz mais a localização do armazenamento de objetos desses arquivos de dados.
- Preparar Credenciais:
- Para configurações de Catalog-Managed, adquira credenciais para acessar o catálogo.
- As credenciais do armazenamento de objetos são sempre necessárias, independentemente do modelo para ler arquivos de dados e metadados.
Observação
Não há suporte para venda automática de credenciais e para o AWS AssumeRole para acesso ao catálogo.
- Criar a Tabela Externa:
- Em Gerenciado por Catálogo, a tabela consulta dados por meio do catálogo e acessa arquivos no armazenamento de objetos.
- Em Metadados Diretos, a tabela aponta diretamente para o arquivo
metadata.jsonespecífico sem envolvimento do catálogo.
-
Verificação Rápida e Expectativas:
Execute uma consulta simples, como
COUNT(*), para verificar a configuração da tabela e garantir que ela possa acessar os dados corretamente.
Tópico principal: Consultar Tabelas de Iceberg do Apache
Inícios rápidos do profissional de saúde
Este capítulo descreve o processo para configurar o acesso a dados externos com diferentes provedores de dados na nuvem.
Tópicos:
- Catálogo do Databricks Unity
Esta seção explica o workflow que vincula o Databricks a formatos de tabela abertos por meio do UniForm, facilitando o acesso aos dados do Delta Lake em ambientes que suportam Iceberg. - Snowflake Polaris
Este tópico descreve o Snowflake Polaris (catálogo REST) que permite acesso seguro às tabelas Iceberg do Apache Polaris por meio de uma API REST usando a autenticação OAuth2. - Catálogo de Colas AWS
Este tópico descreve como acessar dados do Amazon S3 por meio do Catálogo de Dados de Cola com tabelas de Iceberg registradas usando credenciais AWS. - Hadoop/Filesystem (arquivo de metadados direto)
Este tópico explica como criar uma credencial de armazenamento para acessar o arquivo de metadados de uma tabela Iceberg diretamente de armazenamentos de objetos como ADLS, S3 ou OCI. Ele explica a categorização dos tipos de gerenciamento direto de metadados para tabelas Iceberg armazenadas diretamente no sistema de arquivos (geralmente sistemas de arquivos compatíveis com Hadoop) sem usar um serviço de catálogo.
Tópico principal: Consultar Tabelas de Iceberg do Apache
Catálogo Unity do Databricks
Esta seção explica o workflow que vincula o Databricks a formatos de tabela abertos por meio do UniForm, facilitando o acesso aos dados do Delta Lake em ambientes que suportam Iceberg.
Catálogo Unity do Databricks (caminho UniForm)
-
Uma tabela Delta criada com o UniForm para que os clientes Iceberg possam lê-la.
-
Arquivos de tabela no Azure ADLS Gen2 ou AWS S3.
-
Privilégios do Unity Catalog para acesso externo (por exemplo, acesso a dados externos ativado); conceda
EXTERNAL USE SCHEMAao seu principal). -
Auth: OAuth2 (recomendado) ou Token de Acesso Pessoal (para testes rápidos).
-
Configurar ACLs de rede: Antes de criar uma tabela externa que use o Catálogo do Databricks Unity com dados armazenados no Armazenamento Blob do Azure, você deve conceder ao esquema Oracle permissão para fazer conexões HTTPS de saída com os serviços necessários do Azure. Como o Oracle Database bloqueia o acesso à rede por padrão, você deve atualizar a ACL (Network Access Control List) para permitir que o esquema atinja:
-
O espaço de trabalho do Databricks, que hospeda APIs do Unity Catalog e pontos finais de token/autenticação.
-
A conta de Armazenamento do Azure, que armazena os metadados e os arquivos de dados da tabela Iceberg.
Exemplo de configuração de ACLs de redeBEGIN -- Databricks workspace (Unity Catalog and token endpoint) DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE( host => '<workspace>.azuredatabricks.net', lower_port => 443, upper_port => 443, ace => xs$ace_type( privilege_list => xs$name_list('http'), principal_name => '<schema>', principal_type => xs_acl.ptype_db ) ); -- Azure Storage (metadata and data files) DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE( host => '<storage-account>.blob.core.windows.net', lower_port => 443, upper_port => 443, ace => xs$ace_type( privilege_list => xs$name_list('http'), principal_name => '<schema>', principal_type => xs_acl.ptype_db ) ); END; /Substitua os seguintes placeholders:
<workspace>: O nome do espaço de trabalho do Databricks usado no URL do Azure Databricks.<storage-account>: O nome da conta do Armazenamento do Azure que contém metadados e arquivos de dados do Iceberg.<schema>: O esquema Oracle que executará oDBMS_CLOUD.CREATE_EXTERNAL_TABLEe exigirá acesso HTTPS.
-
O Native Iceberg via Iceberg REST ainda não é compatível com nossa integração. Use Delta com UniForm (legível para Iceberg) e exponha-o via Unity Iceberg REST: https://<workspace-host>/api/2.1/unity-catalog/iceberg.
Crie uma tabela UniForm (legível para Iceberg) em Databricks:
customers_iceberg no Databricks dentro do catálogo e esquema do Unity Catalog especificados:USE CATALOG <your_catalog>;
USE SCHEMA <your_schema>;
CREATE TABLE customers_iceberg (
id INT,
name STRING
)
TBLPROPERTIES(
'delta.columnMapping.mode'='name',
'delta.enableIcebergCompatV2'='true',
'delta.universalFormat.enabledFormats'='iceberg'
);
INSERT INTO customers_iceberg (id, name) VALUES
(1,'Alice'), (2,'Bob'), (3,'Carol');Credencial do armazenamento de objetos (ADLS Gen2)
BEGIN
BEGIN DBMS_CLOUD.DROP_CREDENTIAL('AZURE_BLOB_CRED'); EXCEPTION WHEN OTHERS THEN NULL; END;
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'AZURE_BLOB_CRED',
username => '<storage-account-or-sas-username>',
password => '<storage-key-or-sas-token>'
);
END;
/Criar Credenciais do Catálogo REST com OAuth2
-- Databricks service principal (client_id / client_secret)
BEGIN
BEGIN DBMS_CLOUD.DROP_CREDENTIAL('UNITY_OAUTH'); EXCEPTION WHEN OTHERS THEN NULL; END;
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'UNITY_OAUTH',
username => '<client_id>',
password => '<client_secret>'
);
END;
/
BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
table_name => 'CUSTOMERS_ICEBERG',
credential_name => 'AZURE_BLOB_CRED',
format => '{
"access_protocol": {
"protocol_type": "iceberg-rest",
"protocol_config": {
"iceberg_catalog_type": "unity",
"rest_catalog_endpoint": "https://<workspace-host>/api/2.1/unity-catalog/iceberg",
"rest_authentication": {
"rest_auth_cred": "UNITY_OAUTH",
"rest_auth_endpoint": "https://<workspace-host>/oidc/v1/token"
},
"table_path": ["<your_catalog>","<your_schema>","customers_iceberg"]
}
}
}'
);
END;
/
SELECT COUNT(*) FROM CUSTOMERS_ICEBERG;Criar Credenciais do Catálogo REST com PAT (Personal Access Token)
BEGIN
BEGIN DBMS_CLOUD.DROP_CREDENTIAL('UNITY_PAT'); EXCEPTION WHEN OTHERS THEN NULL; END;
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'UNITY_PAT',
username => 'token',
password => '<dapiXXXXXXXXXXXXXXXXXXXXXXXX>'
);
END;
/
BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
table_name => 'CUSTOMERS_ICEBERG',
credential_name => 'AZURE_BLOB_CRED',
format => '{
"access_protocol": {
"protocol_type": "iceberg-rest",
"protocol_config": {
"iceberg_catalog_type": "unity",
"rest_catalog_endpoint": "https://<workspace-host>/api/2.1/unity-catalog/iceberg",
"rest_authentication": { "rest_auth_cred": "UNITY_PAT" },
"table_path": ["<your_catalog>","<your_schema>","customers_iceberg"]
}
}
}'
);
END;
/
SELECT COUNT(*) FROM CUSTOMERS_ICEBERG;
Tópico principal: Inícios Rápidos do Provedor
Snowflake Polaris
Este tópico descreve o Snowflake Polaris (catálogo REST) que permite acesso seguro às tabelas do Apache Polaris Iceberg por meio de uma API REST usando a autenticação OAuth2.
Snowflake Polaris (catálogo REST)
-
Catálogo e endpoint da Polaris Iceberg disponíveis para a sua conta.
-
Arquivos de tabela acessíveis em seu armazenamento de objetos (S3/ADLS, conforme aplicável).
-
Auth: OAuth2 recomendado (credenciais do cliente) ou outro mecanismo de token suportado pelo Polaris.
-
Antes de criar uma tabela externa que acesse um catálogo do Iceberg armazenado no Snowflake e no Amazon S3, o esquema do banco de dados deve ter permissão para fazer conexões HTTPS de saída com esses serviços. O Oracle Database restringe o acesso à rede por padrão; portanto, você deve atualizar a ACL (Network Access Control List) para permitir que o esquema atinja:
-
Seus pontos finais de conta do Snowflake, usados para acesso ao catálogo, autenticação e troca de tokens
-
O ponto final regional do Amazon S3 no qual os metadados e os arquivos de dados do Iceberg são armazenados
-
(Opcional) O ponto final S3 não regional, exigido por algumas APIs da AWS e operações de pesquisa de região
Exemplo de configuração de ACLs de redeBEGIN -- Allow HTTPS access to your Snowflake account (Polaris and token endpoints) DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE( host => '<account>.snowflakecomputing.com', lower_port => 443, upper_port => 443, ace => xs$ace_type( privilege_list => xs$name_list('http'), principal_name => '<schema>', principal_type => xs_acl.ptype_db ) ); -- Allow HTTPS access to the S3 bucket (regional endpoint for data/metadata) DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE( host => '<bucket>.s3.<region>.amazonaws.com', lower_port => 443, upper_port => 443, ace => xs$ace_type( privilege_list => xs$name_list('http'), principal_name => '<schema>', principal_type => xs_acl.ptype_db ) ); -- Optional: non-regional S3 endpoint (used for some APIs/region lookup) DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE( host => '<bucket>.s3.amazonaws.com', lower_port => 443, upper_port => 443, ace => xs$ace_type( privilege_list => xs$name_list('http'), principal_name => '<schema>', principal_type => xs_acl.ptype_db ) ); END; /Substitua os seguintes placeholders:
-
<account>: Identificador da sua conta do Snowflake. -
<schema>: O esquema que precisa de acesso HTTPS de saída. -
<bucket>: O nome do bucket do Amazon S3 que contém os dados e metadados do Iceberg. -
<region>: A região da AWS na qual o bucket S3 está hospedado.
-
Criar uma Credencial OAuth2:
O procedimento a seguir cria uma credencial OAuth2 com o nome POLARIS_OAUTH para autenticar o acesso a um catálogo do Apache Polaris Iceberg.
BEGIN
BEGIN DBMS_CLOUD.DROP_CREDENTIAL('POLARIS_OAUTH'); EXCEPTION WHEN OTHERS THEN NULL; END;
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'POLARIS_OAUTH',
username => '<client_id>',
password => '<client_secret>'
);
END;
/
Criar Credencial de Armazenamento
O procedimento a seguir cria uma credencial de armazenamento chamada S3_CRED para acessar o armazenamento de objetos (por exemplo, Amazon S3) com um ID de chave de acesso da AWS e uma chave de acesso secreta.
-- Storage credential for your object store (example: S3)
BEGIN
BEGIN DBMS_CLOUD.DROP_CREDENTIAL('S3_CRED'); EXCEPTION WHEN OTHERS THEN NULL; END;
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'S3_CRED',
username => '<aws_access_key_id>',
password => '<aws_secret_access_key>'
);
END;
/Criar Tabela Externa
SALES_POLARIS no Databricks que acessa dados armazenados usando o formato Iceberg gerenciado pelo catálogo Polaris.BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
table_name => 'SALES_POLARIS',
credential_name => 'S3_CRED',
format => '{
"access_protocol": {
"protocol_type": "iceberg-rest",
"protocol_config": {
"iceberg_catalog_type": "polaris",
"rest_catalog_endpoint": "<https://<your-polaris-endpoint>/...>",
"rest_authentication": {
"rest_auth_cred": "POLARIS_OAUTH",
"rest_auth_endpoint": "<https://<your-oauth-token-endpoint>>"
},
"table_path": ["<db>","<schema>","<table>"]
}
}
}'
);
END;
/Verificação Rápida da Funcionalidade
SELECT COUNT(*) FROM SALES_POLARIS;Mantenha os placeholders do URL do ponto final e do token, pois eles variam de acordo com a configuração da Polaris.
Tópico principal: Inícios Rápidos do Provedor
Catálogo do AWS Glue
Este tópico descreve como acessar dados do Amazon S3 por meio do Catálogo de Dados de Cola com tabelas de Iceberg registradas usando credenciais da AWS.
-
Catálogo de Dados de Colagem com a tabela Iceberg registrada (objetos S3 acessíveis).
Nome da região para Cola (por exemplo,
us-east-1). -
Autenticação: Chave/segredo de acesso para S3; Acesso de cola por meio da configuração do catálogo.
-
A venda de credenciais por meio do AWS ARN não é suportada. As credenciais explícitas devem ser fornecidas.
-
Antes de criar uma tabela externa que use o AWS Glue como catálogo Iceberg e o Amazon S3 como camada de armazenamento, o esquema Oracle deve receber permissão para fazer solicitações HTTPS de saída para esses serviços da AWS. O Oracle Database restringe o acesso à rede por padrão; portanto, você deve atualizar a ACL (Network Access Control List) para permitir que o esquema atinja:
-
AWS Glue, que fornece a API do catálogo Iceberg
-
O ponto final regional S3, no qual os metadados e os arquivos de dados do Iceberg são armazenados
-
O ponto final S3 não regional, que é necessário para determinadas APIs da AWS e operações de pesquisa de região
Exemplo de configuração de ACLs de redeBEGIN -- AWS Glue (catalog API) DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE( host => 'glue.<region>.amazonaws.com', lower_port => 443, upper_port => 443, ace => xs$ace_type( privilege_list => xs$name_list('http'), principal_name => '<schema>', principal_type => xs_acl.ptype_db ) ); -- S3 bucket (regional endpoint for data and metadata files) DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE( host => '<bucket>.s3.<region>.amazonaws.com', lower_port => 443, upper_port => 443, ace => xs$ace_type( privilege_list => xs$name_list('http'), principal_name => '<schema>', principal_type => xs_acl.ptype_db ) ); -- Optional: non-regional S3 endpoint (used for some APIs or region lookup) DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE( host => '<bucket>.s3.amazonaws.com', lower_port => 443, upper_port => 443, ace => xs$ace_type( privilege_list => xs$name_list('http'), principal_name => '<schema>', principal_type => xs_acl.ptype_db ) ); END; /Substitua os seguintes placeholders:
-
<region>: A região da AWS na qual a Glue e o bucket S3 estão localizados. -
<bucket>: O nome do bucket S3 que armazena dados do Iceberg e arquivos de metadados. -
<schema>: O esquema Oracle que executa oDBMS_CLOUD.CREATE_EXTERNAL_TABLEe requer acesso HTTPS.
-
Criar uma credencial de armazenamento
O procedimento a seguir cria uma credencial de armazenamento chamada S3_CRED no Databricks para permitir o acesso aos dados armazenados em um bucket do Amazon S3.
-- S3 credential
BEGIN
BEGIN DBMS_CLOUD.DROP_CREDENTIAL('S3_CRED'); EXCEPTION WHEN OTHERS THEN NULL; END;
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'S3_CRED',
username => '<aws_access_key_id>',
password => '<aws_secret_access_key>'
);
END;
/Criar uma tabela Iceberg externa
ORDERS_GLUE no Databricks.BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
table_name => 'ORDERS_GLUE',
credential_name => 'S3_CRED',
format => '{
"access_protocol": {
"protocol_type": "iceberg",
"protocol_config": {
"iceberg_catalog_type": "aws_glue",
"iceberg_glue_region": "us-east-1",
"table_path": ["<database>","<table>"]
}
}
}'
);
END;
/Verificação Rápida da Funcionalidade
ORDERS_GLUE, verificando a conexão e a acessibilidade dos dados.SELECT COUNT(*) FROM ORDERS_GLUE;Tópico principal: Inícios Rápidos do Provedor
Hadoop/Filesystem (arquivo de metadados direto)
Este tópico explica como criar uma credencial de armazenamento para acessar o arquivo de metadados de uma tabela Iceberg diretamente de armazenamentos de objetos como ADLS, S3 ou OCI. Ele explica a categorização dos tipos de gerenciamento direto de metadados para tabelas Iceberg armazenadas diretamente no sistema de arquivos (geralmente sistemas de arquivos compatíveis com Hadoop) sem usar um serviço de catálogo.
Exemplo: Consultar uma tabela Iceberg usando Metadados JSON
- Você pode acessar o manifesto raiz do Iceberg da tabela (
metadata.json) no seu armazenamento de objetos (ADLS/S3/OCI). - Esse caminho é point-in-time. Para seguir novos snapshots, recrie a tabela externa.
Criar uma Credencial de Armazenamento
Este procedimento primeiro tenta eliminar uma credencial existente chamada STORE_CRED se ela existir (ignorando erros). Em seguida, ele cria uma nova credencial chamada STORE_CRED.
-- Storage credential for wherever the metadata.json lives
BEGIN
BEGIN DBMS_CLOUD.DROP_CREDENTIAL('STORE_CRED'); EXCEPTION WHEN OTHERS THEN NULL; END;
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'STORE_CRED',
username => '<user-or-key>',
password => '<secret-or-token>'
);
END;
/Criar uma Tabela Externa
CUSTOMERS_META.BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
table_name => 'CUSTOMERS_META',
credential_name => 'STORE_CRED',
file_uri_list => 'https://<bucket-or-container>/<path>/metadata.json',
format => '{"access_protocol":{"protocol_type":"iceberg"}}'
);
END;
/Verificação Rápida da Funcionalidade
O procedimento a seguir executa uma consulta para contar todas as linhas na tabela externa.
SELECT COUNT(*) FROM CUSTOMERS_META;Exemplo: Consultar uma tabela Iceberg usando o Catálogo do Hadoop no OCI
Neste exemplo, consultamos a tabela Iceberg db.icebergTablePy, criada usando o OCI Data Flow, em que o Spark usa a implementação HadoopCatalog para o catálogo Iceberg. O HadoopCatalog usa uma pasta do lakehouse iceberg no bucket my-iceberg-bucket e coloca os metadados do Iceberg em uma subpasta $database_name/$table_name nesse diretório. Ele também usa um arquivo version-hint.text que contém o número da versão da versão mais recente do arquivo de metadados.
db.icebergTablePy da seguinte forma:BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
table_name => 'iceberg_parquet_time_dim3',
credential_name => 'OCI_CRED',
format => '{
"access_protocol": {
"protocol_type": "iceberg",
"protocol_config": {
"iceberg_catalog_type": "hadoop",
"iceberg_lakehouse": "https://objectstorage.uk-cardiff-1.oraclecloud.com/n/my-tenancy/b/my-iceberg-bucket/o/iceberg",
"iceberg_table_path": "db.icebergTablePy"
}
}
}'
);
END;
/Tópico principal: Inícios Rápidos do Provedor
Referências
Esta seção fornece uma lista de referências para os links citados neste capítulo:
Tópico principal: Consultar Tabelas de Iceberg do Apache