Consulta de Tablas Externas con Partición Implícita

En Autonomous Database, puede crear tablas externas particionadas implícitas a partir de datos particionados de estilo Hive o a partir de datos particionados de carpetas simples almacenados en el almacén de objetos en la nube.

Acerca de las Tablas Externas con Partición Implícita

En Autonomous Database, utilice el procedimiento DBMS_CLOUD.CREATE_EXTERNAL_TABLE para crear tablas externas particionadas implícitas a partir de datos particionados de estilo Hive o a partir de datos particionados de carpetas simples almacenados en el almacén de objetos en la nube.

Utilice el procedimiento DBMS_CLOUD.CREATE_EXTERNAL_TABLE para crear tablas externas particionadas implícitas. Al transferir las opciones adecuadas a este procedimiento, las particiones se derivan de los datos de origen. Las tablas externas particionadas soportan la detección en tiempo de ejecución de columnas de partición y sus valores. La detección en tiempo de ejecución de cambios en la estructura del almacén de objetos subyacente, como la adición o eliminación de objetos, simplifica el proceso de mantenimiento al eliminar la necesidad de procedimientos de sincronización adicionales requeridos por DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE. Esto garantiza que los datos estén actualizados en tiempo de ejecución de consultas.

Con la partición implícita, Autonomous Database determina automáticamente las columnas en las que se "particiona" una tabla según la estructura de archivos jerárquica del origen de almacenamiento de objetos. No es necesario declarar explícitamente un esquema de partición. La partición implícita proporciona ventajas de rendimiento similares a las tablas de partición sin necesidad de definir explícitamente una tabla externa particionada mediante el procedimiento DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE.

Las tablas externas particionadas implícitas soportan los siguientes estilos de nomenclatura para los objetos particionados en el almacén de objetos:

Para obtener más información sobre los formatos de nomenclatura, consulte Acerca de las tablas externas con partición de archivos de origen.

Mediante el procedimiento DBMS_CLOUD.CREATE_EXTERNAL_TABLE, se pueden crear tablas externas particionadas implícitas de las siguientes formas:
  • Defina el tipo de partición en colmena con una lista determinada de columnas de partición

    En este caso, implicit_partition_type se define en hive y implicit_partition_columns proporciona una lista de columnas de partición.

    Por ejemplo:

    DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
       table_name        => 'mysales',
       credential_name   => 'mycredential',
       file_uri_list     => 'https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/*.parquet',
       column_list       => 'product varchar2(100), units number, country varchar2(100),year (number), month varchar2(2)',
       format            => '{"type":"parquet",
                              "implicit_partition_type":"hive",
                              "implicit_partition_columns":["country","year","month"]}');
  • Defina el tipo de partición en colmena sin proporcionar una lista de columnas de partición

    En este caso, implicit_partition_type se define en hive y no se proporciona implicit_partition_columns. Las columnas de partición se detectan automáticamente buscando '=' en la ruta especificada por file_uri_list. column_name está a la izquierda de '=' y el valor está en el lado derecho. Si no se encuentra column_name en la ruta de acceso, se devuelve un error.

    Por ejemplo:

    DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
       table_name        => 'mysales',
       credential_name   => 'mycredential',
       file_uri_list     => 'https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/*.parquet',
       column_list       => 'product varchar2(100), units number, country varchar2(100),year (number), month varchar2(2)',
       format            => '{"type":"parquet", "implicit_partition_type":"hive"');
  • Proporcione una lista de columnas de partición sin especificar el tipo

    En este caso, implicit_partition_type no está definido y implicit_partition_columns proporciona una lista de columnas.

    Por ejemplo:

    DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
       table_name        => 'mysales',
       credential_name   => 'mycredential',
       file_uri_list     => 'https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/*.parquet',
       column_list       => 'product varchar2(100), units number, country varchar2(100),year (number), month varchar2(2)',
       format            => '{"type":"parquet",
                              "implicit_partition_columns":["country","year","month"]}');

Consulte Procedimiento CREATE_EXTERNAL_TABLE para obtener más información.

Consulta de datos particionados implícitos externos con organización de archivos de origen de formato Hive

Utilice el procedimiento DBMS_CLOUD.CREATE_EXTERNAL_TABLE para crear una tabla externa particionada implícita a partir de datos del almacén de objetos generados a partir de datos de Hive.

Los archivos de origen de ejemplo del siguiente ejemplo utilizan este formato de nomenclatura:

OBJBUCKET/<table>/<partcol1>=<value1>/<partcol2>=<value2>/file.parquet

Tenga en cuenta los siguientes archivos de origen de ejemplo:

OBJBUCKET/sales/country=USA/year=2024/month=01/sales-2024-01.parquet

OBJBUCKET/sales/country=USA/year=2024/month=02/sales-2024-02.parquet

OBJBUCKET/sales/country=USA/year=2024/month=02/sales-2024-03.parquet

Para crear una tabla externa particionada implícita con datos almacenados en este formato de Hive de ejemplo, realice lo siguiente:

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

    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 particionada implícita sobre los archivos de origen mediante el procedimiento DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE.
    En este ejemplo, dado que no se proporciona la opción de formato implicit_partition_columns, las columnas de partición se detectan automáticamente y la partición implícita se activa definiendo la opción de formato implicit_partition_type en hive.

    Sin embargo, si se proporciona una lista de columnas, esas columnas se utilizan como columnas de partición y Autonomous Database no intenta detectar las columnas.

    Para detectar las columnas de partición, Autonomous Database comienza a buscar desde el principio de la ruta de acceso, especificada por file_uri_list, para '='. Cuando se encuentra, la parte izquierda de '=' hasta el último '/' se toma como columna (por ejemplo, "country") y la parte derecha de '=', hasta el primer '/' como valor (por ejemplo, "USA"). La búsqueda continúa para '=' hasta después de '/' que sigue al primer valor de partición, detectando el segundo '=' en la ruta, etc.

    DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
       table_name        => 'mysales',
       credential_name   => 'DEF_CRED_NAME',
       file_uri_list     => 'https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/*.parquet',
       column_list       => 'product varchar2(100), units number, country varchar2(100),year (number), month varchar2(2)',
       format            => '{"type":"parquet", "implicit_partition_type":"hive"');

    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 URI de archivo de origen. Hay dos opciones para esta lista:

      • Especifique una lista delimitada por comas de URI de archivos individuales sin comodines.

      • Especifique un URI de archivo único con comodines, donde los comodines solo pueden estar después de la última barra "/". Se puede utilizar el carácter "*" como comodín para varios caracteres; el carácter "?" se puede utilizar como comodín para un solo carácter.

    • column_list: es una lista delimitada por comas de nombres de columna y tipos de datos para la tabla externa. La lista incluye las columnas dentro del archivo de datos y las derivadas del nombre del objeto (de los nombres de la ruta del archivo especificada por file_uri_list).

      column_list no es necesario cuando los archivos de datos son archivos estructurados (Parquet, Avro u ORC).

    • format: define las opciones que puede especificar para describir el formato del archivo de origen. La opción implicit_partition_type especifica el tipo de formato de datos como colmena.

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

      Consulte Opciones de formato del paquete DBMS_CLOUD para obtener más información.

    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.

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

  3. A continuación puede ejecutar consultas en la tabla particionada externa que ha creado en el paso anterior.

    Autonomous Database aprovecha la información de partición de la tabla particionada externa, lo que garantiza que la consulta solo acceda a los archivos de datos relevantes del almacén de objetos.

    Por ejemplo:

    SELECT product, units FROM mysales WHERE year='2024' and month='02'

    Esta sentencia SQL solo consulta los datos de la partición para el mes 02 del año 2024.

Consulta de datos de estilo no de Hive particionados implícitos externos

Utilice el procedimiento DBMS_CLOUD.CREATE_EXTERNAL_TABLE para crear una tabla externa particionada implícita a partir de datos en el almacenamiento de objetos que se ha generado a partir de datos que no son de Hive.

Los archivos de origen de ejemplo del siguiente ejemplo utilizan este formato de nomenclatura:

OBJBUCKET/<table>/<value1>/<value2>/file.parquet

Tenga en cuenta los siguientes archivos de origen de ejemplo:

OBJBUCKET/sales/USA/2024/01/sales-2024-01.parquet

OBJBUCKET/sales/USA/2024/01/sales-2024-02.parquet

OBJBUCKET/sales/USA/2024/01/sales-2024-03.parquet

Para crear una tabla externa particionada implícita con datos almacenados en este formato de Hive de ejemplo, realice lo siguiente:

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

    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 particionada implícita sobre los archivos de origen mediante el procedimiento DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE.
    En este ejemplo, la partición implícita se activa proporcionando las columnas de partición con la opción de formato implicit_partition_columns. Dado que el nombre de carpeta no incluye las columnas de partición, los valores de partición de la ruta de acceso, especificados por file_uri_list, solo se pueden detectar si se proporciona una lista explícita de columnas con la opción de formato implicit_partition_columns. Para detectar los valores de columna respectivos en la ruta de acceso, el orden de las columnas debe ser el mismo que el orden de los valores.

    Las columnas de partición se detectan automáticamente.
    DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
       table_name        => 'mysales',
       credential_name   => 'DEF_CRED_NAME',
       file_uri_list     => 'https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/*.parquet',
       column_list       => 'product varchar2(100), units number, country varchar2(100),year (number), month varchar2(2)',
       format            => '{"type":"parquet", "implicit_partition_columns":["country","year","month"]}');

    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 URI de archivo de origen. Hay dos opciones para esta lista:

      • Especifique una lista delimitada por comas de URI de archivos individuales sin comodines.

      • Especifique un URI de archivo único con comodines, donde los comodines solo pueden estar después de la última barra "/". Se puede utilizar el carácter "*" como comodín para varios caracteres; el carácter "?" se puede utilizar como comodín para un solo carácter.

    • column_list: es una lista delimitada por comas de nombres de columna y tipos de datos para la tabla externa. La lista incluye las columnas dentro del archivo de datos y las derivadas del nombre del objeto (de los nombres de la ruta del archivo especificada por file_uri_list).

      column_list no es necesario cuando los archivos de datos son archivos estructurados (Parquet, Avro u ORC).

    • format: define las opciones que puede especificar para describir el formato del archivo de origen. La opción implicit_partition_type no está definida. Dado que se proporciona implicit_partition_columns, el tipo se detecta automáticamente como no colmena.

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

      Consulte Opciones de formato del paquete DBMS_CLOUD para obtener más información.

    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.

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

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

  3. A continuación puede ejecutar consultas en la tabla particionada externa que ha creado en el paso anterior.

    Autonomous Database aprovecha la información de partición de la tabla particionada externa, lo que garantiza que la consulta solo acceda a los archivos de datos relevantes del almacén de objetos.

    Por ejemplo:

    SELECT product, units FROM mysales WHERE year='2024'

    Esta sentencia SQL solo consulta los datos de la partición para el año 2024.