准备工作
在使用GDS导入数据前,请先完成准备弹性云服务器作为GDS服务器、下载GDS工具包和SSL证书。
使用GDS导入数据
数据存储在多个服务器上时,需要在每个数据服务器上安装配置、启动GDS后,各服务器上的数据可以并行入库。GDS在各台数据服务器上的安装配置和启动方法相同,这里以一台服务器为例进行说明。
步骤1:准备源数据
1.以root用户登录用于存放数据源文件的服务器(又称数据服务器或GDS服务器),创建数据文件存放目录“/input_data”。以IP为192.168.0.90的数据服务器为例。
mkdir -p /input_data
2.使用MobaXterm将数据源文件上传至“/input_data”中。
步骤2:安装配置和启动GDS
-
以root用户登录数据服务器192.168.0.90,创建存放GDS工具包的目录/opt/bin/dws。
mkdir -p /opt/bin/dws
-
将GDS工具包上传至上一步所创建的目录中。以上传SUSE Linux版本的工具包为例 ,将GDS工具包“dws_client_redhat_x64.tar.gz”上传至“/opt/bin/dws”中。
-
在工具包所在目录下,解压工具包。
cd /opt/bin/dws/gds
tar -zxvf dws_client_redhat_x64.tar.gz
-
(可选)如果使用SSL加密传输数据,请一并将SSL证书上传/opt/bin/dws目录中。
-
创建用户gds_user及其所属的用户组gdsgrp。此用户用于启动GDS,且需要拥有读取数据源文件目录的权限。
groupadd gdsgrp
useradd -g gdsgrp gds_user -
修改工具包以及数据源文件目录属主为创建的用户gds_user及其所属的用户组gdsgrp。
CHOWN -R gds_user:gdsgrp /opt/bin/
CHOWN -R gds_user:gdsgrp /input_data -
切换到用户gds_user。
su - gds_user
-
启动GDS。
非SSL模式传输数据的情况下,使用如下命令启动GDS。
/opt/bin/dws/gds/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
使用SSL加密方式传输数据时,在确保执行了步骤5后,使用如下命令启动GDS。
/opt/bin/dws/gds/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 --enable-ssl --ssl-dir /opt/bin/dws/gds
命令中的斜体部分请根据实际填写。
-d dir:保存有待导入数据的数据文件所在目录。本示例中为“/input_data/”。
-p ip:port:GDS listen IP和listen端口。默认值为:127.0.0.1,需要替换为能跟DWS通信的万兆网IP。listen端口的取值范围:1024~65535。默认值为:8098。本示例中配置为:192.168.0.90:5000。
-H address_string:允许哪些主机连接和使用GDS服务。参数需为CIDR格式。此参数配置的目的是允许DWS集群可以访问GDS服务进行数据导入。所以请保证所配置的网段包含DWS集群各主机。
-l log_file:存放GDS的日志文件路径及文件名。本示例中为“/opt/bin/dws/gds/gds_log.txt”。
-D:后台运行GDS。仅支持Linux操作系统下使用。
--enable-ssl:启用SSL加密方式传输数据。
--ssl-dir:SSL证书所在目录。需与步骤6中的证书保存目录保持一致。
步骤3:创建GDS外表
创建外表product_info_ext用于接收数据服务器上的数据,使用SQL客户端工具连接DWS数据库。
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' ;
|
设置数据格式信息是根据导出时设置的详细数据格式参数信息指定的,参数设置如下所示:
-
数据源文件格式(format)为CSV。
-
字段分隔符(delimiter)为英文逗号。
-
编码格式(encoding)为UTF-8。
-
数据文件是否包含标题行(header)为默认值false,即导入时数据文件第一行被识别为数据。
-
设置导入容错性如下所示:
-
FILL_MISSING_FIELDS 'true',表示最后一个字段缺失时,把最后一个字段的值设置为NULL,不报错。
-
IGNORE_EXTRA_DATA 'true',数据源文件中字段比外表定义列数多,则忽略行尾多出来的列,不报错。
-
将数据导入过程中出现的数据格式错误信息(LOG INTO error_table_name)写入表err_tpcds_reasons。
-
允许出现的数据格式错误个数(PER NODE REJECT LIMIT 'value')为unlimited,即接受导入过程中所有数据格式错误。
步骤4:将数据导入到DWS
1.在DWS中创建目标表product_info,用于存储导入的数据。
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.将数据源文件中的数据通过外表“product_info_ext”导入到表“product_info”中。
1
|
INSERT INTO product_info SELECT * FROM product_info_ext;
|
步骤5:处理错误表
1.查询错误信息。
1
|
SELECT * FROM product_info_err;
|
2.处理错误表中的错误信息。
步骤6:优化查询效率
在数据导入完成后,执行ANALYZE语句生成表统计信息。执行计划生成器会使用这些统计数据,以生成最有效的查询执行计划。
如果导入过程中,进行了大量的更新或删除行时,应运行VACUUM FULL命令,然后运行ANALYZE命令。
1.对表product_info执行VACUUM FULL。
1
2
|
VACUUM FULL product_info;
VACUUM
|
2.更新表product_info的统计信息。
1
2
|
ANALYZE product_info;
ANALYZE
|
步骤7:停止GDS
1.以gds_user用户登录安装GDS的数据服务器。
2.停止GDS。
查询GDS进程号。其中GDS进程号为128954。
ps -ef|grep gds
1
2
|
gds_user 128954 1 0 15:03 ? 00:00:00 gds -d /input_data/ -p 192.168.0.90:5000 -l /opt/bin/dws/gds/gds_log .txt -D
gds_user 129003 118723 0 15:04 pts /0 00:00:00 grep gds
|
使用“kill”命令,停止GDS。其中128954为上一步骤中查询出的GDS进程号。
kill -9 128954
https://bbs.huaweicloud.com/forum/thread-72416-1-1.html