Consulta de datos externos con Autonomous Database on Dedicated Exadata Infrastructure

Describe paquetes y herramientas para consultar y validar datos con Autonomous Database on Dedicated Exadata Infrastructure.

La base de datos no gestiona los datos externos; sin embargo, puede utilizar los procedimientos DBMS_CLOUD para consultar los datos externos. Aunque las consultas de datos externos no serán tan rápidas como las consultas de tablas de base de datos, puede utilizar este enfoque para empezar rápidamente a ejecutar consultas en los archivos de origen externos y los datos externos.

Puede utilizar los procedimientos DBMS_CLOUD para validar los datos de los archivos de origen externos de una tabla externa para poder identificar problemas y corregir los datos de la tabla externa o excluir datos no válidos antes de utilizar los datos.

Note:

Si no utiliza el usuario ADMIN, asegúrese de que el usuario tiene los privilegios necesarios para las operaciones que debe realizar el usuario. Consulte Gestión de privilegios de usuario de base de datos para obtener más información.

Consulta de datos externos

Para consultar datos en archivos en la nube, primero debe almacenar las credenciales de almacenamiento de objetos en Autonomous Database y, a continuación, crear una tabla externa mediante el procedimiento PL/SQL DBMS_CLOUD.CREATE_EXTERNAL_TABLE.

El archivo de origen de este ejemplo, channels.txt, tiene los siguientes datos:

S,Direct Sales,Direct
T,Tele Sales,Direct
C,Catalog,Indirect
I,Internet,Indirect
P,Partners,Others
  1. Almacene la credencial de Cloud Object Storage mediante el procedimiento DBMS_CREDENTIAL.CREATE_CREDENTIAL. Por ejemplo:
    BEGIN
      DBMS_CREDENTIAL.CREATE_CREDENTIAL(
        credential_name => 'DEF_CRED_NAME',
        username => 'adb_user@oracle.com',
        password => 'password'
      );
    END;
    /

    Los valores que proporcione para username y password dependen del servicio de Cloud Object Storage que utilice:

    • Oracle Cloud Infrastructure Object Storage: username es el nombre de usuario de Oracle Cloud Infrastructure y password es el token de autenticación de Oracle Cloud Infrastructure. Consulte Trabajar con token de autenticación.

    • Oracle Cloud Infrastructure Object Storage Classic: username es el nombre de usuario de Oracle Cloud Infrastructure Classic y password es la contraseña de Oracle Cloud Infrastructure Classic.

    Esta operación almacena las credenciales en la base de datos en un formato cifrado. Puede utilizar cualquier nombre para el nombre de credencial. Tenga en cuenta que este paso solo es necesario una vez, a menos que cambien las credenciales del almacén de objetos. Una vez almacenadas las credenciales, puede utilizar el mismo nombre de credencial para todas las cargas de datos.

  2. Cree una tabla externa sobre los archivos de origen mediante el procedimiento DBMS_CLOUD.CREATE_EXTERNAL_TABLE.

    El procedimiento DBMS_CLOUD.CREATE_EXTERNAL_TABLE soporta archivos externos en los servicios de almacenamiento de objetos en la nube soportados. La credencial es una propiedad de nivel de tabla; los archivos externos deben estar en el mismo almacén de objetos.

    Por ejemplo:

    BEGIN
       DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
        table_name =>'CHANNELS_EXT',
        credential_name =>'DEF_CRED_NAME',
        file_uri_list =>'https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/v1/idthydc0kinr/mybucket/channels.txt',
        format => json_object('delimiter' value ','),
        column_list => 'CHANNEL_ID NUMBER, 
    	CHANNEL_DESC VARCHAR2(20), 
    	CHANNEL_CLASS VARCHAR2(20)'
     );
    END;
    /
    

    Los parámetros son:

    • table_name: es el nombre de la tabla externa.

    • credential_name: es el nombre de la credencial creada en el paso anterior.

    • file_uri_list: es una lista delimitada por comas de los archivos de origen que desea consultar.

      En este ejemplo, file_uri_list es un URI de Swift de Oracle Cloud Infrastructure que especifica el archivo channels.txt en el cubo mybucket de la región us-phoenix-1. (idthydc0kinr es el espacio de nombres de almacenamiento de objetos en el que reside el cubo). Para obtener información sobre los formatos de URI soportados, consulte Formatos de URI de almacenamiento de objetos en la nube.

    • format: define las opciones que puede especificar para describir el formato del archivo de origen. Para obtener información sobre las opciones de formato que puede especificar, consulte Parámetro de formato.

    • column_list: es una lista delimitada por comas de las definiciones de columna en los archivos de origen.

    A continuación puede ejecutar consultas en la tabla externa que ha creado en el paso anterior. Por ejemplo:

    SELECT count(*) FROM channels_ext;

    Por defecto, la base de datos espera que todas las filas del archivo de datos externo sean válidas y que coincidan con las definiciones de tipo de dato de destino, así como con la definición de formato de los archivos. Si hay filas en los archivos de origen que no coincidan con las opciones de formato que ha especificado, la consulta informa de un error. Puede utilizar las opciones del parámetro format, como rejectlimit, para suprimir estos errores. Como alternativa, también puede validar la tabla externa que ha creado para ver los mensajes de error y las filas rechazadas, de modo que pueda cambiar las opciones de formato según corresponda. Consulte Validación de datos externos para obtener más información.

    Para obtener información detallada sobre los parámetros, consulte Procedimiento CREATE_EXTERNAL_TABLE.

Validación de datos externos

Para validar una tabla externa, utilice el procedimiento DBMS_CLOUD.VALIDATE_EXTERNAL_TABLE.

Antes de validar una tabla externa, debe crear la tabla externa mediante el procedimiento DBMS_CLOUD.CREATE_EXTERNAL_TABLE. A continuación, utilice el procedimiento DBMS_CLOUD.VALIDATE_EXTERNAL_TABLE para validarla. Por ejemplo:

BEGIN 
  DBMS_CLOUD.VALIDATE_EXTERNAL_TABLE (
    table_name => 'CHANNELS_EXT' );
END;
/

Este procedimiento examina los archivos de origen y los valida mediante las opciones de formato especificadas al crear la tabla externa.

La operación de validación, por defecto, examina todas las filas de los archivos de origen y se para cuando se rechaza una fila. Si desea validar solo un subjuego de las filas, utilice el parámetro rowcount. Cuando se define el parámetro rowcount, la operación de validación examina las filas y se para cuando se rechaza una fila o cuando se valida el número especificado de filas sin errores.

Por ejemplo, la siguiente operación de validación examina 100 filas y se para cuando se rechaza una fila o cuando se validan 100 filas sin errores:

BEGIN 
  DBMS_CLOUD.VALIDATE_EXTERNAL_TABLE (
     table_name => 'CHANNELS_EXT',
     rowcount => 100 ); 
END; 
/

Si no desea que la validación se pare cuando se rechace una fila y desea ver todas las filas rechazadas, defina el parámetro stop_on_error en FALSE. En este caso, VALIDATE_EXTERNAL_TABLE examina todas las filas e informa de todas las filas rechazadas.

Si desea validar solo un subjuego de filas, utilice el parámetro rowcount. Cuando se define rowcount y stop_on_error se define en FALSE, la operación de validación examina las filas y se para cuando se rechaza el número especificado de filas o cuando se valida el número especificado de filas sin errores. Por ejemplo, en el siguiente ejemplo se examinan 100 filas y se para cuando se rechazan 100 filas o cuando se validan 100 filas sin errores:

BEGIN 
  DBMS_CLOUD.VALIDATE_EXTERNAL_TABLE (
     table_name => 'CHANNELS_EXT',
     rowcount => 100, 
     stop_on_error => FALSE );
END; 
/

Consulte Procedimiento VALIDATE_EXTERNAL_TABLE para obtener información detallada sobre los parámetros DBMS_CLOUD.VALIDATE_EXTERNAL_TABLE.

Consulte Visualización de logs para validación de datos para ver los resultados de las operaciones de validación en las tablas dba_load_operations y user_load_operations.

Visualización de logs de validación de datos

Después de validar una tabla externa, puede ver el resultado de la operación de validación consultando una tabla de operaciones de carga:

  • dba_load_operations: muestra todas las operaciones de validación.

  • user_load_operations: muestra las operaciones de validación del esquema.

Puede utilizar estas tablas para ver la información de validación de carga. Por ejemplo, utilice esta sentencia SELECT para consultar user_load_operations:

SELECT table_name,owner_name,type,status,start_time,update_time,logfile_table,badfile_table
FROM user_load_operations
WHERE type = 'VALIDATE';


TABLE_NAME    OWNER_NAME  TYPE       STATUS     START_TIME     UPDATE_TIME    LOGFILE_TABLE    BADFILE_TABLE
------------- ----------  ---------- ---------- -------------- -------------  ---------------  ---------------
CHANNELS_EXT  SH          VALIDATE   COMPLETED  13-NOV-17...   13-NOV-17...   VALIDATE$21_LOG  VALIDATE$21_BAD

Al utilizar esta sentencia SQL con la cláusula WHERE en la columna TYPE, se muestran todas las operaciones de carga con el tipo VALIDATE.

La columna LOGFILE_TABLE muestra el nombre de la tabla que puede consultar para ver el log de una operación de validación. Por ejemplo, en la siguiente consulta se muestra el log de esta operación de validación:

SELECT * FROM VALIDATE$21_LOG;

La columna BADFILE_TABLE muestra el nombre de la tabla que puede consultar para ver las filas en las que se han producido errores durante la validación. Por ejemplo, en la siguiente consulta se muestran los registros rechazados de la operación de validación anterior:

SELECT * FROM VALIDATE$21_BAD;

En función de los errores que se muestran en el log y las filas que se muestran en BADFILE_TABLE, puede corregir el error si borra la tabla externa mediante el comando DROP TABLE y la vuelve a crear especificando las opciones de formato correctas en DBMS_CLOUD.CREATE_EXTERNAL_TABLE.

Note:

Las tablas LOGFILE_TABLE y BADFILE_TABLE se almacenan durante dos días para cada operación de validación y, a continuación, se eliminan automáticamente.