Consultar Dados Particionados Externos com Organização do Arquivo de Origem do 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 do arquivo do Cloud Object Store.

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

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

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

Considere os seguintes arquivos de origem de amostra no Object Store:

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

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

Para criar uma tabela externa particionada com o caminho do arquivo do Cloud Object Store que define as partições dos arquivos com este formato de pasta de amostra, faça o seguinte:

  1. Armazene suas credenciais do 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;
    /
    

    Não será necessário criar uma credencial para acessar o Oracle Cloud Infrastructure Object Store se você ativar as credenciais do controlador de recursos. Consulte Usar o Controlador de Recursos para Acessar Recursos da Oracle Cloud Infrastructure para obter mais informações.

    Esta operação armazena as credenciais no banco de dados em um formato criptografado. Você pode usar qualquer nome para o nome da credencial. Observe que essa etapa é obrigatória apenas uma vez, a menos que as credenciais do 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 particionada externa 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 de armazenamento de objetos na nuvem suportados. A credencial é uma propriedade de nível de tabela; portanto, os arquivos externos devem estar todos no mesmo armazenamento de objetos da 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 (e, portanto, todos os arquivos devem ter a mesma forma). A lista de colunas gerada 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 de URIs de arquivos de origem. Há duas opções para esta lista:

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

      • Especifique um único URI de arquivo 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 por vírgula de nomes de coluna 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 é necessário quando os arquivos de dados são arquivos 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 é necessário quando os arquivos de dados são arquivos 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 Opções de Formato de Pacote para obter mais informações.

      Se os dados em seu arquivo de origem forem criptografados, decriptografe os dados 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 como decriptografar dados.

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

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

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

    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 parâmetros DBMS_CLOUD, como rejectlimit, para suprimir esses erros. Como alternativa, você também pode validar a tabela particionada externa que você criou para ver as mensagens de erro e as linhas rejeitadas, para que você possa alterar suas opções do formato adequadamente. Consulte Validar Dados Externos e Validar Dados Particionados Externos para mais informações.

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

    O Autonomous Database aproveita as informações de particionamento da tabela particionada externa, garantindo que a consulta acesse apenas os arquivos de dados relevantes no Object Store. Por exemplo, a consulta a seguir lê apenas 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 que você cria 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 da Tabela Externa para obter mais informações.