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âmetroformat
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çãopartition_columns
no parâmetroformat
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 Hive. - 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. - Particionamento Externo: Arquivos de Origem do Parquet com Pastas no estilo Hive
Mostra como criar tabelas particionadas externas com arquivos de origem do Parquet armazenados no Cloud Object Store em pastas no estilo Hive. - 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.
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"]}');
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=…
")
Tópico principal: Sobre Tabelas Externas com Particionamento de Arquivo de Origem
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"]}');
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.
Tópico principal: Sobre Tabelas Externas com Particionamento de Arquivo de Origem
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)')
)
)
);
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
.
Tópico principal: Sobre Tabelas Externas com Particionamento de Arquivo de Origem
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)')
)
)
);
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.
Tópico principal: Sobre Tabelas Externas com Particionamento de Arquivo de Origem