教程指引
本教程旨在演示使用GDS(General Data Service)工具將遠端服務器上的數據導入DWS中的辦法,幫助您學習如何通過GDS進行數據導入的方法。
在本教程中,您將:
- 生成本教程需要使用的CSV格式的數據源文件。
- 將數據源文件上傳到數據服務器。
- 創建外表,用于對接GDS和DWS,及將數據服務器上的數據引流到DWS集群中。
- 啟動DWS并創建數據庫表后,將數據導入到表中。
- 根據錯誤表中的提示診斷加載錯誤并更正這些錯誤。
準備ECS作為GDS服務器
創建Linux彈性云主機的操作步驟,請參見《彈性云主機-用戶指南》中的“創建彈性云主機”。創建后,請參見《彈性云主機-用戶指南》中的“登錄Linux彈性云主機”章節進行登錄。
說明l? ECS操作系統必須是GDS工具包所支持的操作系統。
l? ECS與DWS處于同一區域、同一虛擬私有云和子網。
l? ECS安全組規則需放通DWS集群的訪問,即安全組入規則:
l? 協議:TCP
l? 端口范圍:5000
l? 源地址:選擇“IP地址”,輸入DWS 集群地址,例如“192.168.0.10/32”。
l? ECS內部如果啟用了防火墻,需要保證防火墻打開了GDS服務的監聽端口:
iptables? -I INPUT -p tcp -m tcp --dport
-j ACCEPT
下載GDS工具包
1.登錄DWS管理控制臺。
2.在左側導航欄中,單擊“連接管理”。
3.在“gsql命令行客戶端”的下拉列表中,選擇對應版本的DWS 客戶端。
請根據集群版本和安裝客戶端的操作系統,選擇對應版本。
- 單擊“下載”。
準備數據源文件
- 數據文件“product_info0.csv”
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.
- 數據文件“product_info1.csv”
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.
- 數據文件“product_info2.csv”
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.新建文本文檔并使用本地編輯工具(例如Visual Studio Code)打開后,將示例數據拷貝進文本文檔中。
2.選擇“格式>以UTF-8無BOM格式編碼”。
3.選擇“文件>另存為”。
4.在彈出的對話框中輸入文件名后,將文件后綴設為.csv,單擊“保存”。
5.以root用戶登錄GDS服務器。
6.創建數據文件存放目錄“/input_data”。
mkdir -p /input_data
7.使用MobaXterm將數據源文件上傳至上一步所創建的目錄中。
安裝并啟動GDS
1.以root用戶登錄GDS服務器,創建存放GDS工具包的目錄/opt/bin/dws*。*
mkdir -p /opt/bin/dws
2.將GDS工具包上傳至上一步所創建的目錄中。
以上傳redhat版本的工具包為例 ,將GDS工具包“dws_client_8.1.x_redhat_x64.zip”上傳至上一步所創建的目錄中。
3.在工具包所在目錄下,解壓工具包。
cd /opt/bin/dws
unzip dws_client_8.1.x_redhat_x64.zip
4.創建用戶gds_user及其所屬的用戶組gdsgrp。此用戶用于啟動GDS,且需要擁有讀取數據源文件目錄的權限。
groupadd gdsgrp
useradd -g gdsgrp gds_user
5.修改工具包以及數據源文件目錄屬主為創建的用戶gds_user及其所屬的用戶組gdsgrp。
chown -R gds_user:gdsgrp /opt/bin/dws/gds
chown -R gds_user:gdsgrp /input_data
6.切換到gds_user用戶。
su - gds_user
若當前集群版本為8.0.x及以前版本,請跳過步驟7,直接執行步驟8。
若當前集群版本為8.1.x版本,則正常執行以下步驟。
7.執行環境依賴腳本。(僅8.1.x版本適用)
cd /opt/bin/dws/gds/bin
source gds_env
8.啟動GDS。
/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
命令中的斜體部分請根據實際填寫。
- -d dir :保存有待導入數據的數據文件所在目錄。本教程中為“/input_data/”。
- -p ip:port :GDS監聽IP和監聽端口。默認值為:127.0.0.1,需要替換為能跟DWS通信的萬兆網IP。監聽端口的取值范圍: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操作系統下使用。
創建外表
1.使用SQL客戶端工具連接DWS數據庫。
2.創建如下外表:

注意LOCATION:請替換成實際的GDS地址和端口。
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';
返回如下信息表示創建成功:
CREATE FOREIGN TABLE
導入數據
1.使用如下語句在DWS中創建目標表product_info,用于存儲導入的數據。
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”中。
INSERT INTO product_info SELECT * FROM product_info_ext ;
出現以下信息,說明數據導入成功。
INSERT 0 20
3.執行SELECT命令查詢目標表product_info,查看導入到DWS中的數據。
SELECT count(*) FROM product_info;
查詢結果顯示結果如下,表示導入成功。
count
-------
20
(1 row)
4.對表product_info執行VACUUM FULL。
VACUUM FULL product_info
5.更新表product_info的統計信息。
ANALYZE product_info;
停止GDS
1.以gds_user用戶登錄安裝GDS的數據服務器。
2.請使用以下方式停止GDS。
a.執行如下命令,查詢GDS進程號。其中GDS進程號為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
b.使用“kill”命令,停止GDS。其中128954為上一步驟中查詢出的GDS進程號。
kill -9 128954
清除資源
1.執行以下命令,刪除目標表product_info。
DROP TABLE product_info;
當結果顯示為如下信息,則表示刪除成功。
DROP TABLE
2.執行以下命令,刪除外表product_info_ext。
DROP FOREIGN TABLE product_info_ext;
當結果顯示為如下信息,則表示刪除成功。
DROP FOREIGN TABLE