Consultar Tabelas de Iceberg do Apache

O Autonomous Database suporta a consulta de tabelas do Apache Iceberg.

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

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

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.

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.

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.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 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:

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 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:

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 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.