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.

También puede utilizar el procedimiento DBMS_CLOUD.CREATE_EXTERNAL_TABLE para consultar datos externos en los sistemas de archivos asociados o en el sistema de archivos local.

El procedimiento DBMS_CLOUD.CREATE_EXTERNAL_TABLE soporta archivos externos en los servicios de almacenamiento de objetos en la nube soportados, incluidos:

  • Oracle Cloud Infrastructure Object Storage

  • Almacenamiento de bloques de Azure

  • Amazon S3

  • Compatible con Amazon S3, incluidos: Oracle Cloud Infrastructure Object Storage, Google Cloud Storage y Wasabi Hot Cloud Storage.

  • GitHub Repositorio

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. Store las credenciales del almacén de objetos mediante el procedimiento DBMS_CLOUD.CREATE_CREDENTIAL.

    Por ejemplo:

    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'DEF_CRED_NAME',
        username => 'adb_user@example.com',
        password => 'password' );
    END;
    /
    

    La creación de una credencial para acceder al almacén de objetos de Oracle Cloud Infrastructure no es necesaria si activa las credenciales de la entidad de recurso. Consulte Uso de la principal de recurso para acceder a los recursos de Oracle Cloud Infrastructure para obtener más información.

    Con esta operación se almacenan 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 crear tablas externas.

    Consulte Procedimiento CREATE_CREDENTIAL para obtener información sobre los parámetros username y password para diferentes servicios de almacenamiento de objetos.

  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://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;
    /
    

    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. El parámetro credential_name debe cumplir las convenciones de nomenclatura de objetos de Oracle, que no permiten espacios ni guiones.

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

    • format: define las opciones que puede especificar para describir el formato del archivo de origen.

      Si los datos de los archivos de origen están cifrados, descifre los datos especificando el parámetro format con la opción encryption. Consulte Descifrado de datos durante la importación desde Object Storage para obtener más información sobre el descifrado de datos.

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

    En este ejemplo, namespace-string es el espacio de nombres de almacenamiento de objetos de Oracle Cloud Infrastructure, y bucketname es el nombre del cubo. Consulte Descripción de los espacios de nombres de Object Storage para obtener más información.

    Nota

    Autonomous Database soporta una serie de formatos de archivo de origen, incluidos los formatos de datos comprimidos. Consulte DBMS_CLOUD Package Format Options y la opción de formato DBMS_CLOUD compression para ver los tipos de compresión soportados.

    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 coincida 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 los parámetros DBMS_CLOUD, 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.

    Consulte Formatos de URI DBMS_CLOUD para obtener más información sobre los servicios de almacenamiento de objetos en la nube soportados.

Columnas de metadatos de tabla externa

Los metadatos de la tabla externa le ayudan a determinar de dónde provienen los datos al realizar una consulta.

The external tables you create with DBMS_CLOUD.CREATE_EXTERNAL_TABLE, DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE, or DBMS_CLOUD.CREATE_HYBRID_PART_TABLE include two invisible columns file$path and file$name. Estas columnas ayudan a identificar el archivo del que procede un registro.

  • file$path: especifica el texto de la ruta del archivo hasta el principio del nombre del objeto.

  • file$name: especifica el nombre del objeto, incluido todo el texto que sigue a la "/" final.

Por ejemplo:

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 Columnas invisibles para obtener más información sobre las columnas invisibles.