Texto de consulta en Object Storage

El paquete PL/SQL DBMS_CLOUD permite crear un índice de texto en los archivos del almacén de objetos, lo que permite buscar el texto y utilizar comodines con la búsqueda.

Acerca del uso de un índice de texto para consultar texto en Object Storage

Puede crear un índice de texto en archivos de Object Storage. Un índice de texto permite realizar una búsqueda basada en palabras en juegos de datos muy grandes del almacén de objetos.

DBMS_CLOUD proporciona formas rápidas y eficaces de gestionar datos en el almacén de objetos. Las API DBMS_CLOUD permiten crear, copiar, descargar, suprimir y recorrer archivos presentes en el almacén de objetos. Al definir tablas externas, puede ejecutar consultas SQL en los datos almacenados en el almacén de objetos (o con tablas externas particionadas híbridas, en los datos de la base de datos y en el almacén de objetos). Al utilizar DBMS_CLOUD para definir un índice de texto, esto permite buscar texto en los datos y utilizar comodines.

El soporte de Autonomous Database para búsquedas basadas en palabras funciona para formatos de datos de uso común, por ejemplo CSV o JSON y con documentos con formato (binario), por ejemplo, formatos PDF y DOC (MS Word). Puede configurar un ratio de refrescamiento que indique la frecuencia en minutos con la que se refresca el índice para las nuevas cargas o supresiones.

Al crear un índice en el almacenamiento de objetos, se crea una tabla local con el sufijo estándar INDEX_NAME$TXTIDX y puede utilizar la tabla para realizar una búsqueda con la palabra clave CONTAINS.

Consulte Indexación con Oracle Text para obtener más información.

Creación de un índice de texto en archivos de Object Storage

Utilice DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX para crear un índice de texto en archivos del almacenamiento de objetos.

Los documentos con formato (binarios) se admiten cuando se especifica la opción binary_files format con DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX.

Puede incluir una lista de palabras de parada al especificar la opción stop_words format con DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX.

Consulte Indexación con Oracle Text para obtener más información sobre las palabras de parada de Oracle Text y el trabajo con archivos binarios.

  1. Cree un objeto de credencial para acceder a la ubicación de origen.

    Consulte Procedimiento CREATE_CREDENTIAL para obtener más información.

  2. Ejecute el procedimiento DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX para crear un índice de texto en los archivos de almacenamiento 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;
    /

    En este ejemplo se crea un índice de texto EMP en los archivos de almacenamiento de objetos ubicados en el URI especificado en el parámetro location_uri. La opción refresh_rate del parámetro format especifica que el índice EMP se refresca en un intervalo de 10 minutos.

    Esto crea una tabla local INDEX_NAME$TXTIDX. Puede utilizar la tabla INDEX_NAME$TXTIDX para realizar una búsqueda con CONTAINS.

    Por ejemplo:

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

    Esta consulta devuelve los nombres de objeto o archivo que contienen la cadena king.

    Consulte Tabla de referencia de índice de texto para obtener más información.

    Puede consultar una tabla externa mediante la cláusula EXTERNAL MODIFY para recuperar los registros reales.

    
    SELECT * FROM EMPEXTTAB EXTERNAL MODIFY ((location_url object_name));
    
    Nota

    La tabla externa EMPEXTTAB es una tabla externa de ejemplo que se crea en la misma location_url.

    Consulte Consulta de datos externos con Autonomous Database para obtener más información.

    Consulte el procedimiento CREATE_EXTERNAL_TEXT_INDEX para obtener más información.

    Consulte Configuración de políticas y roles para acceder a recursos para obtener más información.

Borrado de un índice en los archivos de almacenamiento en la nube

Utilice el procedimiento DBMS_CLOUD.DROP_EXTERNAL_TEXT_INDEX para borrar un índice de texto en archivos de almacenamiento de objetos.

Ejecute el procedimiento DBMS_CLOUD.DROP_EXTERNAL_TEXT_INDEX para borrar un índice de texto en archivos del almacenamiento de objetos.

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

En este ejemplo se borra el índice de texto EMP.

Consulte el procedimiento DROP_EXTERNAL_TEXT_INDEX para obtener más información.

Tabla de referencia de índice de texto

Se crea una tabla local en la base de datos con el sufijo estándar INDEX_NAME$TXTIDX. Esta tabla se crea internamente al ejecutar DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX.

Puede consultar la tabla INDEX_NAME$TXTIDX para buscar una cadena mediante la palabra clave CONTAINS. Por ejemplo, al llamar al procedimiento DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX el valor INDEX_NAME como EMP, se crea EMP$TXTIDX en la tabla de referencia de texto.

La tabla de referencia de texto tiene las siguientes columnas:
  • object_name: es el nombre de archivo del almacenamiento de objetos que contiene la cadena de texto buscada.

  • object_path: es el URI de carpeta o cubo de almacenamiento de objetos que contiene el archivo de almacenamiento de objetos.

  • mtime: es el último registro de hora modificado del archivo de almacenamiento de objetos. Esta es la hora a la que DBMS_CLOUD accedió por última vez al archivo.

Por ejemplo:
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

Esta consulta devuelve los nombres de archivo y el URI de ubicación en el almacenamiento de objetos que contiene la cadena de texto king, en mayúsculas o 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

Esta consulta devuelve el nombre de archivo y el registro de hora de la última modificación de los archivos de objeto en los que se crea el índice EMP.

Supervisar creación de índice de texto

Al ejecutar DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX, la operación de creación de índice de texto se registra en la vista ALL_SCHEDULER_JOB_RUN_DETAILS.

Puede consultar la vista ALL_SCHEDULER_JOB_RUN_DETAILS para obtener el estado y cualquier error informado por el trabajo de creación de índices.

El nombre del trabajo DBMS_SCHEDULER se deriva del parámetro INDEX_NAME especificado al llamar a DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX.

Para consultar la vista ALL_SCHEDULER_JOB_RUN_DETAILS, debe estar conectado como usuario ADMIN o tener el privilegio READ en la vista ALL_SCHEDULER_JOB_RUN_DETAILS.

Por ejemplo, la siguiente sentencia SELECT con una cláusula WHERE en job_name muestra los detalles de ejecución del trabajo:

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

También puede consultar la existencia de un trabajo del programador de creación de índices.

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

Consulte el procedimiento CREATE_EXTERNAL_TEXT_INDEX para obtener más información.