Usar Pesquisa de Texto Completo em Arquivos no Object Storage

O pacote PL/SQL DBMS_CLOUD permite que você crie um índice de texto nos arquivos de armazenamento de objetos, o que permite pesquisar o texto e usar curingas com sua pesquisa.

Sobre a Pesquisa de Texto Completo em Arquivos no Object Storage

Você pode criar um índice de texto em arquivos no armazenamento de objetos. Um índice de texto permite que você execute uma pesquisa baseada em palavras em conjuntos de dados muito grandes no armazenamento de objetos.

O DBMS_CLOUD fornece maneiras rápidas e eficientes de gerenciar dados no armazenamento de objetos. As APIs DBMS_CLOUD permitem criar, copiar, fazer download, excluir e percorrer arquivos presentes no armazenamento de objetos. Ao definir tabelas externas, você pode executar consultas SQL em dados armazenados no armazenamento de objetos (ou com tabelas externas particionadas híbridas, entre dados no banco de dados e no armazenamento de objetos). Quando você usa DBMS_CLOUD para definir um índice de texto, isso permite pesquisar texto em seus dados e usar curingas.

O suporte do Autonomous Database para pesquisa baseada em palavras funciona para formatos de dados comumente usados, por exemplo, CSV ou JSON e com documentos formatados (binário), por exemplo, formatos PDF e DOC (MS Word). Você pode configurar uma taxa de atualização que indique a frequência em minutos na qual o índice é atualizado para qualquer novo upload ou exclusão.

Uma tabela local com o sufixo padrão INDEX_NAME$TXTIDX é criada quando você cria um índice no armazenamento de objetos e pode utilizar a tabela para executar uma pesquisa usando a palavra-chave CONTAINS.

Consulte Indexando com o Oracle Text para obter mais informações.

Criar um Índice de Texto nos Arquivos do Object Storage

Use DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX para criar um índice de texto em arquivos no armazenamento de objetos.

Documentos formatados (binário) são suportados quando você especifica a opção binary_files format com DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX.

Você pode incluir uma lista de palavras de parada ao especificar a opção stop_words format com DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX.

Consulte Indexando com o Oracle Text para obter mais informações sobre palavras de interrupção do Oracle Text e trabalhando com arquivos binários.

  1. Crie um objeto de credencial para acessar o local de origem.

    Consulte CREATE_CREDENTIAL Procedimento para obter mais informações.

  2. Execute o procedimento DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX para criar um índice de texto nos arquivos de armazenamento de objetos.
    BEGIN 
    DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX (
            credential_name => 'DEFAULT_CREDENTIAL',
            location_uri    => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/ts_data/'
            index_name      => 'EMP',
            format          => JSON_OBJECT ('refresh_rate' value 10)
    );
    END;
    /

    Este exemplo cria um índice de texto EMP nos arquivos de armazenamento de objetos localizados no URI especificado no parâmetro location_uri. A opção refresh_rate no parâmetro format especifica que o índice EMP é atualizado em um intervalo de 10 minutos.

    Isso cria uma tabela local INDEX_NAME$TXTIDX. Você pode utilizar a tabela INDEX_NAME$TXTIDX para executar uma pesquisa usando CONTAINS.

    Por exemplo:

    
     SELECT object_name FROM EMP$TXTIDX
          WHERE CONTAINS(object_name,'king') > 0;
    

    Essa consulta retorna os nomes de objeto ou arquivo que contêm a string king.

    Consulte Tabela de Referência do Índice de Texto para obter mais informações.

    Você pode consultar uma tabela externa usando a cláusula EXTERNAL MODIFY para recuperar os registros reais.

    
    SELECT * FROM EMPEXTTAB EXTERNAL MODIFY ((location_url object_name));
    
    Observação

    A tabela externa EMPEXTTAB é uma tabela externa de amostra criada no mesmo location_url.

    Consulte Consultar Dados Externos com o Autonomous Database para obter mais informações.

    Consulte CREATE_EXTERNAL_TEXT_INDEX Procedimento para obter mais informações.

    Consulte Configurar Políticas e Atribuições para Acessar Recursos para obter mais informações.

Eliminar um Índice nos Arquivos do Cloud Storage

Use o procedimento DBMS_CLOUD.DROP_EXTERNAL_TEXT_INDEX para eliminar um índice de texto em arquivos de armazenamento de objetos.

Execute o procedimento DBMS_CLOUD.DROP_EXTERNAL_TEXT_INDEX para eliminar um índice de texto em arquivos no armazenamento de objetos.

BEGIN 
DBMS_CLOUD.DROP_EXTERNAL_TEXT_INDEX (
        index_name => 'EMP',
);
END;
/

Este exemplo elimina o índice de texto EMP.

Consulte DROP_EXTERNAL_TEXT_INDEX Procedimento para obter mais informações.

Tabela de Referência do Índice de Texto

Uma tabela local é criada no seu banco de dados com um sufixo padrão INDEX_NAME$TXTIDX. Essa tabela é criada internamente quando você executa DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX.

Você pode consultar a tabela INDEX_NAME$TXTIDX para procurar uma string usando a palavra-chave CONTAINS. Por exemplo, quando você chama o procedimento DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX do valor INDEX_NAME como EMP, isso cria a tabela de referência de texto EMP$TXTIDX.

A tabela de referência de texto tem as seguintes colunas:
  • object_name: é o nome do arquivo no armazenamento de objetos que contém a string de texto pesquisada.

  • object_path: é o bucket de armazenamento de objetos ou o URI da pasta que contém o arquivo de armazenamento de objetos.

  • mtime: é o timestamp modificado pela última vez do arquivo de armazenamento de objetos. Este é o momento em que o arquivo foi acessado pela última vez por DBMS_CLOUD.

Por exemplo:
SELECT object_path, object_name FROM EMP$TXTIDX WHERE CONTAINS(OBJECT_NAME, 'king') > 0;
 
OBJECT_PATH                                                                                      OBJECT_NAME
------------------------------------------------------------------------------------------      ------------------------------------
https://objectstorage.us-phoenix-1.oraclecloud.com/n/example1/b/adbs_data_share/o/ts_data/       data_2_20221026T195313585601Z.json

Essa consulta retorna os nomes de arquivo e o URI de localização no armazenamento de objetos que contém a string de texto king, em letras maiúsculas ou minúsculas.

SELECT object_name, mtime FROM EMP$TXTIDX;
 
OBJECT_NAME                     MTIME
----------------------------- -------------------------------------
data_1_20220531T165402Z.json    31-MAY-22 04.54.02.979000 PM +00:00
data_1_20220531T165427Z.json    31-MAY-22 04.54.27.997000 PM +00:00

Essa consulta retorna o nome do arquivo e o timestamp modificado pela última vez dos arquivos de objeto nos quais o índice EMP é criado.

Monitorar Criação de Índice de Texto

Quando você executa DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX, a operação de criação de índice de texto é registrada na view ALL_SCHEDULER_JOB_RUN_DETAILS.

Você pode consultar a view ALL_SCHEDULER_JOB_RUN_DETAILS para obter o status e qualquer erro reportado pelo job de criação de índice.

O nome do job DBMS_SCHEDULER é derivado do parâmetro INDEX_NAME especificado quando você chama DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX.

Para consultar a view ALL_SCHEDULER_JOB_RUN_DETAILS, você deve estar conectado como o usuário ADMIN ou ter o privilégio READ na view ALL_SCHEDULER_JOB_RUN_DETAILS.

Por exemplo, a seguinte instrução SELECT com uma cláusula WHERE em job_name mostra os detalhes da execução do job:

SELECT status, additional_info 
   FROM all_scheduler_job_run_details WHERE LOWER(job_name) = LOWER('index_name$JOB');

Você também pode consultar a existência de um job do scheduler de criação de índice.

Por exemplo:
SELECT status 
    FROM all_scheduler_jobs where LOWER(job_name) = LOWER('index_name$JOB');

Consulte CREATE_EXTERNAL_TEXT_INDEX Procedimento para obter mais informações.