Consultar dados externos

Para consultar dados em arquivos na Nuvem, você precisa primeiro armazenar suas credenciais de armazenamento de objetos no seu Autonomous Database e, em seguida, criar uma tabela externa usando o procedimento PL/SQL DBMS_CLOUD.CREATE_EXTERNAL_TABLE.

Você também pode usar o procedimento DBMS_CLOUD.CREATE_EXTERNAL_TABLE para consultar dados externos nos sistemas de arquivos anexados ou no sistema de arquivos local.

O procedimento DBMS_CLOUD.CREATE_EXTERNAL_TABLE suporta arquivos externos nos serviços de armazenamento de objetos de nuvem suportados, incluindo:

  • Oracle Cloud Infrastructure Object Storage

  • Azure Blob Storage ou Azure Data Lake Storage

  • Amazon S3

  • Compatível com Amazon S3, incluindo: Oracle Cloud Infrastructure Object Storage, Google Cloud Storage e Wasabi Hot Cloud Storage.

  • GitHub Repositório

O arquivo de origem neste exemplo, channels.txt, tem os seguintes dados:

S,Direct Sales,Direct
T,Tele Sales,Direct
C,Catalog,Indirect
I,Internet,Indirect
P,Partners,Others
  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 na parte superior dos arquivos de origem usando o procedimento DBMS_CLOUD.CREATE_EXTERNAL_TABLE.

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

    Por exemplo:

    BEGIN
       DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
        table_name =>'CHANNELS_EXT',
        credential_name =>'DEF_CRED_NAME',
        file_uri_list =>'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/channels.txt',
        format => json_object('delimiter' value ','),
        column_list => 'CHANNEL_ID VARCHAR2(2), CHANNEL_DESC VARCHAR2(20), CHANNEL_CLASS VARCHAR2(20)' );
    END;
    /
    

    Os parâmetros são:

    • table_name: é o nome da tabela externa.

    • credential_name: é o nome da credencial criada na etapa anterior. O parâmetro credential_name deve estar em conformidade com as convenções de nomenclatura do objeto Oracle. Consulte Regras de Nomenclatura do Objeto de Banco de Dados para obter mais informações.

      O parâmetro credential_name não é usado quando você especifica um diretório ou um URL de Hiperlink de Tabela com file_uri_list. Consulte Criando e Gerenciando Diretórios no Autonomous Database e Sobre Hiperlinks de Tabela no Autonomous Database para obter mais informações.

    • file_uri_list: é uma lista delimitada por vírgulas dos arquivos de origem que você deseja consultar.

    • format: define as opções que você pode especificar para descrever o formato do arquivo de origem.

      Se os dados em seus arquivos de origem forem criptografados, decriptografe os dados especificando o parâmetro format com a opção encryption. Consulte Descriptografar Dados ao Importar do Serviço Object Storage para obter mais informações sobre como decriptografar dados.

    • column_list: é uma lista delimitada por vírgulas das definições de coluna nos arquivos de origem.

    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.

    Observação

    O Autonomous Database suporta uma variedade de formatos de arquivo de origem, incluindo formatos de dados compactados. Consulte DBMS_CLOUD Opções de Formato do Pacote e a opção de formato DBMS_CLOUD compression para ver os tipos de compactação suportados.

    Agora você pode executar consultas na tabela externa criada na etapa anterior. Por exemplo:

    SELECT count(*) FROM channels_ext;

    Por padrão, o banco de dados espera que todas as linhas no arquivo de dados externo sejam válidas e correspondam às definições do tipo de dados de destino, bem como à definição de formato dos arquivos. 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 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 para obter mais informações.

    Para obter informações detalhadas sobre os parâmetros, consulte CREATE_EXTERNAL_TABLE Procedure.

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

Colunas de Metadados de Tabela Externa

Os metadados de tabela externa ajudam a determinar de onde os dados estão vindo quando você executa uma consulta.

As tabelas externas criadas com DBMS_CLOUD.CREATE_EXTERNAL_TABLE, DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE ou DBMS_CLOUD.CREATE_HYBRID_PART_TABLE incluem duas colunas invisíveis file$path e file$name. Essas colunas ajudam a identificar de qual arquivo um registro está vindo.

  • file$path: Especifica o texto do caminho do arquivo até o início do nome do objeto.

  • file$name: Especifica o nome do objeto, incluindo todo o texto que segue o "/" final.

Por exemplo:

SELECT genre_id, name, file$name, file$path FROM ext_genre
     WHERE rownum <= 2;

genre_id      name        file$name     file$path
--------      ---------   -----------   ----------------------
1             Action      genre.csv     https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_gold/o/genre
2             Adventure   genre.csv     https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_gold/o/genre

Consulte Colunas Invisíveis para obter mais informações sobre colunas invisíveis.