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/ Uso de GDS para importar datos de una tabla de un servidor remoto a un clúster de DWS
Actualización más reciente 2026-09-29 GMT+08:00

Uso de GDS para importar datos de una tabla de un servidor remoto a un clúster de DWS

Descripción

Este tutorial muestra cómo usar GDS para importar datos de un servidor remoto a DWS. DWS le permite importar datos en formato TXT, CSV o FIXED.

GDS es una herramienta de línea de comandos que se ejecuta en servidores Linux. Coopera con el mecanismo de tabla externa para importar y exportar datos de manera eficiente. El paquete de herramientas GDS debe instalarse en el servidor donde se encuentra el archivo de origen de datos. Este servidor se denomina servidor de datos o servidor GDS.

Se utiliza solo para demostración en el entorno de prueba. En los escenarios reales de importación de servicios, debe considerar la red entre el servidor GDS y el clúster de DWS, así como las configuraciones del servidor GDS. Para obtener más información, consulte Más información: Prácticas para importar datos mediante GDS.

En este tutorial, aprenderá a:

  • Generar los archivos de datos de origen en formato CSV para utilizarlos en este tutorial.
  • Cargar los archivos de datos de origen en un servidor de datos.
  • Crear una tabla externa para interconectar GDS con DWS e importar datos de un servidor de datos a un DWS.
  • Iniciar DWS, crear una tabla e importar datos a la tabla.
  • Analizar los errores de importación en función de la información de la tabla de errores y corregirlos.

Preparar un ECS como servidor GDS

Para obtener detalles sobre cómo comprar un ECS de Linux, consulte Compra de un ECS en modo Config personalizado en los Pasos iniciales de Elastic Cloud Server. Después de la compra, inicie sesión en el ECS consultando Inicio de sesión en un ECS de Linux.

  • El ECS se configura con las siguientes especificaciones mínimas:
    • Entorno de producción: Red: >= 10GE; CPU: 16; Memoria: 64 GB; Almacenamiento: bajo demanda (recomendado: >= 500 GB)
    • Entorno de prueba: Red: >= 10GE; CPU: 8; Memoria: 32 GB; Almacenamiento: bajo demanda (recomendado: >= 500 GB)
  • El sistema operativo del ECS debe ser compatible con el paquete GDS.
  • El ECS y el DWS están en la misma región, VPC y subred.
  • La regla del grupo de seguridad del ECS debe permitir el acceso al clúster de DWS, es decir, la regla de entrada del grupo de seguridad es la siguiente:
    • Protocol: TCP
    • Port: 5000
    • Source: Seleccione IP Address e ingrese la dirección IP del clúster de DWS, por ejemplo, 192.168.0.10/32.
  • Si el firewall está habilitado en el ECS, asegúrese de que el puerto de escucha de GDS esté habilitado en el firewall:
    1
    iptables  -I INPUT -p tcp -m tcp --dport <gds_port> -j ACCEPT
    

Descarga del paquete GDS

  1. Inicie sesión en la consola de DWS.
  2. En el árbol de navegación de la izquierda, seleccione Management > Client Connections.
  3. Seleccione el cliente GDS de la versión correspondiente en la lista desplegable de CLI Client.

    Seleccione una versión basada en la versión del clúster y el sistema operativo donde se instala el cliente.

  4. Haga clic en Download.

Preparación de archivos de datos de origen

  • Archivo de datos product_info0.csv
    1
    2
    3
    4
    5
    100,XHDK-A,2017-09-01,A,2017 Shirt Women,red,M,328,2017-09-04,715,good!
    205,KDKE-B,2017-09-01,A,2017 T-shirt Women,pink,L,584,2017-09-05,40,very good!
    300,JODL-X,2017-09-01,A,2017 T-shirt men,red,XL,15,2017-09-03,502,Bad.
    310,QQPX-R,2017-09-02,B,2017 jacket women,red,L,411,2017-09-05,436,It's nice.
    150,ABEF-C,2017-09-03,B,2017 Jeans Women,blue,M,123,2017-09-06,120,good.
    
  • Archivo de datos product_info1.csv
    1
    2
    3
    4
    5
    200,BCQP-E,2017-09-04,B,2017 casual pants men,black,L,997,2017-09-10,301,good quality.
    250,EABE-D,2017-09-10,A,2017 dress women,black,S,841,2017-09-15,299,This dress fits well.
    108,CDXK-F,2017-09-11,A,2017 dress women,red,M,85,2017-09-14,22,It's really amazing to buy.
    450,MMCE-H,2017-09-11,A,2017 jacket women,white,M,114,2017-09-14,22,very good.
    260,OCDA-G,2017-09-12,B,2017 woolen coat women,red,L,2004,2017-09-15,826,Very comfortable.
    
  • Archivo de datos product_info2.csv
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    980,"ZKDS-J",2017-09-13,"B","2017 Women's Cotton Clothing","red","M",112,,,
    98,"FKQB-I",2017-09-15,"B","2017 new shoes men","red","M",4345,2017-09-18,5473
    50,"DMQY-K",2017-09-21,"A","2017 pants men","red","37",28,2017-09-25,58,"good","good","good"
    80,"GKLW-l",2017-09-22,"A","2017 Jeans Men","red","39",58,2017-09-25,72,"Very comfortable."
    30,"HWEC-L",2017-09-23,"A","2017 shoes women","red","M",403,2017-09-26,607,"good!"
    40,"IQPD-M",2017-09-24,"B","2017 new pants Women","red","M",35,2017-09-27,52,"very good."
    50,"LPEC-N",2017-09-25,"B","2017 dress Women","red","M",29,2017-09-28,47,"not good at all."
    60,"NQAB-O",2017-09-26,"B","2017 jacket women","red","S",69,2017-09-29,70,"It's beautiful."
    70,"HWNB-P",2017-09-27,"B","2017 jacket women","red","L",30,2017-09-30,55,"I like it so much"
    80,"JKHU-Q",2017-09-29,"C","2017 T-shirt","red","M",90,2017-10-02,82,"very good."
    
  1. Cree un archivo de texto, ábralo con una herramienta de edición local (por ejemplo, Visual Studio Code) y copie los datos de ejemplo en el archivo de texto.
  2. Seleccione Format > Encode in UTF-8 without BOM.
  3. Seleccione File > Save as.
  4. En el cuadro de diálogo que aparece en la pantalla, ingrese el nombre del archivo, configure la extensión del nombre del archivo como .csv y haga clic en Save.
  5. Inicie sesión en el servidor GDS como usuario root.
  6. Cree el directorio /input_data para almacenar el archivo de datos.

    1
    mkdir -p /input_data
    

  7. Utilice MobaXterm para cargar los archivos de datos de origen en el directorio creado.

Instalación e inicio de GDS

  1. Inicie sesión en el servidor GDS como usuario root y cree el directorio /opt/bin/dws para almacenar el paquete GDS.

    1
    mkdir -p /opt/bin/dws
    

  2. Cargue el paquete GDS en el directorio creado.

    Por ejemplo, cargue el paquete dws_client_8.1.x_redhat_x64.zip en el directorio creado.

  3. Vaya al directorio y descomprima el paquete.

    1
    2
    cd /opt/bin/dws
    unzip dws_client_8.1.x_redhat_x64.zip
    

  4. Cree un usuario (gds_user) y el grupo de usuarios (gdsgrp) al que pertenece el usuario. Este usuario se utiliza para iniciar GDS y debe tener el permiso para leer el directorio de archivos de datos de origen.

    1
    2
    groupadd gdsgrp
    useradd -g gdsgrp gds_user
    

  5. Cambie el propietario del paquete GDS y el directorio de archivos de datos de origen a gds_user y cambie el grupo de usuarios a gdsgrp.

    1
    2
    chown -R gds_user:gdsgrp /opt/bin/dws/gds
    chown -R gds_user:gdsgrp /input_data
    

  6. Cambie al usuario gds_user.

    1
    su - gds_user
    

    Si la versión actual del clúster es 8.0.x o anterior, omita 7 y vaya a 8.

    Si la versión actual del clúster es 8.1.x o posterior, vaya al paso siguiente.

  7. Ejecute el script del que depende el entorno (aplicable solo a 8.1.x).

    1
    2
    cd /opt/bin/dws/gds/bin
    source gds_env
    

  8. Inicie GDS.

    1
    /opt/bin/dws/gds/bin/gds -d /input_data/ -p 192.168.0.90:5000 -H 10.10.0.1/24 -l /opt/bin/dws/gds/gds_log.txt -D
    

    Reemplace las partes en cursiva según sea necesario.

    • -d dir: directorio para almacenar archivos de datos que contienen datos que se van a importar. Esta práctica utiliza /input_data/ como ejemplo.
    • -p ip:port: dirección IP y puerto de escucha para GDS. El valor predeterminado es 127.0.0.1. Reemplácelo con la dirección IP de una red de 10GE que pueda comunicarse con DWS. El número de puerto oscila entre 1024 y 65535. El valor predeterminado es 8098. Esta práctica utiliza 192.168.0.90:5000 como ejemplo.
    • -H address_string: hosts que tienen permiso para conectarse a GDS y utilizarlo. El valor debe estar en formato CIDR. Establezca este parámetro para permitir que un clúster de DWS acceda a GDS para la importación de datos. Asegúrese de que el segmento de red cubra todos los hosts de un clúster de DWS.
    • -l log_file: directorio de registros de GDS y nombre del archivo de registro. Esta práctica utiliza /opt/bin/dws/gds/gds_log.txt como ejemplo.
    • -D: GDS en modo demonio. Este parámetro se utiliza solo en Linux.

Creación de una tabla foránea

  1. Utilice un cliente SQL para conectarse a la base de datos de DWS.
  2. Cree la siguiente tabla externa:

    LOCATION: Reemplácelo con la dirección y el número de puerto reales de GDS.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    DROP FOREIGN TABLE IF EXISTS product_info_ext;
    CREATE FOREIGN TABLE product_info_ext
    (
        product_price                integer        not null,
        product_id                   char(30)       not null,
        product_time                 date           ,
        product_level                char(10)       ,
        product_name                 varchar(200)   ,
        product_type1                varchar(20)    ,
        product_type2                char(10)       ,
        product_monthly_sales_cnt    integer        ,
        product_comment_time         date           ,
        product_comment_num          integer        ,
        product_comment_content      varchar(200)              
    ) 
    SERVER gsmpp_server 
    OPTIONS(
    LOCATION 'gsfs://192.168.0.90:5000/*',
    FORMAT 'CSV' ,
    DELIMITER ',',
    ENCODING 'utf8',
    HEADER 'false',
    FILL_MISSING_FIELDS 'true',
    IGNORE_EXTRA_DATA 'true'
    )
    READ ONLY
    LOG INTO product_info_err 
    PER NODE REJECT LIMIT 'unlimited';
    

    Si se muestra la siguiente información, se ha creado la tabla externa:

    1
    CREATE FOREIGN TABLE
    

Importación de datos

  1. Ejecute las siguientes sentencias para crear la tabla product_info en DWS para almacenar los datos importados:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    DROP TABLE IF EXISTS product_info;
    CREATE TABLE product_info
    (
        product_price                integer        not null,
        product_id                   char(30)       not null,
        product_time                 date           ,
        product_level                char(10)       ,
        product_name                 varchar(200)   ,
        product_type1                varchar(20)    ,
        product_type2                char(10)       ,
        product_monthly_sales_cnt    integer        ,
        product_comment_time         date           ,
        product_comment_num          integer        ,
        product_comment_content      varchar(200)                   
    ) 
    WITH (
    orientation = column,
    compression=middle
    ) 
    DISTRIBUTE BY hash (product_id);
    

  2. Importe datos de los archivos de datos de origen a la tabla product_info a través de la tabla externa product_info_ext.

    1
    INSERT INTO product_info SELECT * FROM product_info_ext ;
    
    Si se muestra la siguiente información, los datos se importaron correctamente:
    1
    INSERT 0 20
    

  3. Ejecute la sentencia SELECT para ver los datos importados a DWS.

    1
    SELECT count(*) FROM product_info;
    

    Si se muestra la siguiente información, los datos se importaron correctamente:

    1
    2
    3
    4
    count 
    -------
         20
    (1 row)
    

  1. Ejecute VACUUM FULL en la tabla product_info.

    1
    VACUUM FULL product_info
    

  2. Actualice las estadísticas de la tabla product_info.

    1
    ANALYZE product_info;
    

Detención de GDS

  1. Inicie sesión en el servidor de datos donde se instaló GDS como usuario gds_user.
  2. Realice las siguientes operaciones para detener GDS:

    1. Consulte el ID del proceso de GDS. El ID del proceso de GDS es 128954.
      ps -ef|grep gds
      gds_user 128954      1  0 15:03 ?        00:00:00 gds -d /input_data/ -p 192.168.0.90:5000 -l /opt/bin/gds/gds_log.txt  -D
      gds_user 129003 118723  0 15:04 pts/0    00:00:00 grep gds
    2. Ejecute el comando kill para detener GDS. 128954 indica el ID del proceso de GDS.
      kill -9 128954

Eliminación de recursos

  1. Ejecute el siguiente comando para eliminar la tabla de destino product_info:

    1
    DROP TABLE product_info;
    

    Si se muestra la siguiente información, la tabla se ha eliminado:

    1
    DROP TABLE
    

  2. Ejecute el siguiente comando para eliminar la tabla externa product_info_ext:

    1
    DROP FOREIGN TABLE product_info_ext;
    

    Si se muestra la siguiente información, la tabla se ha eliminado:

    1
    DROP FOREIGN TABLE
    

Más información: Prácticas para importar datos mediante GDS

  • Antes de instalar GDS, asegúrese de que los parámetros del sistema del servidor donde se despliega GDS coincidan con los del clúster de bases de datos.
  • Si GDS se despliega en un ECS, asegúrese de que el ECS cumpla con las siguientes especificaciones mínimas:
    • Entorno de producción: Red: >= 10GE; CPU: 16; Memoria: 64 GB; Almacenamiento: bajo demanda (recomendado: >= 500 GB)
    • Entorno de prueba: Red: >= 10GE; CPU: 8; Memoria: 32 GB; Almacenamiento: bajo demanda (recomendado: >= 500 GB)
  • Para una comunicación adecuada entre GDS y DWS, se recomienda utilizar redes de 10GE. La red de 1GE no puede garantizar una comunicación fluida entre GDS y DWS, ya que no puede soportar la presión de transmisión de datos de alta velocidad y es propensa a la desconexión. Para maximizar la velocidad de importación de un solo archivo, asegúrese de que se utilice una red de 10GE y que la velocidad de E/S del grupo de discos de datos sea superior al límite superior de la capacidad de procesamiento de un solo núcleo de GDS (aproximadamente 400 MB/s).
  • Despliegue el servicio con anticipación. Se recomienda desplegar uno o dos GDS en un RAID de un servidor de datos. Se recomienda que la relación entre la cantidad de GDS y la cantidad de DN esté en el rango de 1:3 a 1:6. No despliegue demasiados procesos de GDS en un cargador. Despliegue solo un proceso de GDS si se utiliza una NIC de 1GE y no más de cuatro procesos de GDS si se utiliza una NIC de 10GE.
  • Divida jerárquicamente los directorios de datos para los datos importados y exportados por GDS con anticipación. No coloque demasiados archivos en un directorio de datos y elimine los archivos caducados de manera oportuna.
  • Planifique correctamente el conjunto de caracteres de la base de datos de destino. Se recomienda utilizar UTF-8 en lugar de los caracteres SQL_ASCII, que pueden incurrir fácilmente en codificación mixta. Al exportar datos mediante GDS, asegúrese de que el conjunto de caracteres de la tabla externa sea el mismo que el del cliente. Al importar datos, asegúrese de que el cliente y el contenido del archivo de datos utilicen el mismo método de codificación.
  • Si el conjunto de caracteres de la base de datos, el cliente o la tabla externa no se puede cambiar, ejecute el comando iconv para cambiar manualmente el conjunto de caracteres.
    1
    2
    #Note: -f indicates the character set of the source file, and -t indicates the target character set.
    iconv -f utf8 -t gbk utf8.txt -o gbk.txt
    
  • Para obtener más información sobre las prácticas de importación de GDS, consulte Uso de GDS para importar datos.

  • GDS admite los formatos CSV, TEXT y FIXED. El formato predeterminado es TEXT. No se admite el formato binario. Sin embargo, la función de codificación o decodificación se puede utilizar para procesar datos de tipo binario. A continuación se muestra un ejemplo.

    Exporte una tabla binaria.
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    -- Create a table.
    CREATE TABLE blob_type_t1 
    (
        BT_COL BYTEA
    ) DISTRIBUTE BY REPLICATION;
    -- Create a foreign table.
    CREATE FOREIGN TABLE f_blob_type_t1( BT_COL  text ) SERVER gsmpp_server OPTIONS (LOCATION 'gsfs://127.0.0.1:7789/', FORMAT 'text', DELIMITER E'\x08',  NULL '', EOL '0x0a' ) WRITE ONLY;
    INSERT INTO blob_type_t1 VALUES(E'\\xDEADBEEF');
    INSERT INTO blob_type_t1 VALUES(E'\\xDEADBEEF');
    INSERT INTO blob_type_t1 VALUES(E'\\xDEADBEEF');
    INSERT INTO blob_type_t1 VALUES(E'\\xDEADBEEF');
    INSERT INTO f_blob_type_t1 select encode(BT_COL,'base64') from blob_type_t1;
    

    Importe una tabla binaria.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    -- Create a table.
    CREATE TABLE blob_type_t2 
    (
        BT_COL BYTEA
    ) DISTRIBUTE BY REPLICATION;
    -- Create a foreign table.
    CREATE FOREIGN TABLE f_blob_type_t2( BT_COL  text ) SERVER gsmpp_server OPTIONS (LOCATION 'gsfs://127.0.0.1:7789/f_blob_type_t1.dat.0', FORMAT 'text', DELIMITER E'\x08',  NULL '', EOL '0x0a' );
    insert into  blob_type_t2 select decode(BT_COL,'base64') from f_blob_type_t2;
    SELECT * FROM blob_type_t2;
       bt_col
    ------------
     \xdeadbeef
     \xdeadbeef
     \xdeadbeef
     \xdeadbeef
    (4 rows)
    
  • No exporte repetidamente datos de la misma tabla externa. De lo contrario, el archivo exportado previamente se sobrescribirá.

  • Si no está seguro de que el archivo esté en formato CSV estándar, se recomienda establecer quote en caracteres invisibles como 0x07, 0x08 o 0x1b para importar y exportar datos mediante GDS. Esto evita fallas de tareas causadas por un formato de archivo incorrecto.
    1
    2
    3
    4
    5
    CREATE FOREIGN TABLE foreign_HR_staffS_ft1
    (
      MANAGER_ID     NUMBER(6),
      section_ID     NUMBER(4)
    ) SERVER gsmpp_server OPTIONS (location 'file:///input_data/*', format 'csv', mode 'private', quote '0x07', delimiter ',') WITH err_HR_staffS_ft1;
    
  • GDS admite la importación y exportación simultáneas. El parámetro gds -t se utiliza para establecer el tamaño del grupo de subprocesos y controlar la cantidad máxima de subprocesos de trabajo simultáneos. Pero no acelera una sola tarea SQL. El valor predeterminado de gds -t es 8 y el límite superior es 200. Cuando utilice la función de tubería (pipe) para importar y exportar datos, asegúrese de que el valor de -t sea mayor o igual que la cantidad de servicios simultáneos.

  • Si el delimitador de una tabla externa de GDS consta de varios caracteres, no utilice los mismos caracteres en el formato TEXT, por ejemplo ---.
  • GDS importa un solo archivo a través de varias tablas en paralelo para mejorar el rendimiento de la importación de datos. (Solo se pueden importar archivos CSV y TEXT).
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    -- Create a target table.
    
    CREATE TABLE pipegds_widetb_1 (city integer, tel_num varchar(16), card_code varchar(15), phone_code varchar(16), region_code varchar(6), station_id varchar(10), tmsi varchar(20), rec_date integer(6), rec_time integer(6), rec_type numeric(2), switch_id  varchar(15), attach_city varchar(6), opc varchar(20), dpc varchar(20));
    
    -- Create a foreign table that contains the file_sequence column.
    CREATE FOREIGN TABLE gds_pip_csv_r_1( like pipegds_widetb_1) SERVER gsmpp_server  OPTIONS (LOCATION 'gsfs://127.0.0.1:8781/wide_tb.txt', FORMAT 'text', DELIMITER E'|+|', NULL '', file_sequence '5-1');  
    
    CREATE FOREIGN TABLE gds_pip_csv_r_2( like pipegds_widetb_1) SERVER gsmpp_server  OPTIONS (LOCATION 'gsfs://127.0.0.1:8781/wide_tb.txt', FORMAT 'text', DELIMITER E'|+|', NULL '', file_sequence '5-2');
    
    CREATE FOREIGN TABLE gds_pip_csv_r_3( like pipegds_widetb_1) SERVER gsmpp_server  OPTIONS (LOCATION 'gsfs://127.0.0.1:8781/wide_tb.txt', FORMAT 'text', DELIMITER E'|+|', NULL '', file_sequence '5-3'); 
    
    CREATE FOREIGN TABLE gds_pip_csv_r_4( like pipegds_widetb_1) SERVER gsmpp_server  OPTIONS (LOCATION 'gsfs://127.0.0.1:8781/wide_tb.txt', FORMAT 'text', DELIMITER E'|+|', NULL '', file_sequence '5-4');  
    CREATE FOREIGN TABLE gds_pip_csv_r_5( like pipegds_widetb_1) SERVER gsmpp_server  OPTIONS (LOCATION 'gsfs://127.0.0.1:8781/wide_tb.txt', FORMAT 'text', DELIMITER E'|+|', NULL '', file_sequence '5-5');
    
    -- Import the wide_tb.txt file to the pipegds_widetb_1 table in parallel.
    \parallel on
    INSERT INTO pipegds_widetb_1 SELECT * FROM gds_pip_csv_r_1;
    INSERT INTO pipegds_widetb_1 SELECT * FROM gds_pip_csv_r_2;
    INSERT INTO pipegds_widetb_1 SELECT * FROM gds_pip_csv_r_3;
    INSERT INTO pipegds_widetb_1 SELECT * FROM gds_pip_csv_r_4;
    INSERT INTO pipegds_widetb_1 SELECT * FROM gds_pip_csv_r_5;
    \parallel off
    

    Para obtener más información sobre el parámetro file_sequence, consulte CREATE FOREIGN TABLE (para la importación y exportación de GDS).