Todos los productos
Search
Centro de documentos

Realtime Compute for Apache Flink:Procesamiento por lotes de Flink

Última actualización: Sep 03, 2026

Este tutorial proporciona un ejemplo concreto para demostrar cómo utilizar las funciones clave de Realtime Compute for Apache Flink en el procesamiento por lotes.

Funciones

Realtime Compute for Apache Flink ofrece las siguientes funciones clave para admitir el procesamiento por lotes de Flink:

  • Job development map: En la pestaña Drafts de la página SQL Editor, puede crear un borrador por lotes, el cual posteriormente se despliega y ejecuta como un despliegue por lotes.

  • Deployment management: En la página Deployments, puede desplegar directamente despliegues por lotes JAR o Python. Seleccione BATCH en la lista desplegable superior para ver los despliegues por lotes implementados. Expanda un despliegue por lotes objetivo para consultar su lista de instancias de trabajo. Por lo general, las distintas instancias de trabajo de un despliegue por lotes comparten la misma lógica de procesamiento, pero utilizan parámetros diferentes, como la fecha de los datos que se procesan.

  • Data query: En la pestaña Scripts de la página SQL Editor, puede ejecutar sentencias DDL o consultas breves para una gestión y exploración rápida de datos. Estas consultas cortas se ejecutan en una sesión de Flink creada previamente, lo que permite una ejecución de baja latencia para consultas simples mediante la reutilización de recursos.

  • Data management: En la página Catalogs, puede crear y consultar catálogos, incluidas las bases de datos y tablas que contienen. También puede verlos en la pestaña Catalogs de la página SQL Editor para mejorar la eficiencia del desarrollo.

  • Task orchestration (Public Preview): En la página Workflows, puede usar una interfaz visual para definir un flujo de trabajo que orqueste las dependencias entre los despliegues por lotes. Puede activar el flujo de trabajo manualmente o programarlo para que se ejecute periódicamente.

  • Manage resource queues: En la página Queue Management, puede particionar los recursos dentro de un espacio de trabajo para evitar la contención de recursos entre despliegues de streaming y por lotes, así como entre despliegues con diferentes prioridades.

Requisitos previos

  • Ha creado un espacio de trabajo de Realtime Compute for Apache Flink. Para obtener más información, consulte Activate Realtime Compute for Apache Flink.

  • Ha activado Object Storage Service (OSS). Para obtener más información, consulte Console quick start. La clase de almacenamiento del bucket de OSS debe ser Standard. Para obtener más información, consulte Storage classes.

  • Este tutorial utiliza Apache Paimon para almacenar datos y requiere Ververica Runtime (VVR) 8.0.5 o posterior.

Escenario de ejemplo

Este tutorial utiliza una plataforma de comercio electrónico como ejemplo, donde los datos se almacenan en formato lakehouse de Apache Paimon. Simula una estructura de almacén de datos con múltiples capas: Operational Data Store (ODS), Data Warehouse Detail (DWD) y Data Warehouse Service (DWS). Utilizará las capacidades de procesamiento por lotes de Flink para procesar y limpiar datos antes de escribirlos en tablas Paimon, con el fin de construir una estructura de datos por capas.

image

Preparativos

  1. Cree un script.

    En la pestaña Scripts, puede crear un catálogo que contenga bases de datos y tablas, e insertar datos de muestra en dichas tablas.

  2. Cree un catálogo Paimon.

    1. En el editor de la pestaña Scripts, introduzca la siguiente sentencia SQL.

      CREATE CATALOG `my_catalog` WITH (
        'type' = 'paimon',
        'metastore' = 'filesystem',
        'warehouse' = '<warehouse>',
        'fs.oss.endpoint' = '<fs.oss.endpoint>',
        'fs.oss.accessKeyId' = '<fs.oss.accessKeyId>',
        'fs.oss.accessKeySecret' = '<fs.oss.accessKeySecret>'
      );

      La siguiente tabla describe los parámetros.

      Parámetro

      Descripción

      Obligatorio

      Observaciones

      type

      El tipo de catálogo.

      Sí

      Establezca el valor en paimon.

      metastore

      El tipo de metastore.

      Sí

      En este tutorial, establezca el valor en filesystem. Para obtener más información sobre otros tipos, consulte Manage Paimon Catalogs.

      warehouse

      El directorio del almacén de datos en Object Storage Service (OSS).

      Sí

      El formato es oss://<bucket>/<object>, donde:

      • bucket: El nombre de su bucket de OSS.

      • object: la ruta donde se almacenan sus datos.

      Puede encontrar el bucket y la ruta del objeto en la consola de OSS.

      fs.oss.endpoint

      El endpoint de Object Storage Service (OSS).

      No

      Obligatorio si el bucket de OSS especificado por warehouse se encuentra en una región diferente a la de su espacio de trabajo de Flink, o si pertenece a otra cuenta de Alibaba Cloud.

      Para obtener más información, consulte Regions and endpoints.

      fs.oss.accessKeyId

      El AccessKey ID de una cuenta de Alibaba Cloud o un usuario RAM que tenga permisos de lectura y escritura en el bucket de OSS.

      No

      Obligatorio si el bucket de OSS especificado por warehouse se encuentra en una región diferente a la de su espacio de trabajo de Flink, o si pertenece a otra cuenta de Alibaba Cloud. Para obtener información sobre cómo conseguir un par de AccessKey, consulte Create an AccessKey pair.

      fs.oss.accessKeySecret

      El AccessKey secret correspondiente al AccessKey ID.

      No

    2. Seleccione el código y haga clic en Run a la izquierda.

      El mensaje The following statement has been executed successfully! indica que el catálogo se creó correctamente. Ahora puede consultar el catálogo en la página Catalogs o en la pestaña Catalogs de la página SQL Editor.

Procedimiento

Paso 1: Crear tablas ODS e insertar datos de prueba

Nota

Para simplificar este tutorial, insertamos datos de prueba directamente en las tablas ODS para poblar las tablas DWD y DWS subsiguientes. En un entorno de producción, normalmente se usa el procesamiento de streaming de Flink para leer datos de fuentes externas y escribirlos en el lago de datos como capa ODS. Para obtener más información, consulte Get started with Paimon: Basic features.

  1. En el editor de la pestaña Scripts, introduzca las siguientes sentencias SQL y haga clic en Run a la izquierda.

    CREATE DATABASE `my_catalog`.`order_dw`;
    
    USE `my_catalog`.`order_dw`;
    
    CREATE TABLE orders (
      order_id BIGINT,
      user_id STRING,
      shop_id BIGINT,
      product_id BIGINT,
      buy_fee BIGINT,   
      create_time TIMESTAMP,
      update_time TIMESTAMP,
      state INT
    );
    
    CREATE TABLE orders_pay (
      pay_id BIGINT,
      order_id BIGINT,
      pay_platform INT, 
      create_time TIMESTAMP
    );
    
    CREATE TABLE product_catalog (
      product_id BIGINT,
      catalog_name STRING
    );
    
    -- Insert test data
    
    INSERT INTO orders VALUES
    (100001, 'user_001', 12345, 1, 5000, TO_TIMESTAMP('2023-02-15 16:40:56'), TO_TIMESTAMP('2023-02-15 18:42:56'), 1),
    (100002, 'user_002', 12346, 2, 4000, TO_TIMESTAMP('2023-02-15 15:40:56'), TO_TIMESTAMP('2023-02-15 18:42:56'), 1),
    (100003, 'user_003', 12347, 3, 3000, TO_TIMESTAMP('2023-02-15 14:40:56'), TO_TIMESTAMP('2023-02-15 18:42:56'), 1),
    (100004, 'user_001', 12347, 4, 2000, TO_TIMESTAMP('2023-02-15 13:40:56'), TO_TIMESTAMP('2023-02-15 18:42:56'), 1),
    (100005, 'user_002', 12348, 5, 1000, TO_TIMESTAMP('2023-02-15 12:40:56'), TO_TIMESTAMP('2023-02-15 18:42:56'), 1),
    (100006, 'user_001', 12348, 1, 1000, TO_TIMESTAMP('2023-02-15 11:40:56'), TO_TIMESTAMP('2023-02-15 18:42:56'), 1),
    (100007, 'user_003', 12347, 4, 2000, TO_TIMESTAMP('2023-02-15 10:40:56'), TO_TIMESTAMP('2023-02-15 18:42:56'), 1);
    
    INSERT INTO orders_pay VALUES
    (2001, 100001, 1, TO_TIMESTAMP('2023-02-15 17:40:56')),
    (2002, 100002, 1, TO_TIMESTAMP('2023-02-15 17:40:56')),
    (2003, 100003, 0, TO_TIMESTAMP('2023-02-15 17:40:56')),
    (2004, 100004, 0, TO_TIMESTAMP('2023-02-15 17:40:56')),
    (2005, 100005, 0, TO_TIMESTAMP('2023-02-15 18:40:56')),
    (2006, 100006, 0, TO_TIMESTAMP('2023-02-15 18:40:56')),
    (2007, 100007, 0, TO_TIMESTAMP('2023-02-15 18:40:56'));
    
    INSERT INTO product_catalog VALUES
      (1, 'phone_aaa'),
      (2, 'phone_bbb'),
      (3, 'phone_ccc'),
      (4, 'phone_ddd'),
      (5, 'phone_eee');
    Nota

    Las tablas creadas en este tutorial son tablas Paimon de solo anexión, las cuales no tienen claves primarias. Ofrecen un mejor rendimiento de escritura por lotes que las tablas con clave primaria, pero no admiten operaciones de actualización basadas en claves.

    El resultado de la ejecución contendrá varias subpestañas, y el mensaje The following statement has been executed successfully! indica que la sentencia DDL correspondiente se ejecutó correctamente.

    Las sentencias DML como INSERT devuelven un JobId, lo que indica que un trabajo de Flink se está ejecutando en la sesión de Flink. Haga clic en Flink UI a la izquierda de la pestaña Results para ver el estado de ejecución de estas sentencias SQL. Espere unos segundos a que finalicen.

  2. Explore los datos de la tabla ODS.

    En el editor de la pestaña Scripts, introduzca las siguientes sentencias SQL y haga clic en Run a la izquierda.

    SELECT count(*) as order_count FROM `my_catalog`.`order_dw`.`orders`;
    SELECT count(*) as pay_count FROM `my_catalog`.`order_dw`.`orders_pay`;
    SELECT * FROM `my_catalog`.`order_dw`.`product_catalog`;

    Estas sentencias SQL también se ejecutan en la sesión de Flink. Puede consultar los resultados en sus respectivas páginas de resultados.

    El valor order_count de la tabla orders es 7. El valor pay_count de la tabla orders_pay es 7. La tabla product_catalog contiene 5 registros con product_id del 1 al 5 y valores de catalog_name phone_aaa, phone_bbb, phone_ccc, phone_ddd y phone_eee, respectivamente.

Paso 2: Crear tablas DWD y DWS

En el editor de la pestaña Scripts, introduzca las siguientes sentencias SQL y haga clic en Run a la izquierda.

USE `my_catalog`.`order_dw`;

CREATE TABLE dwd_orders (
    order_id BIGINT,
    order_user_id STRING,
    order_shop_id BIGINT,
    order_product_id BIGINT,
    order_product_catalog_name STRING,
    order_fee BIGINT,
    order_create_time TIMESTAMP,
    order_update_time TIMESTAMP,
    order_state INT,
    pay_id BIGINT,
    pay_platform INT COMMENT 'platform 0: phone, 1: pc',
    pay_create_time TIMESTAMP
) WITH (
    'sink.parallelism' = '2'
);

CREATE TABLE dws_users (
    user_id STRING,
    ds STRING,
    total_fee BIGINT COMMENT 'Total amount paid on the current day'
) WITH (
    'sink.parallelism' = '2'
);

CREATE TABLE dws_shops (
    shop_id BIGINT,
    ds STRING,
    total_fee BIGINT COMMENT 'Total amount paid on the current day'
) WITH (
    'sink.parallelism' = '2'
);
Nota

Las tablas creadas aquí también son tablas Paimon de solo anexión. Cuando se utiliza una tabla Paimon como sink de Flink, este no infiere automáticamente el paralelismo. Debe establecer explícitamente el paralelismo para evitar posibles errores.

Paso 3: Crear y desplegar los despliegues DWD y DWS

  1. Cree y despliegue el despliegue DWD.

    1. Cree el despliegue de actualización de la tabla DWD.

      En la página Development > ETL, cree un blank batch draft llamado dwd_orders. Se recomienda seleccionar una versión de motor con la etiqueta recomendada. Use el dialecto Flink SQL predeterminado. Copie la siguiente sentencia SQL en el editor. Dado que la tabla DWD es una tabla Paimon de solo anexión, utilice una sentencia INSERT OVERWRITE para sobrescribir toda la tabla.

      INSERT OVERWRITE my_catalog.order_dw.dwd_orders
      SELECT 
          o.order_id,
          o.user_id,
          o.shop_id,
          o.product_id,
          c.catalog_name,
          o.buy_fee,
          o.create_time,
          o.update_time,
          o.state,
          p.pay_id,
          p.pay_platform,
          p.create_time
      FROM 
          my_catalog.order_dw.orders as o, 
          my_catalog.order_dw.product_catalog as c, 
          my_catalog.order_dw.orders_pay as p
      WHERE o.product_id = c.product_id AND o.order_id = p.order_id
    2. En la esquina superior derecha de la página, haga clic en Deploy y luego en OK para desplegar el despliegue dwd_orders.

  2. Cree y despliegue los despliegues DWS.

    1. Cree los despliegues de actualización de las tablas DWS.

      Siguiendo los mismos pasos que para creating the DWD table update deployment, cree dos borradores por lotes llamados dws_shops y dws_users. Copie las siguientes sentencias SQL en sus respectivos editores.

      INSERT OVERWRITE my_catalog.order_dw.dws_shops
      SELECT 
          order_shop_id,
          DATE_FORMAT(pay_create_time, 'yyyyMMdd') as ds,
          SUM(order_fee) as total_fee
      FROM my_catalog.order_dw.dwd_orders
      WHERE pay_id IS NOT NULL AND order_fee IS NOT NULL
      GROUP BY order_shop_id, DATE_FORMAT(pay_create_time, 'yyyyMMdd');
      INSERT OVERWRITE my_catalog.order_dw.dws_users
      SELECT 
          order_user_id,
          DATE_FORMAT(pay_create_time, 'yyyyMMdd') as ds,
          SUM(order_fee) as total_fee
      FROM my_catalog.order_dw.dwd_orders
      WHERE pay_id IS NOT NULL AND order_fee IS NOT NULL
      GROUP BY order_user_id, DATE_FORMAT(pay_create_time, 'yyyyMMdd');
    2. En la esquina superior derecha de la página, haga clic en Deploy y luego en OK para desplegar los despliegues dws_shops y dws_users.

Paso 4: Iniciar y consultar los despliegues DWD y DWS

  • Inicie el despliegue DWD y consulte sus datos.

    1. Vaya a la página O&M > Deployments. Seleccione BATCH en la lista desplegable. Busque el despliegue dwd_orders y haga clic en Start en la columna Actions.

      Aparecerá una instancia de trabajo con estado STARTING en la lista de instancias de trabajo por lotes.

      Cuando el estado de la instancia de trabajo cambie a FINISHED, el procesamiento de datos habrá finalizado.

    2. Explore los resultados de los datos.

      En el editor de la pestaña Scripts, introduzca la siguiente sentencia SQL y haga clic en Run a la izquierda para consultar los datos en la tabla DWD.

      SELECT * FROM `my_catalog`.`order_dw`.`dwd_orders`;

      El resultado se muestra en la siguiente figura.

      image

  • Inicie los despliegues DWS y consulte sus datos.

    1. En la página O&M > Deployments, seleccione BATCH en la lista desplegable. Busque los despliegues dws_shops y dws_users, y haga clic en Start en la columna Actions de cada uno.

    2. En el editor de la pestaña Scripts, introduzca las siguientes sentencias SQL y haga clic en Run a la izquierda para consultar los datos en las tablas DWS.

      SELECT * FROM `my_catalog`.`order_dw`.`dws_shops`;
      SELECT * FROM `my_catalog`.`order_dw`.`dws_users`;

      Los resultados se muestran en las siguientes figuras.

      image.png image.png

Paso 5: Construir un pipeline por lotes con orquestación de tareas

En este paso, orquestará los despliegues en un flujo de trabajo, lo que permite activarlos conjuntamente y ejecutarlos en secuencia.

  1. Cree un flujo de trabajo.

    1. En el panel de navegación izquierdo, elija O&M > Workflows y luego haga clic en Create Workflow.

    2. En el panel que aparece, introduzca wf_orders como nombre. Mantenga el tipo de programación predeterminado (Manual Scheduling), seleccione default-queue para la Resource Queue y luego haga clic en Create para abrir el editor de flujos de trabajo.

    3. Edite el flujo de trabajo.

      1. Haga clic en el nodo inicial, asígnele el nombre v_dwd_orders y seleccione el despliegue dwd_orders para dicho nodo.

      2. Haga clic en Add Task para crear un nodo llamado v_dws_shops. Seleccione el despliegue dws_shops para este nodo y configure v_dwd_orders como nodo ascendente.

      3. Haga clic nuevamente en Add Task para crear un nodo llamado v_dws_users. Seleccione el despliegue dws_users para este nodo y configure v_dwd_orders como nodo ascendente.

      4. En la esquina superior derecha, haga clic en Save y luego en OK.

  2. Active manualmente el flujo de trabajo.

    Nota

    También puede configurar el flujo de trabajo para que se ejecute según una programación periódica. En la página Workflows, haga clic en Edit Workflow a la derecha del flujo de trabajo y cambie el modo de programación a Periodic Scheduling. Para obtener más información, consulte Task orchestration (Public Preview).

    1. Antes de activar el flujo de trabajo, inserte nuevos datos en las tablas ODS para verificar los resultados de ejecución del flujo.

      En el editor de la pestaña Scripts, introduzca las siguientes sentencias SQL y haga clic en Run a la izquierda.

      USE `my_catalog`.`order_dw`;
      
      INSERT INTO orders VALUES
      (100008, 'user_001', 12346, 1, 10000, TO_TIMESTAMP('2023-02-15 17:40:56'), TO_TIMESTAMP('2023-02-15 18:42:56'), 1),
      (100009, 'user_002', 12347, 2, 20000, TO_TIMESTAMP('2023-02-15 18:40:56'), TO_TIMESTAMP('2023-02-15 18:42:56'), 1),
      (100010, 'user_003', 12348, 3, 30000, TO_TIMESTAMP('2023-02-15 19:40:56'), TO_TIMESTAMP('2023-02-15 18:42:56'), 1);
      
      INSERT INTO orders_pay VALUES
      (2008, 100008, 1, TO_TIMESTAMP('2023-02-15 20:40:56')),
      (2009, 100009, 1, TO_TIMESTAMP('2023-02-15 20:40:56')),
      (2010, 100010, 1, TO_TIMESTAMP('2023-02-15 20:40:56'));

      Haga clic en Flink UI a la izquierda de la pestaña Results para supervisar el estado del trabajo.

    2. En la página O&M > Workflows, busque el flujo de trabajo creado en el paso anterior, haga clic en Execute en la columna Actions y luego en OK para activar el flujo de trabajo.

      Haga clic en el nombre del flujo de trabajo para ir a la página Overview, donde puede consultar la lista de instancias del flujo de trabajo.

      Haga clic en el ID de la instancia del flujo de trabajo en ejecución para ir a su página de detalles de ejecución y observar el estado de cada nodo. Espere a que finalice todo el flujo de trabajo.

  3. Consulte los resultados de ejecución del flujo de trabajo.

    1. En el editor de la pestaña Scripts, introduzca las siguientes sentencias SQL y haga clic en Run a la izquierda.

      SELECT * FROM `my_catalog`.`order_dw`.`dws_shops`;
      SELECT * FROM `my_catalog`.`order_dw`.`dws_users`;
    2. Revise los resultados de ejecución del flujo de trabajo.

      Podrá observar que el flujo de trabajo ha procesado los nuevos datos de la capa ODS y los ha escrito en las tablas DWS.

      image.png image.png

Documentos relacionados