MaxCompute le permite crear una tabla externa de Paimon para asignarla a un directorio de tablas de Paimon almacenado en Object Storage Service (OSS) y acceder a los datos que contiene. Este tema describe cómo crear una tabla externa de Paimon y acceder a ella con MaxCompute.
Descripción general
Apache Paimon es un formato de almacenamiento lakehouse para procesamiento por lotes y de streaming que ofrece escrituras de alto throughput y consultas de baja latencia. Se integra por completo con motores de cómputo comunes como Spark, Hive y Trino, así como con Realtime Compute for Apache Flink y E-MapReduce. Con Apache Paimon puede construir rápidamente un data lake en OSS y conectarlo a MaxCompute para realizar análisis. La función de filtrado de metadatos mejora aún más el rendimiento de las consultas, ya que omite archivos innecesarios de los directorios de OSS durante los trabajos de lectura.
Limitaciones
-
Limitaciones de esquema
Las tablas externas de Paimon no actualizan automáticamente sus esquemas para reflejar los cambios en los archivos subyacentes de Paimon.
-
Limitaciones de propiedades de tabla
No es posible establecer propiedades de clúster en una tabla externa de Paimon.
No se admite la configuración de una clave principal.
Las tablas externas de Paimon no admiten la transferencia directa de las propiedades de tabla de Paimon.
-
Operaciones de escritura, actualización y consulta de datos
Utilice las instrucciones
INSERT INTOoINSERT OVERWRITEpara escribir datos en una tabla externa de Paimon.No se admite la escritura de datos en tablas de buckets dinámicos ni en tablas entre particiones.
Las operaciones
UPDATEyDELETEno son compatibles con las tablas externas de Paimon.Las consultas time-travel que acceden a versiones históricas de datos no están disponibles para las tablas externas de Paimon.
No escriba datos directamente en las tablas externas de Paimon. En su lugar, utilice métodos como UNLOAD para exportar los datos a OSS.
MaxCompute y OSS deben encontrarse en la misma región.
Para obtener más información, consulte Supported data types.
Descripción de permisos
Cuando accede a tablas externas de OSS, los datos se consultan mediante el rol especificado en el parámetro
odps.properties.rolearn. Esto aplica sin importar si utiliza una cuenta de Alibaba Cloud, un usuario de RAM o un rol de RAM. Por lo tanto, debe crear un rol de RAM, otorgarle permisos para acceder al bucket de OSS de destino y configurar el ARN del rol en el parámetroodps.properties.rolearn. Para obtener más información, consulte Parameters.Puede autorizar el acceso dentro de la misma cuenta o entre cuentas distintas según sus necesidades de negocio. Se recomienda utilizar una directiva de autorización personalizada para lograr un control de acceso más detallado. Para obtener más información, consulte Authorization for external data sources.
Crear una tabla externa de Paimon
Sintaxis
Para conocer los detalles sobre la sintaxis de creación de tablas externas en distintos formatos, consulte OSS external tables.
CREATE EXTERNAL TABLE [if NOT EXISTS] <mc_oss_extable_name>
(
<col_name> <data_type>,
...
)
[COMMENT <table_comment>]
[PARTITIONED BY (<col_name> <data_type>, ...)]
STORED BY 'org.apache.paimon.hive.PaimonStorageHandler'
WITH serdeproperties (
'odps.properties.rolearn'='acs:ram::<uid>:role/<role_name>'
)
LOCATION '<oss_location>';
Parámetros comunes
Para obtener más información sobre los parámetros comunes, consulte Basic syntax parameters.
Escribir datos
Para conocer los detalles de la sintaxis de escritura en MaxCompute, consulte Write syntax.
Consultar y analizar datos
La lógica de fragmentación de datos (split) de las tablas de Paimon difiere de la de las tablas nativas de MaxCompute. El formato Paimon cuenta con mecanismos internos propios para organizar y fragmentar archivos, los cuales no se alinean por completo con los parámetros de MaxCompute.
Para consultar la sintaxis SELECT, consulte Query syntax.
Si necesita optimizar los planes de consulta, consulte Query optimization.
Para obtener más información sobre cómo omitir filas con errores, consulte BadRowSkipping.
Ejemplo
Paso 1: Requisitos previos
Cuenta con created a MaxCompute project.
-
Preparó un bucket y un directorio de OSS. Para obtener más información, consulte Create a bucket y Manage directories.
Asegúrese de que su bucket se encuentre en la misma región que su proyecto de MaxCompute.
-
Otorgue los permisos correspondientes.
Debe tener permiso para acceder a OSS. Es posible acceder a una tabla externa de OSS mediante una cuenta de Alibaba Cloud, un usuario de RAM o un rol de RAM. Para obtener más información sobre cómo otorgar permisos, consulte STS-mode authorization for OSS.
Requiere el permiso CreateTable en el proyecto de MaxCompute. Para obtener más información sobre los permisos relacionados con tablas, consulte MaxCompute permissions.
Paso 2: Preparar datos en Flink
Cree un catálogo de Paimon y una tabla de Paimon; después, inserte datos en la tabla.
Si ya cuenta con datos de tablas de Paimon en OSS, omita este paso.
-
Crear un catálogo de sistema de archivos de Paimon
Inicie sesión en la consola de real-time compute for Apache Flink y seleccione una región en la esquina superior izquierda.
Haga clic en el nombre del espacio de trabajo de destino y, en el panel de navegación izquierdo, seleccione Data Management.
-
En la página catalog list , haga clic en Create Catalog . En el cuadro de diálogo Create Catalog , seleccione Apache Paimon, haga clic en Next y configure los siguientes parámetros:
Parámetro
Obligatorio
Descripción
metastore
Sí
Tipo de metastore. En este ejemplo, seleccione
filesystem.catalog name
Sí
Nombre personalizado del catálogo, por ejemplo,
paimon-catalog.warehouse
Sí
Directorio del almacén en OSS. En este ejemplo, el directorio es
oss://paimon-fs/paimon-test/.fs.oss.endpoint
Sí
Endpoint del servicio OSS. Por ejemplo, el endpoint de la región China (Hangzhou) es
oss-cn-hangzhou-internal.aliyuncs.com.fs.oss.accessKeyId
Sí
AccessKey ID utilizado para acceder a OSS.
fs.oss.accessKeySecret
Sí
AccessKey secret utilizado para acceder a OSS.
-
Crear una tabla de Paimon
Inicie sesión en la consola de real-time compute for Apache Flink y seleccione una región en la esquina superior izquierda.
Haga clic en el nombre del espacio de trabajo de destino y, en el panel de navegación izquierdo, seleccione .
-
En la pestaña Query Script, haga clic en
para crear un nuevo script de consulta.Introduzca y ejecute los siguientes comandos:
CREATE TABLE `paimon_catalog`.`default`.test_tbl ( id BIGINT, data STRING, dt STRING, PRIMARY KEY (dt, id) NOT ENFORCED ) PARTITIONED BY (dt); INSERT INTO `paimon-catalog`.`default`.test_tbl VALUES (1,'CCC','2024-07-18'), (2,'DDD','2024-07-18');
-
Para los trabajos SQL que finalizan automáticamente, como aquellos que ejecutan una instrucción
INSERT INTO ... VALUES ..., siga estos pasos:Haga clic en el nombre del espacio de trabajo de destino. En el panel de navegación izquierdo, elija .
En la página Deployments, haga clic en el trabajo de destino para abrir la página de deployment details.
-
En la sección Parameters, haga clic en Edit. Después, en la sección Other Configuration, establezca
execution.checkpointing.checkpoints-after-tasks-finish.enabled: truey guarde los cambios.Para obtener más información sobre cómo configurar los parámetros de ejecución de un trabajo, consulte Configure job deployment information.
Paso 3: Crear una tabla externa de Paimon
Ejecute la siguiente instrucción SQL en MaxCompute para crear una tabla externa de Paimon:
CREATE EXTERNAL TABLE oss_extable_paimon_pt
(
id BIGINT,
data STRING
)
PARTITIONED BY (dt STRING )
STORED BY 'org.apache.paimon.hive.PaimonStorageHandler'
WITH serdeproperties (
'odps.properties.rolearn'='acs:ram::<uid>:role/<role_name>'
)
LOCATION 'oss://oss-cn-<your region>-internal.aliyuncs.com/<table_path>'
;
En la instrucción anterior, table_path es la ruta de la tabla de Paimon que creó en Flink, por ejemplo, paimon-fs/paimon-test/default.db/test_tbl. Siga estos pasos para localizar dicha ruta:
Inicie sesión en la consola de real-time compute for Apache Flink y seleccione una región en la esquina superior izquierda.
Haga clic en el nombre del espacio de trabajo de destino y, en el panel de navegación izquierdo, seleccione Data Management.
En la página Catalogs, debajo del catálogo de destino, haga clic en default. En la página default, busque la tabla de destino y haga clic en View en la columna Actions.
En la pestaña Table Schema, copie el valor del parámetro path de la sección Properties. Para table_path, introduzca la ruta sin el prefijo
oss://.
Paso 4: Cargar datos de partición
Si la tabla externa de OSS que creó está particionada, debe cargar sus particiones. Para obtener más información, consulte OSS external tables.
MSCK REPAIR TABLE oss_extable_paimon_pt ADD PARTITIONS;
Paso 5: Consultar la tabla externa de Paimon
Ejecute los siguientes comandos en MaxCompute para consultar la tabla externa de Paimon oss_extable_paimon_pt.
SET odps.sql.common.table.planner.ext.hive.bridge = true;
SET odps.sql.hive.compatible = true;
SELECT * FROM oss_extable_paimon_pt WHERE dt='2024-07-18';
Se devuelve el siguiente resultado:
+------------+------------+------------+
| id | data | dt |
+------------+------------+------------+
| 1 | CCC | 2024-07-18 |
| 2 | DDD | 2024-07-18 |
+------------+------------+------------+
Si el esquema de los archivos de Paimon difiere del esquema de la tabla externa:
Discrepancia en la cantidad de columnas: Si los archivos de Paimon contienen menos columnas que la definición DDL de la tabla externa, MaxCompute lee las columnas faltantes como NULL. Si los archivos contienen más columnas, MaxCompute las ignora.
Discrepancia en el tipo de columna: No es posible leer datos de una columna STRING de Paimon hacia una columna INT de MaxCompute. Leer datos de una columna INT hacia una columna STRING sí es compatible, aunque no se recomienda.
Tipos de datos compatibles
Para obtener más información sobre los tipos de datos de MaxCompute, consulte Data type editions 1.0 y 2.0.
Tipo de dato de Paimon | Tipo de dato de MaxCompute 2.0 | Compatibilidad de lectura/escritura | Descripción |
TINYINT | TINYINT | Entero con signo de 8 bits. | |
SMALLINT | SMALLINT | Entero con signo de 16 bits. | |
INT | INT | Entero con signo de 32 bits. | |
BIGINT | BIGINT | Entero con signo de 64 bits. | |
BINARY(MAX_LENGTH) | BINARY | Tipo de dato binario. La longitud máxima actual es de 8 MB. | |
FLOAT | FLOAT | Número de punto flotante binario de 32 bits. | |
DOUBLE | DOUBLE | Número de punto flotante binario de 64 bits. | |
DECIMAL(precision,scale) | DECIMAL(precision,scale) | Tipo numérico decimal exacto. El valor predeterminado es
| |
VARCHAR(n) | VARCHAR(n) | Tipo de carácter de longitud variable. n especifica la longitud y su rango va de 1 a 65,535. | |
CHAR(n) | CHAR(n) | Tipo de carácter de longitud fija. n especifica la longitud y su rango va de 1 a 255. | |
VARCHAR(MAX_LENGTH) | STRING | Tipo de cadena. La longitud máxima actual es de 8 MB. | |
DATE | DATE | Tipo de fecha. El formato es | |
TIME, TIME(p) | No compatible | El tipo de dato TIME de Paimon representa una hora sin zona horaria, compuesta por horas, minutos y segundos, con precisión de nanosegundos. TIME(p) especifica la precisión de los segundos fraccionarios de 0 a 9. El valor predeterminado es 0. No existe un tipo equivalente en MaxCompute. | |
TIMESTAMP, TIMESTAMP(p) | TIMESTAMP_NTZ | Tipo de marca de tiempo sin zona horaria, con precisión de nanosegundos. Para leer este tipo de dato, debe deshabilitar el puente JNI nativo mediante la ejecución del siguiente comando: | |
TIMESTAMP WITH LOCAL TIME_ZONE(9) | TIMESTAMP |
| |
TIMESTAMP WITH LOCAL TIME_ZONE(9) | DATETIME | Tipo de marca de tiempo con precisión de nanosegundos. El formato es | |
BOOLEAN | BOOLEAN | Tipo BOOLEAN. | |
ARRAY | ARRAY | Tipo complejo. | |
MAP | MAP | Tipo complejo. | |
ROW | STRUCT | Tipo complejo. | |
MULTISET<t> | No compatible | No existe un tipo equivalente en MaxCompute. | |
VARBINARY, VARBINARY(n), BYTES | BINARY | Tipo de dato de cadenas binarias de longitud variable. |
Solución de problemas
Error kSIGABRT al leer una tabla externa de Paimon
-
Mensaje de error:
ODPS-0123144: Fuxi job failed - kSIGABRT(errCode:6) at Odps/*****_SQL_0_1_0_job_0/M1@f01b17437.cloud.eo166#3. Detail error msg: CRASH_CORE, maybe caused by jvm crash, please check your java udf/udaf/udtf. | fatalInstance: Odps/*****_SQL_0_1_0_job_0/M1#0_0 -
Causa:
Este error ocurre cuando se lee una columna TIMESTAMP_NTZ en modo JNI.
-
Solución:
Deshabilite el puente JNI mediante la ejecución del siguiente comando antes de su consulta:
SET odps.sql.common.table.jni.disable.native=true;
Artículos relacionados
También puede usar un catálogo personalizado de Flink para gestionar las tablas externas de Paimon en MaxCompute. Esto le permite escribir datos con Flink y consultarlos en MaxCompute. Para obtener más información, consulte Create a MaxCompute Paimon external table by using Flink.