Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Centro de ayuda/ Data Warehouse Service/ Prácticas recomendadas / Importación y exportación/ Transferencia de datos entre buckets de OBS y clústeres de DWS
Actualización más reciente 2026-09-29 GMT+08:00

Transferencia de datos entre buckets de OBS y clústeres de DWS

Esta guía muestra cómo cargar datos de ejemplo en OBS y acceder a ellos a través de una tabla foránea de OBS. Puede importar datos de OBS a DWS o exportar datos de DWS a OBS.

  • Los datos se pueden importar a OBS en formatos TXT, CSV, ORC, PARQUET, CARBONDATA o JSON.
  • Los datos se pueden exportar de OBS en los siguientes formatos:

OBS es un servicio de almacenamiento basado en objetos que ofrece almacenamiento de datos seguro, confiable y rentable para diversos usuarios, sitios web, empresas y desarrolladores. Puede utilizar la consola de OBS o el navegador de OBS para acceder y gestionar los datos almacenados en OBS desde cualquier computadora conectada a Internet. Para obtener más información, consulte Documentación de Object Storage Service.

Esta práctica toma aproximadamente 1 hora. El procedimiento básico es el siguiente:

Preparativos

  • Cree un clúster de DWS. Para obtener más información, consulte Creación de un clúster de DWS dedicado
  • Cree un bucket de OBS en la misma región que DWS. Puede nombrar el bucket obs-demo01. Si 01 está ocupado, utilice obs-demo02. Siga este patrón. Para obtener más información, consulte la documentación de Object Storage Service.
  • Obtenga la AK y la SK de la cuenta para acceder a los datos en el bucket de OBS. Para obtener más información, consulte Claves de acceso

Paso 1: Preparar datos de OBS

  1. Descargue el archivo de muestra de datos.
  2. Inicie sesión en la consola de OBS y haga clic en el bucket obs-demo01 en la lista de buckets.
  3. Seleccione Objects a la izquierda, haga clic en Create Folder y nombre la carpeta obs-dws.
  4. Vaya a la carpeta obs-dws, haga clic en Upload Object y cargue el archivo de muestra descargado en 1 en la carpeta obs-dws.
  5. Obtenga el punto de conexión de OBS.

    1. Vuelva a la página obs-dws y haga clic en Overview a la izquierda.
    2. Registre el punto de conexión de la lista Domain Name Details, por ejemplo, obs.ap-southeast-1.myhuaweicloud.com.

Paso 2: Crear un servidor foráneo y una tabla foránea de OBS

Un servidor foráneo es un enlace virtual que ayuda a organizar y controlar fuentes de datos externas, como bases de datos y sistemas de archivos, en un sistema de bases de datos o almacén de datos. Permite el acceso unificado a diversos datos distribuidos y desempeña un papel clave en la integración de datos, el análisis en tiempo real y la virtualización de datos.

Para acceder a los datos de bucket de OBS a través de un servidor foráneo, configure un servidor foráneo de OBS y proporcione el punto de conexión, la clave de acceso (AK) y la clave secreta (SK) para OBS.

  1. Ejecute la siguiente sentencia SQL para crear un servidor foráneo después de conectarse a la base de datos.

    Establezca ADDRESS en la dirección obtenida en 5 y establezca ACCESS_KEY y SECRET_ACCESS_KEY en la AK y SK obtenidas en Preparativos.
    1
    2
    3
    4
    5
    6
    7
    CREATE SERVER obs_server FOREIGN DATA WRAPPER DFS_FDW 
    OPTIONS ( 
      ADDRESS 'obs.aaaaa.bbbbb.com', 
      ACCESS_KEY 'xxxxxxxxx', 
      SECRET_ACCESS_KEY 'yyyyyyyyyyyyy', 
      TYPE 'OBS'
      );
    

  2. Ejecute la siguiente sentencia SQL para crear un esquema denominado dws_data:

    1
    CREATE SCHEMA dws_data;
    

  3. Cambie al esquema recién creado y cree una tabla foránea.

    Reemplace '/obs-demo01/obs-dws/' con su ruta de OBS real donde se almacenan los archivos de datos. Asegúrese de que el bucket de OBS y el clúster de DWS estén en la misma región. En este ejemplo, la ruta de OBS es la carpeta obs-dws en el bucket obs-demo01.

    SERVER obs_server indica el nombre del servidor foráneo creado en 1, por ejemplo, obs_server.
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    CREATE FOREIGN TABLE dws_data.obs_pq_order
    ( order_id    VARCHAR(14)   PRIMARY KEY    NOT ENFORCED,
    order_channel  VARCHAR(32),
    order_time  TIMESTAMP,
    cust_code    VARCHAR(6),
    pay_amount    DOUBLE  PRECISION,
    real_pay    DOUBLE  PRECISION )
    SERVER obs_server 
    OPTIONS (
    foldername '/obs-demo01/obs-dws/',
    format 'parquet',
    encoding 'utf8' )
    READ ONLY
    DISTRIBUTE BY roundrobin;
    

Paso 3: Acceder e importar datos de bucket de OBS a un clúster de DWS

  1. Utilice la tabla foránea creada en los pasos anteriores para acceder directamente a los datos del bucket de OBS.

    1
    SELECT * FROM dws_data.obs_pq_order;
    

  2. Ejecute la sentencia SELECT con condiciones a través de una tabla foránea.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT COUNT(*) FROM dws_data.obs_pq_order;
    
    SELECT order_id, order_channel, order_time, cust_code FROM dws_data.obs_pq_order;
    
    SELECT TO_CHAR(order_time, 'Month, YYYY') AS order_month, cust_code, COUNT(*) AS order_cnt
    FROM dws_data.obs_pq_order
    WHERE DATE_PART('Year', order_time) = 2023
    GROUP BY TO_CHAR(order_time, 'Month, YYYY'), cust_code
    HAVING COUNT(*) >= 10;
    

  3. Cree una tabla local para importar datos a un clúster de DWS a través de una tabla foránea de OBS.

    1
    2
    3
    4
    5
    6
    CREATE TABLE dws_data.dws_monthly_order
    ( order_month   CHAR(8),
    cust_code   VARCHAR(6),
    order_count   INT,
    total_pay_amount    DOUBLE PRECISION,
    total_real_pay     DOUBLE PRECISION );
    

  4. Utilice los datos de la tabla foránea de OBS para calcular los detalles de los pedidos mensuales de 2023 e importe el resultado a la tabla local del clúster de DWS.

    1
    2
    3
    4
    5
    6
    7
    8
    INSERT INTO dws_data.dws_monthly_order
    ( order_month, cust_code, order_count
    , total_pay_amount, total_real_pay )
    SELECT TO_CHAR(order_time, 'MON-YYYY'), cust_code, COUNT(*)
    , SUM(pay_amount), SUM(real_pay)
    FROM dws_data.obs_pq_order
    WHERE DATE_PART('Year', order_time) = 2023
    GROUP BY TO_CHAR(order_time, 'MON-YYYY'), cust_code;
    

  5. Verifique el estado de importación de los datos de la tabla.

    1
    SELECT * FROM dws_data.dws_monthly_order;
    

Paso 4: Exportar datos de una tabla de DWS a un bucket de OBS

  1. Cree una tabla local.

    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE dws_data.dws_order
    ( order_id    VARCHAR(14)    PRIMARY KEY,
    order_channel VARCHAR(32),
    order_time    TIMESTAMP,
    cust_code    VARCHAR(6),
    pay_amount    DOUBLE PRECISION,
    real_pay      DOUBLE PRECISION );
    

  2. Inserte tres registros de datos.

    1
    2
    3
    4
    INSERT INTO dws_data.dws_order 
    VALUES ('20230627000001', 'webShop', TIMESTAMP '2023-06-27 10:00:00', 'CUST1', 1000, 1000)
    , ('20230627000002', 'webShop', TIMESTAMP '2023-06-27 11:00:00', 'CUST2', 5000, 5000)
    , ('20240309000003', 'webShop', TIMESTAMP '2024-03-09 13:00:00', 'CUST1', 2000, 2000);
    

  3. Cree una tabla foránea para exportar datos a un bucket de OBS.

    Reemplace '/obs-demo01/obs-dws/' con su bucket de OBS ruta real.
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    CREATE FOREIGN TABLE dws_data.obs_orc_order
    ( order_id    VARCHAR(14)   PRIMARY KEY   NOT ENFORCED,
    order_channel VARCHAR(32),
    order_time    TIMESTAMP,
    cust_code    VARCHAR(6),
    pay_amount   DOUBLE PRECISION,
    real_pay    DOUBLE PRECISION )
    SERVER obs_server 
    OPTIONS (
    foldername '/obs-demo01/obs-dws/',
    format 'ORC',
    encoding 'utf8' )
    READ WRITE
    DISTRIBUTE BY roundrobin;
    

  4. Escriba los datos de la tabla local en la tabla foránea de OBS.

    1
    2
    3
    INSERT INTO dws_data.obs_orc_order ( order_id, order_channel, order_time, cust_code, pay_amount, real_pay )
    SELECT order_id, order_channel, order_time, cust_code, pay_amount, real_pay
      FROM dws_data.dws_order;
    

  5. Consulte si la importación de datos se realizó correctamente.

    1
    SELECT * FROM dws_data.obs_orc_order;
    

  6. Inicie sesión en la consola de OBS para verificar si hay archivos de datos en el bucket de OBS.
  7. Verifique si se pueden insertar datos adicionales en la misma tabla foránea.

    1
    2
    3
    INSERT INTO dws_data.obs_orc_order ( order_id, order_channel, order_time, cust_code, pay_amount, real_pay )
    SELECT order_id, order_channel, order_time, cust_code, pay_amount, real_pay
      FROM dws_data.dws_order;
    

    Aparece el error "the file ruta specified in the foreign table is not empty". Si elimina el archivo de datos en la ruta de archivos de OBS, puede insertar datos nuevamente.

  8. Verifique si los datos de la tabla foránea se pueden actualizar y eliminar.

    1
    2
    UPDATE dws_data.obs_orc_order  SET pay_amount = 3000, real_pay = 3000 WHERE order_id   = '20240309000003';
    DELETE FROM dws_data.obs_orc_order WHERE order_id = '20240309000003';
    

    Según la salida del comando, los datos de la tabla foránea no se pueden actualizar ni eliminar.