Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Atualizado em 2024-05-09 GMT+08:00

Guia de prática do GDS

  • Antes de instalar o GDS, certifique-se de que os parâmetros do sistema do servidor em que o GDS está implementado sejam consistentes com os do cluster de banco de dados.
  • Certifique-se de que a rede física funcione corretamente para comunicação entre GDS e GaussDB(DWS). Uma rede de 10GE é recomendada. A rede de 1GE não pode garantir uma comunicação suave entre GDS e GaussDB(DWS), porque não pode suportar a pressão de transmissão de dados de alta velocidade e é propensa a desconexão. Para maximizar a taxa de importação de um único arquivo, certifique-se de que uma rede de 10GE seja usada e que a taxa de I/O do grupo de discos de dados seja maior que o limite superior do recurso de processamento de núcleo único do GDS (cerca de 400 MB/s).
  • Planeje a implementação do serviço com antecedência. Recomenda-se que um ou dois GDSs sejam implantados em um RAID de um servidor de dados. Recomenda-se que a proporção entre a quantidade do GDS e a quantidade de DN esteja na faixa de 1:3 a 1:6. Não implemente muitos processos do GDS em um carregador. Implemente apenas um processo do GDS se uma NIC de 1GE for usada e não mais do que quatro processos do GDS se uma NIC de 10GE for usada.
  • Divida hierarquicamente os diretórios de dados para dados importados e exportados pelo GDS com antecedência. Não coloque muitos arquivos em um diretório de dados e exclua arquivos expirados em tempo hábil.
  • Planeje adequadamente o conjunto de caracteres do banco de dados de destino. É aconselhável usar UTF8 em vez dos caracteres SQL_ASCII que podem facilmente incorrer em codificação mista. Ao exportar dados usando o GDS, certifique-se de que o conjunto de caracteres da tabela estrangeira seja o mesmo do cliente. Ao importar dados, certifique-se de que o cliente e o conteúdo do arquivo de dados usam o mesmo método de codificação.
  • Se o conjunto de caracteres do banco de dados, cliente ou tabela estrangeira não puder ser alterado, execute o comando iconv para alterar manualmente o 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 obter detalhes sobre as práticas de importação do GDS, consulte Usar o GDS para importar dados.

  • O GDS suporta os formatos CSV, TEXT e FIXED. O formato padrão é TEXT. O formato binário não é suportado. No entanto, a função encode/decode pode ser usada para processar dados do tipo binário. Exemplo:

    Exporte uma tabela binária.
     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 uma tabela binária.

     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)
    
  • Não exporte repetidamente dados da mesma tabela estrangeira. Caso contrário, o arquivo exportado anteriormente será sobrescrito.

  • Se você não tiver certeza se o arquivo está no formato CSV padrão, é aconselhável definir o parâmetro quote para caracteres invisíveis, como 0x07, 0x08 ou 0x1b, para importar e exportar dados usando o GDS. Isso evita falhas de tarefa causadas por formato de arquivo incorreto.
    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;
    
  • O GDS suporta importação e exportação simultâneas. O parâmetro gds -t é usado para definir o tamanho do pool de threads e controlar o número máximo de threads de trabalho concorrentes. Mas não acelera uma única tarefa SQL. O valor padrão de gds -t é 8, e o limite superior é 200. Ao usar a função pipe para importar e exportar dados, verifique se o valor de -t é maior ou igual ao número de serviços simultâneos.

  • Se o delimitador de uma tabela estrangeira do GDS consistir em vários caracteres, não use os mesmos caracteres no formato TEXT, por exemplo ---.
  • O GDS importa um único arquivo por meio de várias tabelas em paralelo para melhorar o desempenho da importação de dados. (Apenas arquivos CSV e TXT podem ser importados.)
    -- Create a target table.
    CREATE TABLE pipegds_widetb_1 (city integer, tel_num varchar(16), card_code  varchar(15), phone_code vcreate table pipegds_widetb_3 (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 obter detalhes sobre file_sequence, consulte CREATE FOREIGN TABLE (para importação e exportação do GDS).