Consulta de datos externos con archivos de origen ORC, Parquet o Avro

Autonomous Database facilita el acceso a los datos de ORC, Parquet o Avro almacenados en el almacén de objetos mediante tablas externas. Los orígenes ORC, Parquet y Avro tienen metadatos integrados y el procedimiento DBMS_CLOUD.CREATE_EXTERNAL_TABLE puede utilizar estos metadatos para simplificar la creación de tablas externas.

No es necesario conocer la estructura de los datos. DBMS_CLOUD puede examinar el archivo y convertir el contenido de ORC, Parquet o Avro en columnas y tipos de datos equivalentes de Oracle. Solo necesita conocer la ubicación de los datos en el almacén de objetos, especificar su tipo, ORC, Parquet o Avro, y tener credenciales para acceder al archivo de origen en el almacén de objetos.

Nota

Los pasos para utilizar tablas externas son muy similares para ORC, Parquet y Avro. En estos pasos se muestra cómo trabajar con un archivo de origen con formato Parquet.

El archivo de origen de este ejemplo, sales_extended.parquet, contiene datos de formato Parquet. Para consultar este archivo en Autonomous Database, realice lo siguiente:

  1. Store las credenciales del almacén de objetos para acceder al almacén de objetos mediante el procedimiento DBMS_CLOUD.CREATE_CREDENTIAL:
    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. Create an external table for ORC, Parquet, or Avro on top of your source files using the procedure 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, incluidos: Oracle Cloud Infrastructure Object Storage, Azure Blob Storage, Amazon S3 y compatible con Amazon S3, incluidos: Oracle Cloud Infrastructure Object Storage, Google Cloud Storage y Wasabi Hot Cloud Storage. La credencial es una propiedad de nivel de tabla; los archivos externos deben estar en el mismo almacén de objetos.

    Por defecto, las columnas creadas en la tabla externa asignan automáticamente sus tipos de datos a los tipos de datos de Oracle para los campos encontrados en los archivos de origen y los nombres de columna de la tabla externa coinciden con los nombres de campo de origen.

    BEGIN
       DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
        table_name =>'sales_extended_ext',
        credential_name =>'DEF_CRED_NAME',
        file_uri_list =>'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/sales_extended.parquet',
        format =>  '{"type":"parquet", "schema": "first"}'
     );
    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 para describir el formato del archivo de origen. Para un archivo Parquet, utilice el parámetro format para especificar el valor de type parquet. Para un archivo Avro, utilice el parámetro format para especificar el valor de type avro. Para un archivo ORC utilice el parámetro format para especificar el valor de orc de type.

    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.

    Por defecto, se define el parámetro format schema y las columnas y los tipos de datos se derivan automáticamente y los campos del origen coinciden con las columnas de la tabla externa por nombre. Los tipos de datos de origen se convierten en los tipos de datos de Oracle de columna de tabla externa según la asignación DBMS_CLOUD para los tipos de datos ORC, Parquet o Avro. Los valores de parámetro schema válidos son:

    • first: analice el esquema del primer archivo de ORC, Parquet o Avro que DBMS_CLOUD encuentre en el file_uri_list especificado (first es el valor por defecto para schema).

    • all: analiza todos los esquemas de todos los archivos de ORC, Parquet o Avro encontrados en file_uri_list. Puesto que se trata simplemente de archivos capturados en un almacén de objetos, no hay garantía de que los metadatos de cada archivo sean los mismos. Por ejemplo, File1 puede contener un campo denominado "dirección", mientras que File2 puede que falte ese campo. Examinar cada uno de los archivos para derivar las columnas es un poco más costoso, pero puede ser necesario si el primer archivo no contiene todos los campos necesarios.

    Nota

    Si se especifica el parámetro column_list, proporcione los nombres de columna y los tipos de datos para la tabla externa y el valor schema, si se especifica, se ignora. Con column_list puede limitar las columnas de la tabla externa. Si no se especifica column_list, el valor por defecto schema es first.
  3. A continuación puede ejecutar consultas en la tabla externa que ha creado en el paso anterior:
    DESC sales_extended_ext;
    Name           Null? Type           
    -------------- ----- -------------- 
    PROD_ID              NUMBER(10)     
    CUST_ID              NUMBER(10)     
    TIME_ID              VARCHAR2(4000) 
    CHANNEL_ID           NUMBER(10)     
    PROMO_ID             NUMBER(10)     
    QUANTITY_SOLD        NUMBER(10)     
    AMOUNT_SOLD          NUMBER(10,2)   
    GENDER               VARCHAR2(4000) 
    CITY                 VARCHAR2(4000) 
    STATE_PROVINCE       VARCHAR2(4000) 
    INCOME_LEVEL         VARCHAR2(4000)
    
    SELECT prod_id, quantity_sold, gender, city, income_level 
         FROM sales_extended_ext 
         WHERE ROWNUM < 8;
    
         PROD_ID     QUANTITY_SOLD     GENDER    CITY              INCOME_LEVEL
    1    13          1                 M         Adelaide          K: 250,000 – 299,999
    2    13          1                 M         Dolores           L: 300,000 and above
    3    13          1                 M         Cayuga            F: 110,000 – 129,999
    4    13          1                 F         Bergen op Zoom    C: 50,000 – 69,999
    5    13          1                 F         Neuss             J: 190,000 – 249,999
    6    13          1                 F         Darwin            F: 110,000 – 129,999
    7    13          1                 M         Sabadell          K:250,000 – 299,999
    

    En esta consulta se muestran los valores de las filas de la tabla externa. Si desea consultar estos datos con frecuencia, después de examinar los datos, puede cargarlos en una tabla con DBMS_CLOUD.COPY_DATA.

Consulte CREATE_EXTERNAL_TABLE Procedimiento para archivos de Avro, ORC o Parquet y COPY_DATA Procedimiento para archivos de Avro, ORC o Parquet para obtener más información.

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