Consultar Tabelas de Iceberg do Apache
O Autonomous Database suporta a consulta de tabelas do Apache Iceberg.
- Sobre a Consulta de Tabelas de Iceberg do Apache
O Autonomous 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. - Exemplos: Consultando Tabelas de Iceberg do Apache
Esses exemplos mostram como consultar tabelas do Apache Iceberg na AWS (Amazon Web Services) e na OCI (Oracle Cloud Infrastructure), usando um catálogo de dados e usando URLs diretos para o arquivo de manifesto raiz.
Tópico principal: Consultar Dados Externos com Autonomous Database
Sobre a Consulta de Tabelas de Iceberg do Apache
O Autonomous Database suporta a consulta de tabelas do Apache Iceberg.
Configurações Suportadas
- Tabelas do Iceberg na AWS da Amazon Web Services:
- Tabelas Iceberg registradas no AWS Glue Data Catalog, criadas com o Spark ou Athena.
Para obter mais informações, consulte Usar o conector do AWS Glue para ler e gravar tabelas do Apache Iceberg com transações ACID e executar deslocamento no tempo e Usando tabelas do Iceberg.
- Tabelas Iceberg armazenadas no AWS S3 fornecendo diretamente o URL do arquivo de metadados raiz.
- Tabelas Iceberg registradas no AWS Glue Data Catalog, criadas com o Spark ou Athena.
- Tabelas Iceberg no Oracle Cloud Infrastructure (OCI) Object Storage:
- Tabelas Iceberg geradas com o OCI Data Flow usando um Catálogo Hadoop.
Para obter mais informações, consulte Exemplos do Oracle Data Flow e Usando um Catálogo do Hadoop.
- Tabelas Iceberg armazenadas no OCI Object Storage fornecendo diretamente o URL do arquivo de metadados raiz.
- Tabelas Iceberg geradas com o OCI Data Flow usando um Catálogo Hadoop.
- Tabelas de icebergs definidas em um catálogo do Apache REST Iceberg:
Observação
Somente o Oracle Database 19c suporta catálogos do Apache Iceberg Rest.- Tabelas externas cuja cláusula de localização aponta para uma tabela Iceberg definida em um catálogo REST do Iceberg. Consulte CREATE_EXTERNAL_TABLE Procedure para Apache Iceberg, para obter mais detalhes.
Restrições
- Mesas de iceberg particionadas
O sistema Oracle não suporta tabelas particionadas de Iceberg.
- Atualizações em nível de linha das tabelas Iceberg
A Oracle não suporta mesclagem de leitura para atualizações de tabela Iceberg. As consultas que encontrarem arquivos excluídos nos metadados do Iceberg falharão. Para obter mais informações sobre mesclagem em leitura, consulte Enum RowLevelOperationMode.
- Evolução do esquema
O esquema para tabelas externas do Oracle é fixo e reflete a versão do esquema Iceberg no momento da criação da tabela externa. As consultas falharão se os metadados do Iceberg apontarem para uma versão de esquema diferente em comparação com a usada para criar a tabela Iceberg. Se o esquema do Iceberg for alterado após a criação da tabela externa, é recomendável recriar a tabela externa.
Tópico principal: Consultar 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
Exemplos: Consultando Tabelas de Iceberg do Apache
Esses exemplos mostram como consultar tabelas do Apache Iceberg na AWS (Amazon Web Services) e na OCI (Oracle Cloud Infrastructure), usando um catálogo de dados e URLs diretos para o arquivo de manifesto raiz.
Para obter informações detalhadas sobre como criar tabelas externas para o Apache Iceberg, consulte CREATE_EXTERNAL_TABLE Procedure for Apache Iceberg .
Consultar uma tabela Iceberg na AWS usando um Catálogo de Dados Glue
Neste exemplo, consultamos a tabela Iceberg iceberg_parquet_time_dim
.
Descrição da ilustração example_1_table.png
A tabela pertence ao banco de dados de colagem my-iceberg-db
e é armazenada na pasta s3://my-iceberg-bucket/iceberg-loc
.
Os detalhes da tabela para iceberg_parquet_time_dim
são mostrados aqui:

Descrição da ilustração example_1_details_v1.png
Podemos criar uma tabela externa para iceberg_parquet_time_dim
da seguinte forma:
BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
table_name => 'iceberg_parquet_time_dim',
credential_name => 'AWS_CRED',
file_uri_list => '',
format =>
'{"access_protocol":
{
"protocol_type": "iceberg",
"protocol_config":
{
"iceberg_catalog_type": "aws_glue",
"iceberg_glue_region": "us-west-1",
"iceberg_table_path": "my-iceberg-db.iceberg_parquet_time_dim"
}
}
}'
);
END;
/
Na seção protocol_config, especificamos que a tabela usa o AWS Glue como o tipo de catálogo e definimos a região do catálogo como us-west-1
.
A credencial AWS_CRED
é criada usando dbms_cloud.create_credential
com uma chave de API da AWS. A instância do Catálogo de Dados de Colagem é determinada pelo ID da conta associado ao AWS_CRED
para a região us-west-1
, pois há uma única região do Catálogo de Dados de Colagem para cada conta. O elemento iceberg_table_path
na seção protocol_config
usa um caminho $database_name.$table_name
para especificar o nome da tabela de Colagem e o nome do banco de dados. Por fim, os parâmetros column_list
e field_list
são deixados nulos porque o esquema da tabela é derivado automaticamente dos metadados do Iceberg.
Para obter informações sobre como criar a credencial, consulte Procedimento CREATE_CREDENTIAL.
Para obter informações sobre recursos do AWS Glue, consulte Especificando ARNs de recursos do AWS Glue.
Consultar uma tabela Iceberg na AWS usando a localização do arquivo de metadados raiz
Se soubermos a localização do arquivo de metadados de uma tabela Iceberg, poderemos criar uma tabela externa sem especificar um catálogo, da seguinte forma:
BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
table_name => 'iceberg_parquet_time_dim',
credential_name => 'AWS_CRED',
file_uri_list => 'https://my-iceberg-bucket.s3.us-west-1.amazonaws.com/iceberg-loc/metadata/00004-1758ee2d-a204-4fd9-8d52-d17e5371a5ce.metadata.json',
format =>'{"access_protocol":{"protocol_type":"iceberg"}}');
END;
/
Usamos o parâmetro file_uri_list
para especificar a localização do arquivo de metadados no formato de URL de estilo virtual hospedado do AWS S3. Para obter informações sobre esse formato, consulte Métodos para acessar um bucket do AWS S3.
Neste exemplo, o banco de dados acessa o arquivo de metadados diretamente, portanto não há necessidade de fornecer uma seção protocol_config
no parâmetro format
. Ao usar o local do arquivo de metadados para criar uma tabela externa, o banco de dados consulta o snapshot mais recente referenciado pelo arquivo de metadados. Atualizações subsequentes na tabela Iceberg, que criam novos snapshots e novos arquivos de metadados, não serão visíveis para o banco de dados.
Consultar uma tabela Iceberg que usa o Catálogo do Hadoop na OCI
Neste exemplo, consultamos a tabela Iceberg icebergTablePy
, criada usando o OCI Data Flow, em que o Spark usa a implementação HadoopCatalog para o catálogo Iceberg. O HadoopCatalog usa um diretório warehouse
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. Consulte Suporte Iceberg no OCI Data Flow para obter o exemplo no Github.
A tabela de amostra db.icebergTablePy
foi criada usando uma pasta warehouse
, chamada iceberg
, no bucket my-iceberg-bucket
do OCI. O layout de armazenamento no OCI para a tabela icebergTablePy
é mostrado abaixo:

Descrição da ilustração example_3_table_v1.png
Crie uma tabela externa para a tabela db.icebergTablePy
da seguinte forma:
BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
table_name => 'iceberg_parquet_time_dim3',
credential_name => 'OCI_CRED',
file_uri_list => '',
format =>'{"access_protocol":{"protocol_type":"iceberg",
"protocol_config":{"iceberg_catalog_type": "hadoop",
"iceberg_warehouse":"https://objectstorage.uk-cardiff-1.oraclecloud.com/n/my-tenancy/b/my-iceberg-bucket/o/iceberg",
"iceberg_table_path": "db.icebergTablePy"}}}');
END;
/
Consultar uma tabela Iceberg no OCI usando a localização do arquivo de metadados raiz
Podemos consultar a tabela Iceberg descrita na seção anterior usando diretamente o URL do arquivo de metadados, da seguinte forma:
BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
table_name => 'iceberg_parquet_time_dim4',
credential_name => 'OCI_CRED',
file_uri_list => 'https://objectstorage.uk-cardiff-1.oraclecloud.com/n/my-tenancy/b/my-iceberg-bucket/o/iceberg/db/icebergTablePy/metadata/v2.metadata.json',
format =>'{"access_protocol":{"protocol_type":"iceberg"}}'
);
END;
/
Neste exemplo, usamos o parâmetro file_uri_list
para especificar o URI do arquivo de metadados usando o formato de URI nativo do OCI. Ao usar o URI do arquivo de metadados, a tabela externa sempre consulta o snapshot mais recente armazenado no arquivo específico. As atualizações subsequentes que geram novos snapshots e novos arquivos de metadados não estão acessíveis à consulta.
Para obter mais informações sobre o formato de URI nativo do OCI, consulte Formatos de URI do Cloud Object Storage.
Tópico principal: Consultar Tabelas de Iceberg do Apache