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).