Consulta de tablas de iceberg de Apache
Autonomous Database soporta la consulta de tablas de Apache Iceberg.
- Acerca de la consulta de tablas de Apache Iceberg
Autonomous Database soporta la consulta de tablas de Apache Iceberg almacenadas en Amazon Web Services (AWS) o en Oracle Cloud Infrastructure (OCI) Object Storage. - Conceptos relacionados con la consulta de tablas de iceberg de Apache
Un conocimiento de los siguientes conceptos resulta útil para consultar tablas de iceberg de Apache. - Ejemplos: consulta de tablas de Iceberg de Apache
Estos ejemplos muestran cómo consultar tablas de Iceberg de Apache en Amazon Web Services (AWS) y Oracle Cloud Infrastructure (OCI), mediante un catálogo de datos y utilizando URL directas para el archivo de manifiesto raíz.
Tema principal: Consulta de datos externos con Autonomous Database
Acerca de la consulta de tablas de Apache Iceberg
Autonomous Database soporta la consulta de tablas de Apache Iceberg almacenadas en Amazon Web Services (AWS) o en Oracle Cloud Infrastructure (OCI) Object Storage.
Configuraciones Soportadas
- Tablas Iceberg en AWS:
- Tablas Iceberg registradas con AWS Glue Data Catalog, creadas con Spark o Athena.
Para obtener más información, consulte Uso del conector AWS Glue para leer y escribir tablas de Apache Iceberg con transacciones ACID y realizar viajes en el tiempo y Uso de tablas Iceberg.
- Tablas Iceberg almacenadas en AWS S3 proporcionando directamente la URL del archivo de metadatos raíz.
- Tablas Iceberg registradas con AWS Glue Data Catalog, creadas con Spark o Athena.
- Tablas de Iceberg en OCI:
- Tablas de iceberg generadas con OCI Data Flow mediante un catálogo de Hadoop.
Para obtener más información, consulte Ejemplos de Oracle Data Flow y Uso de un catálogo de Hadoop.
- Tablas de iceberg almacenadas en OCI Object Storage proporcionando directamente la URL del archivo de metadatos raíz.
- Tablas de iceberg generadas con OCI Data Flow mediante un catálogo de Hadoop.
Restricciones
- Mesas de Iceberg
Oracle no soporta tablas particionadas de Iceberg.
- Actualizaciones a nivel de fila de tablas Iceberg
Oracle no soporta la fusión en lectura para las actualizaciones de tablas de Iceberg. Las consultas que encuentren archivos eliminados en los metadatos de Iceberg fallarán. Para obtener más información sobre la fusión al leer, consulte Enum RowLevelOperationMode.
- Evolución del Esquema
El esquema de las tablas externas de Oracle es fijo y refleja la versión del esquema de Iceberg en el momento de la creación de la tabla externa. Las consultas fallan si los metadatos de Iceberg apuntan a una versión de esquema diferente a la utilizada para crear la tabla de Iceberg. Si el esquema de Iceberg cambia después de crear la tabla externa, se recomienda volver a crear la tabla externa.
Tema principal: Consulta de tablas de Iceberg de Apache
Conceptos relacionados con la consulta de tablas de Apache Iceberg
Una comprensión de los siguientes conceptos es útil para consultar tablas de Apache Iceberg.
Catálogo de Iceberg
El catálogo de Iceberg es un servicio que gestiona los metadatos de tabla, como las instantáneas de tabla, el esquema de tabla y la información de partición. Para consultar la última instantánea de una tabla de Iceberg, los motores de consulta deben acceder primero al catálogo y obtener la ubicación del archivo de metadatos más reciente. Ya hay una serie de implementaciones de catálogo disponibles, incluidas AWS Glue, Hive, Nessie y Hadoop. Autonomous Database soporta el catálogo de AWS Glue y la implantación HadoopCatalog utilizada por Spark.
Para obtener más información, consulte Catálogo de Iceberg, Simultaneidad optimista, Implantaciones de catálogo y Clase HadoopCatalog.
Archivos de Metadatos
El archivo de metadatos es un documento JSON que realiza un seguimiento de las instantáneas de la tabla, el esquema de partición y la información del esquema. El archivo de metadatos es el punto de entrada a una jerarquía de listas de manifiestos y archivos de manifiesto. Los manifiestos realizan un seguimiento de los archivos de datos de la tabla junto con información que incluye la partición y las estadísticas de columna. Consulte la especificación de tabla de Iceberg para obtener más información.
Transacciones
Iceberg soporta actualizaciones de nivel de fila en tablas mediante copiar en escritura o combinar en lectura. La copia en escritura genera nuevos archivos de datos que reflejan las filas actualizadas, mientras que la fusión en lectura genera nuevos "archivos de supresión" que se deben fusionar con los archivos de datos durante la lectura. Oracle soporta la copia en escritura. Las consultas sobre tablas de iceberg fallan si encuentran un archivo de eliminación. Para obtener más información, consulte RowLevelOperationMode.
Evolución del Esquema
Iceberg apoya la evolución del esquema. Los cambios de esquema se reflejan en los metadatos de Iceberg mediante un ID de esquema. Tenga en cuenta que las tablas externas de Oracle tienen un esquema fijo, determinado por la versión de esquema más actual en el momento de la creación de la tabla. Las consultas de Iceberg fallan cuando los metadatos consultados apuntan a una versión de esquema diferente a la utilizada en el momento de la creación de la tabla. Para obtener más información, consulte Schema Evolution.
Partición
Iceberg soporta opciones avanzadas de partición, como la partición oculta y la evolución de la partición que se basan en el procesamiento/modificación de los metadatos de la tabla sin costosos cambios de diseño de datos.
Tema principal: Consulta de tablas de Iceberg de Apache
Ejemplos: consulta de tablas de Apache Iceberg
En estos ejemplos se muestra cómo consultar tablas de Apache Iceberg en Amazon Web Services (AWS) y Oracle Cloud Infrastructure (OCI), mediante un catálogo de datos y utilizando URL directas para el archivo de manifiesto raíz.
Para obtener información detallada sobre la creación de tablas externas para Apache Iceberg, consulte Procedimiento CREATE_EXTERNAL_TABLE para Apache Iceberg.
Consulta de una tabla Iceberg en AWS mediante un catálogo de datos de pegamento
En este ejemplo, consultamos la tabla Iceberg iceberg_parquet_time_dim
.
La tabla pertenece a la base de datos de pegamento my-iceberg-db
y se almacena en la carpeta s3://my-iceberg-bucket/iceberg-loc
.
Los detalles de la tabla para iceberg_parquet_time_dim
se muestran aquí:
![Descripción de example_1_details_v1.png a continuación Descripción de example_1_details_v1.png a continuación](img/example_1_details_v1.png)
Podemos crear una tabla externa para iceberg_parquet_time_dim
de la siguiente manera:
BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
table_name => 'iceberg_parquet_time_dim',
credential_name => 'AWS_CRED',
file_uri_list => '',
format =>
'{"access_protocol":
{
"protocol_type": "iceberg",
"protocol_config":
{
"iceberg_catalog_type": "aws_glue",
"iceberg_glue_region": "us-west-1",
"iceberg_table_path": "my-iceberg-db.iceberg_parquet_time_dim"
}
}
}'
);
END;
/
En la sección protocol_config, especificamos que la tabla utiliza AWS Glue como tipo de catálogo y definimos la región del catálogo en us-west-1
.
La credencial AWS_CRED
se crea mediante dbms_cloud.create_credential
con una clave de API de AWS. La instancia de Glue Data Catalog está determinada por el ID de cuenta asociado a AWS_CRED
para la región us-west-1
, ya que hay una única región de Glue Data Catalog para cada cuenta. El elemento iceberg_table_path
de la sección protocol_config
utiliza una ruta $database_name.$table_name
para especificar el nombre de la tabla de pegamento y el nombre de la base de datos. Por último, los parámetros column_list
y field_list
se dejan nulos porque el esquema de la tabla se deriva automáticamente de los metadatos de Iceberg.
Para obtener más información sobre la creación de la credencial, consulte Procedimiento CREATE_CREDENTIAL. Para obtener información sobre los recursos de AWS Glue, consulte Especificación de ARN de recursos de AWS Glue.
Consultar una tabla de Iceberg en AWS utilizando la ubicación del archivo de metadatos raíz
Si conocemos la ubicación del archivo de metadatos para una tabla Iceberg, podemos crear una tabla externa sin especificar un catálogo, de la siguiente manera:
BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
table_name => 'iceberg_parquet_time_dim',
credential_name => 'AWS_CRED',
file_uri_list => 'https://my-iceberg-bucket.s3.us-west-1.amazonaws.com/iceberg-loc/metadata/00004-1758ee2d-a204-4fd9-8d52-d17e5371a5ce.metadata.json',
format =>'{"access_protocol":{"protocol_type":"iceberg"}}');
END;
/
Utilizamos el parámetro file_uri_list
para especificar la ubicación del archivo de metadatos en el formato de URL de estilo alojado virtual S3 de AWS. Para obtener información sobre este formato, consulte Métodos para acceder a un cubo S3 de AWS.
En este ejemplo, la base de datos accede al archivo de metadatos directamente, por lo que no es necesario proporcionar una sección protocol_config
en el parámetro format
. Al utilizar la ubicación del archivo de metadatos para crear una tabla externa, la base de datos consulta la instantánea más reciente a la que hace referencia el archivo de metadatos. Las actualizaciones posteriores de la tabla Iceberg, que crean nuevas instantáneas y nuevos archivos de metadatos, no estarán visibles para la base de datos.
Consulta de una tabla de Iceberg que utiliza el catálogo de Hadoop en OCI
En este ejemplo, consultamos la tabla de Iceberg icebergTablePy
, creada mediante OCI Data Flow, donde Spark utiliza la implantación HadoopCatalog para el catálogo de Iceberg. HadoopCatalog utiliza un directorio warehouse
y coloca los metadatos de Iceberg en una subcarpeta $database_name/$table_name
en este directorio. También utiliza un archivo version-hint.text
que contiene el número de versión de la versión de archivo de metadatos más reciente. Consulte Soporte de Iceberg en OCI Data Flow para obtener el ejemplo en Github.
La tabla de ejemplo db.icebergTablePy
se ha creado mediante una carpeta warehouse
, denominada iceberg
, en el cubo de OCI my-iceberg-bucket
. A continuación se muestra el diseño de almacenamiento en OCI para la tabla icebergTablePy
:
![Descripción de example_3_table_v1.png a continuación Descripción de example_3_table_v1.png a continuación](img/example_3_table_v1.png)
Cree una tabla externa para la tabla db.icebergTablePy
de la siguiente forma:
BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
table_name => 'iceberg_parquet_time_dim3',
credential_name => 'OCI_CRED',
file_uri_list => '',
format =>'{"access_protocol":{"protocol_type":"iceberg",
"protocol_config":{"iceberg_catalog_type": "hadoop",
"iceberg_warehouse":"https://objectstorage.uk-cardiff-1.oraclecloud.com/n/my-tenancy/b/my-iceberg-bucket/o/iceberg",
"iceberg_table_path": "db.icebergTablePy"}}}');
END;
/
Consultar una tabla de Iceberg en OCI mediante la ubicación del archivo de metadatos raíz
Podemos consultar la tabla Iceberg descrita en la sección anterior utilizando directamente la URL para el archivo de metadatos, de la siguiente manera:
BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
table_name => 'iceberg_parquet_time_dim4',
credential_name => 'OCI_CRED',
file_uri_list => 'https://objectstorage.uk-cardiff-1.oraclecloud.com/n/my-tenancy/b/my-iceberg-bucket/o/iceberg/db/icebergTablePy/metadata/v2.metadata.json',
format =>'{"access_protocol":{"protocol_type":"iceberg"}}'
);
END;
/
En este ejemplo, utilizamos el parámetro file_uri_list
para especificar el URI para el archivo de metadatos mediante el formato de URI de OCI nativo. Al utilizar el URI del archivo de metadatos, la tabla externa siempre consulta la última instantánea almacenada en el archivo específico. Las actualizaciones posteriores que generan nuevas instantáneas y nuevos archivos de metadatos no son accesibles para la consulta.
Para obtener más información sobre el formato de URI de OCI nativo, consulte Formatos de URI de almacenamiento de objetos en la nube.
Tema principal: Consulta de tablas de Iceberg de Apache