Sobre Tabelas Externas com Particionamento de Arquivo de Origem

No Autonomous Database, você pode criar tabelas externas particionadas com base em dados particionados no estilo do Hive ou com base em dados particionados de pastas simples armazenados no Cloud Object Store.

Usando o particionamento de arquivo de origem, em vez de fornecer uma especificação de partição completa, o procedimento deriva informações de particionamento do caminho do arquivo para determinados padrões de arquivo. Por exemplo, considere as seguintes especificações de arquivo de dados:

  • Estilo Hive: por exemplo: sales/country=USA/year=2020/month=01/file1.csv

  • Estilo de particionamento de pasta simples: por exemplo: sales/USA/2020/01/file1.parquet

O uso de um desses formatos comuns de particionamento simplifica muito a criação e o gerenciamento de tabelas externas particionadas. Além disso, mesmo que as colunas de partição possam não aparecer no arquivo de dados, elas ainda podem ser consultadas usando SQL. O particionamento de dados também melhora o desempenho da consulta, reduzindo drasticamente a quantidade de dados digitalizados. Neste exemplo, quando você consulta dados 'USA', a consulta pode ignorar a verificação dos arquivos de outros países.

Dados Particionados do Formato Hive no Cloud Object Store

O Hive oferece um formato de metadados padrão para mecanismos de processamento de big data. Os dados particionados no Cloud Object Store gerados no formato Hive são representados em um formato folder/subfolder. Por exemplo, no Cloud Object Store, um arquivo de dados no formato Hive é armazenado da seguinte forma:

table/partition1=partition1_value/partition2=partition2_value/data_file.csv

Os arquivos salvos no formato particionado do Hive fornecem informações de partição no nome do caminho do arquivo de dados. O nome do caminho do arquivo de dados inclui informações sobre o conteúdo do objeto, incluindo nomes de colunas de partição e valores de colunas de partição (o arquivo de dados não inclui as colunas de partição e seus valores associados).

Por exemplo, considere uma tabela SALES particionada externa criada com base em dados de formato Hive no Cloud Object Store:

.../sales/country=USA/year=2020/month=01/file1.csv
.../sales/country=USA/year=2020/month=01/file2.csv
.../sales/country=USA/year=2020/month=02/file3.csv
.../sales/country=USA/year=2020/month=03/file1.csv
.../sales/country=FRA/year=2020/month=03/file1.csv

As informações da partição de formato Hive mostram que os arquivos de dados no Cloud Object Store são particionados por country, year e month, e os valores dessas colunas de partição também são especificados no nome do caminho de formato Hive para cada arquivo de dados (o nome do caminho inclui valores para as colunas particionadas: country, year e month).

Os nomes de coluna no caminho serão usados pela API para simplificar a definição da tabela.

Dados Particionados do Formato de Pasta Simples no Cloud Object Store

Os dados particionados no Cloud Object Store que são gerados no formato de pasta são representados em um formato folder/subfolder, semelhante aos dados particionados no formato Hive, mas as informações no caminho mostram os valores da coluna e não incluem os nomes das colunas. Além disso, com dados particionados em formato de pasta, a ordem de partição especificada no nome do objeto é significativa e deve corresponder à ordem nas colunas da tabela.

Por exemplo, no Cloud Object Store, um arquivo de dados de formato de pasta é armazenado da seguinte forma:

table/partition1_value/partition2_value/*.parquet

O caminho inclui os valores da coluna de partição, a ordem da coluna de partição e os arquivos de dados. O Autonomous Database permite criar uma tabela particionada externa com base nos dados do formato da pasta e você pode executar uma consulta usando as partições especificadas.

Os arquivos salvos no formato particionado da pasta fornecem os valores da coluna da partição de dados no nome do arquivo. Diferentemente do Hive, os caminhos não incluem o nome da coluna, portanto, os nomes das colunas devem ser fornecidos. A ordem das colunas de partição é importante e a ordem no nome do arquivo para os nomes de partição de coluna deve corresponder à ordem no parâmetro partition_columns.

Sobre a Consulta de Dados Particionados no Cloud Object Store

Quando você consulta dados particionados externos no formato Hive, o mecanismo de consulta entende e utiliza as informações de particionamento do nome do caminho do arquivo. Por exemplo, considere uma tabela SALES particionada externa na qual o arquivo de origem, sales/country=USA/year=2020/month=02/file3.csv no Object Store inclui os seguintes dados de vendas:

tents, 291
canoes, 22
backpacks, 378

Os valores country no nome do caminho e os valores de período de tempo para month e year não são especificados como colunas no arquivo de dados. Os valores da coluna de partição são especificados somente no nome do caminho com os valores mostrados: USA, 2020 e 02. Depois de criar uma tabela particionada externa com este arquivo de dados, você poderá usar as colunas de partição e seus valores ao executar uma consulta na tabela particionada externa.

Por exemplo:

SELECT year, month, product, units 
     FROM SALES WHERE year='2020' AND month='02' AND country='USA'

A vantagem de criar uma tabela particionada externa com dados gerados como dados particionados no formato Hive é que o mecanismo de consulta é otimizado para particionar os dados para selecionar a partição correta e a consulta seleciona apenas dados de uma partição e só precisa pesquisar um único arquivo de dados. Portanto, a consulta só exigiria uma verificação do arquivo file3.csv (/sales/country=USA/year=2020/month=02/file3.csv). Para grandes quantidades de dados, essa poda de partição pode fornecer melhorias significativas de desempenho.

Usando tabelas externas padrão do Oracle Database, a coluna de partição deve estar disponível como uma coluna dentro do arquivo de dados para usá-la para consultas ou definições de partição. Sem o tratamento especial disponível com tabelas particionadas externas no Autonomous Database, isso seria um problema se você quisesse usar dados armazenados no formato Hive no Cloud Object Store, pois precisaria gerar novamente os arquivos de dados para incluir a partição como uma coluna no arquivo de dados.

Sobre a Criação de Tabelas Externas Particionadas

Quando você usa dados não estruturados armazenados no formato Hive no Cloud Object Store e cria uma tabela particionada externa, as colunas e seus tipos não podem ser derivados do arquivo de origem. Portanto, as colunas e seus tipos de dados devem ser especificados com o parâmetro column_list. Para criar as tabelas externas particionadas, use o procedimento DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE para especificar as colunas de partição e seus tipos da seguinte forma:

  • A raiz da lista de arquivos é especificada no nome do caminho com o parâmetro file_uri_list. Por exemplo, http://.../sales/*

  • Os nomes de coluna e os tipos de dados são especificados com o parâmetro column_list.

  • A opção partition_columns no parâmetro format especifica as colunas de partição.

  • A DLL gerada inclui as colunas especificadas no nome do caminho.

Para este exemplo, quando a tabela externa é criada, as colunas country, year e month são adicionadas ao parâmetro column_list. A tabela externa é criada com as colunas country, year e month, que não estão nos arquivos de dados, e as partições de lista são criadas ativando a remoção de partições.

Quando você usa dados estruturados, como arquivos Parquet, Avro ou ORC armazenados no formato de pasta no Cloud Object Store, as colunas e seus tipos de dados são conhecidos. Não é necessário especificar a lista de colunas conforme necessário com dados não estruturados. Para criar as tabelas externas particionadas, use o procedimento DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE para especificar as colunas de partição e seus tipos da seguinte forma:

  • A raiz da lista de arquivos é especificada no nome do caminho com o parâmetro file_uri_list. Por exemplo, http://.../sales/*
  • O parâmetro column_list não é necessário para arquivos estruturados. Se você não especificar a lista de colunas, deverá definir as colunas de partição e seus tipos de dados ao criar a tabela particionada externa. Use a opção partition_columns no parâmetro format para especificar as colunas de partição e seus tipos de dados.
  • A DLL gerada inclui as colunas especificadas no nome do caminho.

Consulte Consultar Dados Particionados Externos com Organização de Arquivos de Origem do Formato Hive e Consultar Dados Particionados Externos com Organização de Arquivos de Origem do Formato da Pasta para obter exemplos completos.

Particionamento Externo: Arquivos de Origem CSV com Pastas no estilo Hive

Mostra como criar tabelas particionadas externas com arquivos de origem CSV armazenados no Cloud Object Store em pastas no estilo do Hive.

Lista de arquivos de origem:

.../sales/country=USA/year=2020/month=01/file1.csv
.../sales/country=USA/year=2020/month=01/file2.csv
.../sales/country=USA/year=2020/month=02/file3.csv
.../sales/country=USA/year=2020/month=03/file1.csv
.../sales/country=FRA/year=2020/month=03/file1.csv

API:

DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE (
   table_name        => 'mysales',
   credential_name   => 'mycredential', 
   file_uri_list     => 'https://objectstorage.us-phoenix-1.oraclecloud.com/.../sales/*.csv', 
   column_list       => 'product varchar2(100), units number, country varchar2(100), year number, month varchar2(2)', 
   field_list        => 'product, units', --[Because country, year and month are not in the file, they are not listed in the field list]
   format            => '{"type":"csv","partition_columns":["country", "year", "month"]}');
Observação

O parâmetro partition_columns no parâmetro format deve corresponder aos nomes de coluna encontrados no caminho (por exemplo, a coluna country corresponde a "country=…")

Particionamento Externo: Arquivos de Origem CSV com Pastas Simples

Mostra como criar tabelas particionadas externas com arquivos de origem CSV armazenados no Cloud Object Store em formato de pasta simples.

Lista de arquivos de origem:

.../sales/USA/2020/01/file1.csv
.../sales/USA/2020/01/file2.csv
.../sales/USA/2020/02/file3.csv
.../sales/USA/2020/03/file1.csv
.../sales/FRA/2020/03/file1.csv

API:

DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE(
   table_name        => 'mysales',
   credential_name   => 'mycredential', 
   file_uri_list     =>  'https://objectstorage.us-phoenix-1.oraclecloud.com/.../sales/*.csv', 
   column_list       => 'product varchar2(100), units number, country varchar2(100), year number, month varchar2(2)', 
   field_list        => 'product, units', --[Because country, year and month are not in the file, they are not listed in the field list]
   format            => '{"type":"csv","partition_columns":["country", "year", "month"]}');
Observação

A chamada de API é igual à do exemplo anterior, mas a ordem do partition_columns no parâmetro format é significativa porque o nome da coluna não está no caminho do arquivo.

Particionamento Externo: Arquivos de Origem Parquet com Pastas no estilo Hive

Mostra como criar tabelas particionadas externas com arquivos de origem Parquet armazenados no Cloud Object Store em pastas no estilo do Hive.

Lista de arquivos de origem:

.../sales/USA/2020/01/file1.parquet
.../sales/USA/2020/01/file2.parquet
.../sales/USA/2020/02/file3.parquet
.../sales/USA/2020/03/file1.parquet
.../sales/FRA/2020/03/file1.parquet

API:

DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE (
   table_name            => 'mysales',
     credential_name     => 'mycredential', 
     file_uri_list       => 'https://objectstorage.us-phoenix-1.oraclecloud.com/.../sales/*.parquet',
     format              => 
         json_object(    'type' value 'parquet', 
               'schema' value 'first',
               'partition_columns' value 
                  json_array(
                      json_object('name' value 'country', 'type' value 'varchar2(100)'),
                      json_object('name' value 'year', 'type' value 'number'),
                      json_object('name' value 'month', 'type' value 'varchar2(2)')
            )
        )

);
Observação

O parâmetro column_list não foi especificado. Conforme mostrado, para cada coluna de partição, especifique o nome e o tipo de dados no parâmetro format partition_columns.

Particionamento Externo: Parquet com Pastas Simples

Mostra como criar tabelas particionadas externas com arquivos de origem Parquet armazenados no Cloud Object Store em formato de pasta simples.

Lista de arquivos de origem:

.../sales/USA/2020/01/file1.parquet
.../sales/USA/2020/01/file2.parquet
.../sales/USA/2020/02/file3.parquet
.../sales/USA/2020/03/file1.parquet
.../sales/FRA/2020/03/file1.parquet

API:

DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE (
   table_name        => 'mysales',
   credential_name   => 'mycredential', 
   file_uri_list     => 'https://objectstorage.us-phoenix-1.oraclecloud.com/.../sales/*.parquet', 
   format            => 
     json_object(    'type' value 'parquet', 
                'schema' value 'first',
         'partition_columns' value 
           json_array(
              json_object('name' value 'country', 'type' value 'varchar2(100)'),
              json_object('name' value 'year', 'type' value 'number'),
              json_object('name' value 'month', 'type' value 'varchar2(2)')
            )
        )

);
Observação

O parâmetro column_list não foi especificado. Você deve incluir o nome e o tipo de dados para as colunas de partição. Além disso, a ordem da partition_columns na cláusula de formato é importante porque o nome da coluna não está no caminho do arquivo.