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.

Configurações Suportadas

Essas configurações específicas são suportadas:

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.

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.

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.Veja a seguir a descrição da ilustração example_1_table.png
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:

Veja a seguir a descrição da ilustração example_1_details_v1.png
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:

Veja a seguir a descrição da ilustração example_3_table_v1.png
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.