Consultar Dados particionados externos com organização de arquivo de origem no formato de pasta

Use DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE para criar uma tabela particionada externa e gerar as informações de particionamento do caminho de arquivo do Armazenamento de Objetos na Nuvem.

Ao criar uma tabela externa com arquivos de dados no formato de pasta, você tem duas opções para especificar os tipos dos tipos das colunas de partição:

  • Você pode especificar manualmente as colunas e seus tipos de dados com o parâmetro column_list. Consulte Pesquisar Dados Externos Particionados com Organização de Arquivo de Origem no Formato Hive para obter um exemplo usando o parâmetro column_list.

  • Você pode deixar o DBMS_CLOUD derivar as colunas de arquivos de dados e seus tipos com base nas informações em arquivos de dados estruturados, como Avro, ORC e Parquet. Nesse caso, você usa a opção partition_columns com o parâmetro format para fornecer os nomes de coluna e seus tipos de dados para as colunas da partição e não precisa fornecer os parâmetros column_list ou field_list.

Considere os seguintes arquivos de origem de amostra no Armazenamento de Objetos:

.../sales/USA/2020/01/sales1.parquet

.../sales/USA/2020/02/sales2.parquet

Para criar uma tabela externa particionada com o caminho de arquivo do Armazenamento de Objetos na Nuvem definindo as partições de arquivos com esse formato de pasta de amostra, faça o seguinte:

  1. Armazene suas credenciais de armazenamento de objetos usando o procedimento DBMS_CLOUD.CREATE_CREDENTIAL.

    Por exemplo:

    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL (
        credential_name => 'DEF_CRED_NAME',
        username => 'adb_user@example.com',
        password => 'password' );
    END;
    /
    

    A criação de uma credencial para acessar o Oracle Cloud Infrastructure Object Store não será necessária se você ativar as credenciais do controlador de recursos. Para obter mais informações, consulte Usar o Controlador de Recursos para Acessar Recursos do Oracle Cloud Infrastructure.

    Essa operação armazena as credenciais no banco de dados em um formato criptografado. Você pode usar qualquer nome para a credencial. Observe que essa etapa só é necessária uma vez, a menos que suas credenciais de armazenamento de objetos sejam alteradas. Depois de armazenar as credenciais, você poderá usar o mesmo nome de credencial para criar tabelas externas.

    Consulte Procedimento CREATE_CREDENTIAL para obter informações sobre os parâmetros username e password para diferentes serviços de armazenamento de objetos.

  2. Crie uma tabela externa particionada na parte superior dos arquivos de origem usando o procedimento DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE.

    O procedimento DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE suporta arquivos particionados externos nos serviços suportados de armazenamento de objetos na nuvem. A credencial é uma propriedade de nível de tabela; portanto, todos os arquivos externos devem estar no mesmo armazenamento de objetos na nuvem.

    Por exemplo:

    BEGIN DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE(
        table_name => 'MYSALES',
        credential_name => 'DEF_CRED_NAME',
        file_uri_list => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/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)')
                              )
             )
        );
    END;
    /

    Os parâmetros DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE para arquivos de dados estruturados, como para um arquivo de dados Parquet, não exigem os parâmetros column_list ou field_list. Os nomes de coluna e os tipos de dados são derivados para as colunas do primeiro arquivo parquet que o procedimento verifica (portanto, todos os arquivos devem ter a mesma forma). A lista de colunas geradas inclui as colunas derivadas do nome do objeto e essas colunas têm os tipos de dados especificados com o parâmetro partition_columns format.

    Os parâmetros são:

    • table_name: é o nome da tabela externa.

    • credential_name: é o nome da credencial criada na etapa anterior.

    • file_uri_list: é uma lista delimitada por vírgulas dos URIs de arquivo de origem. Há duas opções para essa lista:

      • Especifique uma lista delimitada por vírgulas de URIs de arquivos individuais sem curingidas.

      • Especifique um URI de arquivo único com curingas, em que os curingas só podem ser posteriores à última barra "/". O caractere "*" pode ser usado como curinga para vários caracteres, o caractere "?" pode ser usado como curinga para um único caractere.

    • column_list: é uma lista delimitada de nomes de colunas e tipos de dados para a tabela externa. A lista inclui as colunas que estão dentro do arquivo, bem como as derivadas do nome do objeto.

      O column_list não é obrigatório quando os arquivos de dados são estruturados (Parquet, Avro ou ORC).

    • field_list: Identifica os campos nos arquivos de origem e seus tipos de dados. O valor padrão é NULL, o que significa que os campos e seus tipos de dados são determinados pelo parâmetro column_list.

      O field_list não é obrigatório quando os arquivos de dados são estruturados (Parquet, Avro ou ORC).

    • format: define as opções que você pode especificar para descrever o formato do arquivo de origem. O parâmetro partition_columns format especifica os nomes das colunas de partição. Consulte DBMS_CLOUD Package Format Options para obter mais informações.

      Se os dados em seu arquivo de origem forem criptografados, decriptografe-os especificando a opção de formato encryption. Consulte Descriptografar Dados Durante a Importação do Serviço Object Storage para obter mais informações sobre decriptografia de dados.

    Neste exemplo, namespace-string corresponde ao namespace do armazenamento de objetos do Oracle Cloud Infrastructure e bucketname corresponde ao nome do bucket. Consulte Noções Básicas de Namespaces do serviço Object Storage para obter mais informações.

    Consulte Procedimento CREATE_EXTERNAL_PART_TABLE para obter informações detalhadas sobre os parâmetros.

    Consulte DBMS_CLOUD Formatos de URI para obter mais informações sobre os serviços suportados de armazenamento de objetos da nuvem.

    Se houver linhas nos arquivos de origem que não correspondam às opções de formato especificadas, a consulta reportará um erro. Você pode usar os parâmetros DBMS_CLOUD, como rejectlimit, para suprimir esses erros. Como alternativa, você também pode validar a tabela particionada externa criada para ver as mensagens de erro e as linhas rejeitadas para que possa alterar suas opções de formato adequadamente. Consulte Validar Dados Externos e Validar Dados Partidos Externos para obter mais informações.

  3. Agora você pode executar consultas na tabela particionada externa criada na etapa anterior.

    Seu Autonomous Database aproveita as informações de particionamento da sua tabela particionada externa, garantindo que a consulta só acesse os arquivos de dados relevantes no Armazenamento de Objetos. Por exemplo, a consulta a seguir só lê arquivos de dados de uma partição.

    Por exemplo:

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

    As tabelas particionadas externas criadas com DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE incluem duas colunas invisíveis file$path e file$name. Essas colunas ajudam a identificar de qual arquivo um registro está vindo. Consulte Colunas de Metadados de Tabela Externa para obter mais informações.