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 Hive ou de pasta simples armazenados no Armazenamento de Objetos na Nuvem.
Usando o particionamento de arquivos 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 estas especificações de arquivo:
-
Estilo Hive: por exemplo:
sales/country=USA/year=2020/month=01/file1.csv
-
Estilo de partição de pasta simples: por exemplo:
sales/USA/2020/01/file1.parquet
O uso de um desses formatos de partição comuns 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 partição de dados também melhora o desempenho da consulta, reduzindo consideravelmente o volume de dados verificados. Nesse exemplo, quando você consulta os dados 'USA', a consulta pode ignorar a verificação dos arquivos de outros países.
Dados particionados no formato Hive no armazenamento de objetos na nuvem
O Hive oferece um formato de metadados padrão para mecanismos de processamento de Big Data. Os dados particionados no Armazenamento de Objetos na Nuvem gerados no formato Hive são representados em um formato folder/subfolder
. Por exemplo, no Cloud Object Store, um 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 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 nos dados em formato Hive no Armazenamento de Objetos na Nuvem:
.../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 no 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 no formato Hive para cada arquivo de dados (o nome do caminho inclui valores para as colunas particionadas: country
, year
e month
).
A API usará os nomes de coluna no caminho para simplificar a definição da tabela.
Dados particionados no formato de pasta simples no armazenamento de objetos na nuvem
Os dados particionados no Armazenamento de Objetos na Nuvem 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 das colunas e não incluem os nomes das colunas. Além disso, com dados particionados no formato de pasta, a ordem da 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 no formato de pasta é armazenado da seguinte forma:
table/partition1_value/partition2_value/*.parquet
O caminho inclui os valores das colunas de partição, na ordem das colunas, e os arquivos de dados. O Autonomous Database permite criar uma tabela particionada externa com base nos dados em formato de pasta e você pode executar uma consulta usando as partições especificadas.
Os arquivos salvos em formato particionado de pasta fornecem os valores das colunas de partição de dados no nome do arquivo. Ao contrário do que acontece com o Hive, os caminhos não incluem o nome da coluna. Portanto, forneça os nomes. A ordem das colunas de partição é importante e a ordem no nome do arquivo para nomes de partição de coluna deve corresponder à ordem no parâmetro partition_columns
.
Sobre a Consulta de Dados particionados no Armazenamento de Objetos na Nuvem
Quando você consulta dados externos particionados no formato Hive, o mecanismo de consulta entende e utiliza as informações de partição 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, inclua os seguintes dados de vendas:
tents, 291
canoes, 22
backpacks, 378
Os valores country
no nome do caminho e os valores do período para month
e year
não são especificados como colunas no arquivo de dados. Os valores de colunas de partição são especificados apenas no nome do caminho com os valores mostrados: USA, 2020 e 02. Depois de criar uma tabela particionada externa com esse arquivo de dados, você pode 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 a remoção da partição dos dados para selecionar a partição correta e a consulta só seleciona dados de uma partição e só precisa pesquisar um único arquivo de dados. Assim, a consulta só precisaria de uma verificação do arquivo file3.csv
(/sales/country=USA/year=2020/month=02/file3.csv
). Para grandes volumes de dados, esse processamento 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 no arquivo de dados para uso em 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, já que precisaria gerar novamente os arquivos de dados para incluir a partição como 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 Armazenamento de Objetos na Nuvem 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 partição, 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 das colunas 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 da partição. -
A DLL gerada inclui as colunas especificadas no nome do caminho.
Nesse exemplo, quando a tabela externa é criada, as colunas country
, year
e month
são adicionadas no 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ção.
Quando você usa dados estruturados, como arquivos Parquet, Avro ou ORC armazenados em formato de pasta no Armazenamento de Objetos na Nuvem, as colunas e seus tipos de dados são conhecidos e você não precisa especificar a lista de colunas como é exigido com dados não estruturados. Para criar as tabelas externas partição, 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, defina 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 Pesquisar Dados Particionados Externos com Organização de Arquivo de Origem no Formato Hive e Pesquisar Dados Particionados Externos com Organização de Arquivo de Origem no Formato de 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 Armazenamento de Objetos na Nuvem 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 no formato de pasta simples. - Particionamento Externo: Arquivos de Origem Parquet com Pastas no Estilo Hive
Mostra como criar tabelas particionadas externas com arquivos de origem Parquet armazenados no Armazenamento de Objetos na Nuvem em pastas no estilo Hive. - Particionamento Externo: Parquet com Pastas Simples
Mostra como criar tabelas particionadas externas com arquivos de origem Parquet armazenados no Armazenamento de Objetos na Nuvem no 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 Armazenamento de Objetos na Nuvem em pastas no estilo 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
partition_columns
no parâmetro format
deve corresponder aos nomes das colunas 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 Armazenamento de Objetos na Nuvem no 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 é a mesma 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 Armazenamento de Objetos na Nuvem em pastas no estilo 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 é 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 Armazenamento de Objetos na Nuvem no 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 é especificado. Inclua o nome e o tipo de dados para as colunas de partição. Além disso, a ordem do 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