Consultar dados externos

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

Também é possível usar o procedimento DBMS_CLOUD.CREATE_EXTERNAL_TABLE para consultar dados externos em sistemas de arquivos anexados ou no sistema de arquivos local.

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

  • Oracle Cloud Infrastructure Object Storage

  • Armazenamento do Blob do Azure ou Armazenamento do Data Lake do Azure

  • Amazon S3

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

  • Repositório do GitHub

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 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 externa na parte superior de seus arquivos de origem usando o procedimento DBMS_CLOUD.CREATE_EXTERNAL_TABLE.

    O procedimento DBMS_CLOUD.CREATE_EXTERNAL_TABLE suporta arquivos externos em serviços suportados de armazenamento de objetos na nuvem. 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 de acordo com as convenções de nomeação de objetos da Oracle. Consulte Regras de Nomeação de 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 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 Durante a Importação 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 é 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.

    Observação

    O Autonomous Database suporta uma variedade de formatos de arquivo de origem, incluindo formatos de dados compactados. Consulte DBMS_CLOUD Package Format Options 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 do arquivo de dado externo sejam válidas e correspondam às definições de tipo de dado de destino e à 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 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 de armazenamento de objetos na nuvem suportados.

Colunas de Metadados da Tabela Externa

Os metadados da tabela externa ajudam a determinar de onde vêm os dados quando você executa uma consulta.

As tabelas externas que você cria 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 se segue ao "/" 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.