Uso de la búsqueda de JSON en documentos de Object Storage

Puede crear un índice de búsqueda JSON en documentos que residan en archivos almacenados en Object Storage, lo que le permite buscar campos en los documentos JSON mediante JSON_TEXTCONTAINS, por ejemplo, buscando con comodines.

Uso de la búsqueda de JSON en documentos de Object Storage

Puede crear un índice de búsqueda JSON en documentos de archivos almacenados en Object Storage. Un índice de búsqueda JSON está diseñado específicamente para documentos JSON y le permite realizar búsquedas regulares y de texto completo en los documentos o fragmentos de los documentos mediante JSON_TEXTCONTAINS.

Consulte Condición JSON_TEXTCONTAINS para obtener más información.

Utilice DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX para crear un índice de búsqueda JSON en archivos de Object Storage. 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. Consulte Creación de un índice de búsqueda JSON en documentos JSON en archivos para obtener más información.

Los siguientes objetos se crean al crear un índice de búsqueda JSON:

  • Índice de búsqueda JSON index_name en los archivos JSON de Object Storage.

  • Tabla local INDEX_NAME$TXTIDX. Esta tabla es la tabla de asignación entre los documentos de los archivos de Object Storage y el índice de búsqueda JSON que se crea en la base de datos. Consulte Tabla de referencia de índice de búsqueda JSON para obtener más información.

  • Vista con el nombre estándar INDEX_NAME. Puede utilizar la vista para realizar una búsqueda mediante JSON_TEXTCONTAINS. Esta vista se crea sobre la tabla INDEX_NAME$TXTIDX. Consulte Vista de referencia de índice de búsqueda JSON para obtener más información.

  • Tabla de log de errores con el sufijo estándar index_name$txtidx_err. Consulte Tabla de logs de errores para obtener más información.

La operación de creación del índice de búsqueda JSON se registra en la vista ALL_SCHEDULER_JOB_RUN_DETAILS. Consulte Supervisión de Creación de Índices de Texto para obtener más información.

Autonomous Database soporta la creación de índices de búsqueda JSON para una serie de archivos de texto que contienen documentos JSON. Por ejemplo, puede indexar archivos JSON en formato comprimido y descomprimido, o seleccionar un delimitador de documento JSON diferente. Consulte DBMS_CLOUD Package para obtener más información sobre las opciones de manejo de archivos.

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

Creación de un índice de búsqueda JSON en documentos JSON en archivos

Utilice DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX para crear un índice de búsqueda JSON en los archivos JSON almacenados en Object Storage.

Consulte Indexación con Oracle Text para obtener más información sobre las palabras de parada de Oracle Text.

  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 búsqueda JSON en los archivos de almacenamiento de objetos.
    
    BEGIN 
     DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX (
            credential_name => 'OBJ_STORE_CRED',
            location_uri    => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/vcnlogs/',
            index_name      => 'VNCLOGS',
            format          =>  JSON_OBJECT ('json_index' value 'true', 'json_index_doc_len' value 12000, 'file_compression' value 'gzip')
    );
    END;
    /
    En este ejemplo, se crea lo siguiente:
    • Índice de búsqueda JSON VNCLOGS en los archivos de Object Storage ubicados en el URI especificado en el parámetro location_uri.

    • Tabla local VNCLOGS$TXTIDX. Consulte Tabla de referencia de índice de búsqueda JSON para obtener más información.

    • Vista con el nombre VNCLOGS. Esta vista se crea sobre la tabla VNCLOGS$TXTIDX. Puede utilizar la vista para realizar una búsqueda mediante JSON_TEXTCONTAINS. Consulte Vista de referencia de índice de búsqueda JSON para obtener más información.

    • Tabla de log de errores con el nombre VNC$TXTIDX_ERR. La tabla contiene una lista de documentos JSON no válidos en los archivos. Consulte Tabla de logs de errores para obtener más información.

    Después de crear el índice de búsqueda JSON, puede consultar la vista VNCLOGS. Por ejemplo:

    SELECT JSON_QUERY (data, '$' returning CLOB pretty) AS RECORD 
     FROM vnclogs WHERE JSON_TEXTCONTAINS(file_line_json, '$.tuples', '{XXX.XXX.0.1.10.10.10.10.null.XXX_345}');
    

    Esta consulta devuelve los detalles de log de las direcciones IP especificadas en la condición JSON_TEXTCONTAINS. Tenga en cuenta que los criterios de índice de búsqueda JSON se especifican en la columna file_line_json, la columna indexada en la tabla de índice de búsqueda JSON de la base de datos, mientras que los documentos JSON se transmiten directamente desde Object Storage, representados a través de la columna data. La columna data contiene el contenido del archivo de Object Storage.

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

Borrar un índice de búsqueda JSON

Utilice el procedimiento DBMS_CLOUD.DROP_EXTERNAL_TEXT_INDEX para borrar un índice de búsqueda JSON en los archivos JSON almacenados en Object Storage.

Por ejemplo:

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

En este ejemplo se borra el índice de búsqueda JSON VCNLOGS.

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

Supervisar creación de índice de búsqueda JSON

Al ejecutar DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX, la operación de creación del índice de búsqueda JSON 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.

Tabla de referencia de índice de búsqueda JSON

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 JSON_TEXTCONTAINS. Por ejemplo, al llamar al procedimiento DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX el valor INDEX_NAME como VNCLOGS, se crea la tabla de referencia de índice de búsqueda JSON VNCLOGS$TXTIDX.

La tabla de referencia de índice de búsqueda JSON tiene las siguientes columnas:
  • object_name: es el nombre de archivo de Object Storage que contiene la cadena de texto buscada.

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

  • length: es la longitud del documento JSON.

  • offset: es el desplazamiento de bytes del inicio del archivo.

  • 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.

Ejecute la siguiente consulta para recuperar el nombre de objeto, la ruta de acceso del objeto, el desplazamiento y la longitud de la tabla de referencia del índice de búsqueda JSON:
SELECT * FROM (SELECT object_name, object_path, length, offset 
 FROM vnclogs$txtidx 
 WHERE JSON_TEXTCONTAINS (file_line_json, '$.tuples', '{XXX.XXX.0.1.10.10.10.10.null.XXX_345}') 
 ORDER BY mtime DESC) 
 WHERE rownum < 3;
 

Esta consulta proporciona información interna sobre dónde se encuentran los documentos relevantes en los archivos de Object Storage. La consulta no proporciona los documentos reales.

Para recuperar los documentos directamente, utilice la siguiente consulta:

SELECT * FROM (SELECT object_name, object_path, data
 FROM vnclogs
 WHERE JSON_TEXTCONTAINS (file_line_json, '$.tuples', '{XXX.XXX.0.1.10.10.10.10.null.XXX_345}')
 ORDER BY mtime DESC)
 WHERE rownum < 3;
 

Vista de referencia de índice de búsqueda JSON

Se crea una vista con el nombre INDEX_NAME al ejecutar DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX para crear un índice JSON.

La vista en sí no contiene datos. Los datos se recuperan en la vista al consultar la vista INDEX_NAME mediante la condición SQL JSON_TEXTCONTAINS.

Columna Descripción
OBJECT_NAME

Nombre de archivo de Object Storage que contiene la cadena de texto buscada.

OBJECT_PATH

El URI de carpeta o cubo de Object Storage que contiene el archivo de almacenamiento de objetos.

LENGTH

Longitud del documento JSON.

OFFSET

Desplazamiento de bytes del inicio del archivo.

DATA

El contenido del archivo de Object Storage.

FILE_LINE_JSON

Columna en la que se realiza JSON_TEXTCONTAINS.

MTIME

Registro de hora de la última modificación del archivo de almacenamiento de objetos. Esta es la hora a la que DBMS_CLOUD accedió por última vez al archivo.

Tabla de logs de errores

Se crea una tabla de log de errores index_name$txtidx_err al crear un índice de búsqueda JSON en los archivos JSON almacenados en Object Storage.

La tabla contiene una lista de los documentos JSON no válidos de los archivos. Un documento JSON se marca como no válido si la longitud del archivo de origen indexado supera el valor por defecto o el valor especificado. El valor por defecto es 32767 bytes y el valor máximo que puede especificar mediante la opción json_index_doc_len format es 200000 bytes. Consulte Creación de un índice de búsqueda JSON en documentos JSON en archivos para obtener más información.

Puede consultar index_name$txtidx_err para obtener la lista de archivos JSON no válidos notificados durante la creación del índice.

Columna Descripción
OBJECT_NAME Nombre de archivo de Object Storage que contiene la cadena de texto buscada.
OBJECT_PATH El URI de carpeta o cubo de Object Storage que contiene el archivo de almacenamiento de objetos.
OFFSET Desplazamiento de bytes del inicio de la línea.
LENGTH Longitud del documento JSON.
LINE_NUMBER Número de línea en el archivo del almacén de objetos.