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 embebidos 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. Almacene 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;
    /
    

    No es necesario crear una credencial para acceder al almacén de objetos de Oracle Cloud Infrastructure si activa las credenciales de la entidad de recurso. Consulte Uso de la entidad 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 para ORC, Parquet o Avro sobre los archivos de origen mediante el procedimiento DBMS_CLOUD.CREATE_EXTERNAL_TABLE.

    El procedimiento DBMS_CLOUD.CREATE_EXTERNAL_TABLE admite archivos externos en los servicios de almacenamiento de objetos en la nube compatibles, incluidos: Oracle Cloud Infrastructure Object Storage, Azure Blob Storage o Azure Data Lake 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. Consulte Reglas de nomenclatura de objetos de base de datos para obtener más información.

    • file_uri_list: es una lista delimitada por comas de los archivos de origen que desea consultar. El formato de URI para puntos finales dedicados está soportado en dominios comerciales (OC1). Consulte Object Storage Dedicated Endpoints y DBMS_CLOUD URI Formats para obtener más información.

    • 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(32767) 
    CHANNEL_ID           NUMBER(10)     
    PROMO_ID             NUMBER(10)     
    QUANTITY_SOLD        NUMBER(10)     
    AMOUNT_SOLD          NUMBER(10,2)   
    GENDER               VARCHAR2(32767) 
    CITY                 VARCHAR2(32767) 
    STATE_PROVINCE       VARCHAR2(32767) 
    INCOME_LEVEL         VARCHAR2(32767)
    
    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.

Consulta de Datos Externos con Archivos de Origen ORC, Parquet o Avro y Definición Explícita del Tamaño de Columna de Texto

Al acceder a los datos de ORC, Parquet o Avro almacenados en el almacén de objetos mediante tablas externas en Autonomous Database, puede definir de forma automática o explícita el tamaño máximo de las columnas de texto.

Por defecto, el tamaño de columna de texto se define según el valor de MAX_STRING_SIZE.

El archivo de origen de este ejemplo, sales_extended.parquet, contiene datos de formato Parquet. Para consultar este archivo en Autonomous Database y definir el tamaño máximo de columna de texto, realice lo siguiente:

  1. Almacene 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;
    /
    

    No es necesario crear una credencial para acceder al almacén de objetos de Oracle Cloud Infrastructure si activa las credenciales de la entidad de recurso. Consulte Uso de la entidad 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 para ORC, Parquet o Avro sobre los archivos de origen mediante el procedimiento DBMS_CLOUD.CREATE_EXTERNAL_TABLE y especifique el parámetro de formato maxvarchar.

    El procedimiento DBMS_CLOUD.CREATE_EXTERNAL_TABLE admite archivos externos en los servicios de almacenamiento de objetos en la nube compatibles, incluidos: Oracle Cloud Infrastructure Object Storage, Azure Blob Storage o Azure Data Lake 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", "maxvarchar":"extended"}'
     );
    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. Consulte Reglas de nomenclatura de objetos de base de datos para obtener más información.

    • file_uri_list: es una lista delimitada por comas de los archivos de origen que desea consultar. El formato de URI para puntos finales dedicados está soportado en dominios comerciales (OC1). Consulte Object Storage Dedicated Endpoints y DBMS_CLOUD URI Formats para obtener más información.

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

      La opción maxvarchar con el valor extended especifica que las columnas de texto se crean como varchar(32767) en una instancia de Autonomous Database con un tamaño de cadena ampliado. Los valores posibles son standard con varchar(4000), extended con varchar(32767) y auto. El valor por defecto maxvarchar es auto. Con este valor, el tamaño máximo de texto se basa en el valor de MAX_STRING_SIZE.

    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: analice 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 en 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(32767) 
    CHANNEL_ID           NUMBER(10)     
    PROMO_ID             NUMBER(10)     
    QUANTITY_SOLD        NUMBER(10)     
    AMOUNT_SOLD          NUMBER(10,2)   
    GENDER               VARCHAR2(32767) 
    CITY                 VARCHAR2(32767) 
    STATE_PROVINCE       VARCHAR2(32767) 
    INCOME_LEVEL         VARCHAR2(32767)
    
    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.

    Si especifica la opción format maxvarchar como standard, las columnas de texto varchar2() se crean con el tamaño 4000. Por ejemplo:

    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", "maxvarchar":"standard"}'
     );
    END;
    /     
    

    El parámetro format con la opción maxvarchar definida en el valor standard especifica que las columnas de texto se crean como varchar(4000).

    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)
    

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

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