Consultar Tabelas de Iceberg do Apache
O Autonomous Database suporta a consulta de tabelas do Apache Iceberg.
- Sobre a Consulta de Tabelas do Apache Iceberg
O Autonomous Database suporta a consulta de tabelas do Apache Iceberg armazenadas no Amazon Web Services (AWS) ou no Oracle Cloud Infrastructure (OCI) Object Storage. - Conceitos Relacionados a Consultar Tabelas do Apache Iceberg
Uma compreensão dos conceitos a seguir é útil para consultar tabelas do Apache Iceberg. - Exemplos: Consultando Tabelas do Apache Iceberg
Esses exemplos mostram como consultar tabelas do Apache Iceberg na Amazon Web Services (AWS) e na Oracle Cloud Infrastructure (OCI), usando um catálogo de dados e usando URLs diretos para o arquivo de manifesto raiz.
Tópico principal: Consultar Dados Externos com o Autonomous Database
Sobre como Consultar Tabelas do Apache Iceberg
O Autonomous Database suporta consulta de tabelas do Apache Iceberg armazenadas no Amazon Web Services (AWS) ou no Oracle Cloud Infrastructure (OCI) Object Storage.
Configurações Compatíveis
- Tabelas Iceberg na AWS:
- Tabelas Iceberg registradas no AWS Glue Data Catalog, criadas com o Spark ou o Athena.
Para obter mais informações, consulte Usar o conector AWS Glue para ler e gravar tabelas do Apache Iceberg com transações ACID e executar viagens no tempo e Usar tabelas Iceberg.
- Tabelas Iceberg armazenadas no AWS S3 fornecendo diretamente o URL para o arquivo de metadados raiz.
- Tabelas Iceberg registradas no AWS Glue Data Catalog, criadas com o Spark ou o Athena.
- Tabelas de iceberg na OCI:
- Tabelas Iceberg geradas com o OCI Data Flow usando um Catálogo do 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 do Hadoop.
Restrições
- Mesas de iceberg particionadas
A Oracle não suporta tabelas particionadas do Iceberg.
- Atualizações de nível de linha de mesas de Iceberg
A Oracle não suporta mesclagem em 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 na leitura, consulte Enumir RowLevelOperationMode.
- Evolução do esquema
O esquema para tabelas externas da 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 do Iceberg. Se o esquema do Iceberg for alterado após a criação da tabela externa, é recomendável que a tabela externa seja recriada.
Tópico principal: Consultar Tabelas de Iceberg do Apache
Conceitos Relacionados a Consultar Tabelas do Apache Iceberg
Uma compreensão dos conceitos a seguir é útil para consultar tabelas do Apache Iceberg.
Catálogo Iceberg
O catálogo Iceberg é um serviço que gerencia metadados de tabelas, como instantâneos de tabelas, esquema de tabelas e informações de particionamento. Para consultar o instantâneo 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 HadoopCatalog usada pelo Spark.
Para obter mais informações, consulte Concorrência Otimista.
Arquivos de Metadados
O arquivo de metadados é um documento JSON que controla os snapshots de tabelas, 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 de Iceberg para obter mais informações.
Transações
O Iceberg suporta atualizações de nível de linha para tabelas usando cópia na gravação ou mesclagem na leitura. A cópia na gravação gera novos arquivos de dados que refletem as linhas atualizadas, enquanto a mesclagem na leitura gera novos "arquivos de exclusão" que devem ser mesclados com os arquivos de dados durante a leitura. A Oracle suporta cópia na gravação. As consultas em tabelas de iceberg falharão se encontrarem um arquivo de exclusão. Para obter mais informações, consulte RowLevelOperationMode.
Evolução do Esquema
Iceberg apoia 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 de iceberg falham quando os metadados consultados apontam para uma versão de esquema diferente em comparação com a 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 dispendiosas no layout de dados.
Tópico principal: Consultar Tabelas de Iceberg do Apache
Exemplos: Consultando Tabelas do Apache Iceberg
Esses exemplos mostram como consultar tabelas do Apache Iceberg na Amazon Web Services (AWS) e na Oracle Cloud Infrastructure (OCI), usando um catálogo de dados e usando 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 o Glue Data Catalog
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 Glue 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 define 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 serviço Glue Data Catalog é determinada pelo ID da conta associado a AWS_CRED
para a região us-west-1
, pois há uma única região do serviço Glue Data Catalog 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 mais informações sobre a criação da 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 instantâneos e novos arquivos de metadados, não ficarão visíveis para o banco de dados.
Consultar uma tabela Iceberg que use o Catálogo do Hadoop no 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. 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 do OCI my-iceberg-bucket
. 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 para o 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 sã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