2.1 導(dǎo)入導(dǎo)出工具說(shuō)明
2.1.1 使用Gpfdist服務(wù)
GPFDIST是emc工程師推薦的最快的導(dǎo)入導(dǎo)出工具。導(dǎo)入導(dǎo)出數(shù)據(jù)的時(shí)候gpfdist是同時(shí)并行的與各個(gè)節(jié)點(diǎn)互動(dòng),效率很高(十分高!如果忽略掉GP的一些其他問(wèn)題,簡(jiǎn)直完美)。
在我們的實(shí)際試驗(yàn)中使用一個(gè)gpfdist加上千兆網(wǎng)卡裝載4G的gz文件(壓縮前為36G)的文件約要170秒;然后再導(dǎo)出這個(gè)數(shù)據(jù)耗時(shí)約580秒。如果使用四個(gè)gpfdist,在千兆網(wǎng)卡的支持下速度大約可以提高2.5-3倍。
概述:
gpfdist [-d directory] [-p http_port] [-l log_file] [-t timeout] [-m max_length]
-d:
gpfdist所指向的路徑,在這個(gè)路徑下gpfdist才能讀取文件或?qū)懭胛募?br>
如果沒(méi)有指定這個(gè)東西,gpfdist會(huì)默認(rèn)為指向當(dāng)前路徑;
注意:?jiǎn)?dòng)gpfdist服務(wù)的用戶(hù)要對(duì)這個(gè)路徑有讀寫(xiě)權(quán)限。
-l:
指定日志文件的路徑,記錄gpfdist的運(yùn)行日志,其實(shí)是個(gè)簡(jiǎn)單日志(包含一些啟動(dòng)、關(guān)閉、找不到文件之類(lèi)的無(wú)聊東西)。
-p:
指定gpfdist服務(wù)端口,這個(gè)值默認(rèn)是8080,前置機(jī)一般使用9000以上的端口
-t:
為gp創(chuàng)建一個(gè)到gpfdist的連接設(shè)置一個(gè)超時(shí)時(shí)間;
默認(rèn)是5秒,允許設(shè)置值范圍為2-30秒。一般情況不需對(duì)這個(gè)做設(shè)定。
-m:
允許文本文件行的最大長(zhǎng)度(以bytes為單位)。默認(rèn)值為32768.
取值范圍為: 32K -- 1MB,目前前置機(jī)的項(xiàng)目都只是使用默認(rèn)值。
-?
獲得幫助
--version
查看版本
2.1.2 使用Copy命令
COPY命令是使用比較靈活的導(dǎo)入導(dǎo)出工具,這個(gè)工具是postgresql本身帶的工具實(shí)現(xiàn)表和文件之間拷貝數(shù)據(jù),EMC公司對(duì)其進(jìn)行了加工,使其在greenplum的集群環(huán)境下可以使用。目前在GP4.1及之前的版本中copy的是逐個(gè)節(jié)點(diǎn)(逐個(gè)postgresql )來(lái)導(dǎo)入導(dǎo)出的,所以在效率上比gpfdist要低;
但是copy命令可以很簡(jiǎn)潔完成一個(gè)導(dǎo)入導(dǎo)出操作,使得它也具有十分光輝的魅力。
由于這個(gè)工具是直接從postgresql發(fā)展出來(lái)的完全可以按照postgresql的方式使用,因此在網(wǎng)絡(luò)上關(guān)于copy的資料十分豐富,所以很多開(kāi)發(fā)人員都萬(wàn)分樂(lè)意的使用之。
概述(來(lái)源于萬(wàn)能的幫助文檔):
COPY tablename [ ( column [, ...] ) ]
FROM { 'filename' | STDIN }
[ [ WITH ]
[ BINARY ]
[ OIDS ]
[ DELIMITER [ AS ] 'delimiter' ]
[ NULL [ AS ] 'null string' ]
[ CSV [ HEADER ]
[ QUOTE [ AS ] 'quote' ]
[ ESCAPE [ AS ] 'escape' ]
[ FORCE NOT NULL column [, ...] ]
COPY { tablename [ ( column [, ...] ) ] | ( query ) }
TO { 'filename' | STDOUT }
[ [ WITH ]
[ BINARY ]
[ HEADER ]
[ OIDS ]
[ DELIMITER [ AS ] 'delimiter' ]
[ NULL [ AS ] 'null string' ]
[ CSV [ HEADER ]
[ QUOTE [ AS ] 'quote' ]
[ ESCAPE [ AS ] 'escape' ]
[ FORCE QUOTE column [, ...] ]
參數(shù)說(shuō)明:
1、tablename
現(xiàn)存表的名字(可以有模式修飾)
2、column
可選的待拷貝字段列表。如果沒(méi)有聲明字段列表,那么將使用所有字段。
3、query
一個(gè)必須用圓括弧包圍的 SELECT 或 VALUES 命令,其結(jié)果將被拷貝。
4、filename
輸入或輸出文件的絕對(duì)路徑。Windows 用戶(hù)可能需要使用 E'' 字符串和雙反斜線作為路徑分割符。
5、STDIN
聲明輸入是來(lái)自客戶(hù)端應(yīng)用
6、STDOUT
聲明輸入前往客戶(hù)端應(yīng)用
7、BINARY
使用二進(jìn)制格式存儲(chǔ)和讀取,而不是以文本的方式。在二進(jìn)制模式下,不能聲明 DELIMITER, NULL, CSV 選項(xiàng)。
8、OIDS
聲明為每行拷貝內(nèi)部對(duì)象標(biāo)識(shí)(OID)。如果為一個(gè) query 拷貝或者沒(méi)有 OID 的表聲明了 OIDS 選項(xiàng),則拋出一個(gè)錯(cuò)誤。
9、delimiter
在文件中分隔各個(gè)字段的單個(gè)字符。在文本模式下,缺省是水平制表符,在 CSV 模式下是一個(gè)逗號(hào)。
10、null string
這是一個(gè)代表 NULL 值的字符串。在文本模式下缺省是 \N ,在 CSV 模式下是一個(gè)沒(méi)有引號(hào)的 NULL 。如果你不想?yún)^(qū)分 NULL 和空字符串,那么即使在文本模式下你可能也會(huì)使用一個(gè)空字符串。
【注意】在使用 COPY FROM 的時(shí)候,任何匹配這個(gè)字符串的字符串將被存儲(chǔ)為 NULL 值,所以你應(yīng)該確保你用的字符串和 COPY TO 相同。
11、CSV
打開(kāi)逗號(hào)分隔變量(CSV)模式
12、HEADER
聲明文件包含一個(gè)標(biāo)題頭行,包含文件中每個(gè)字段的名字。輸出時(shí),第一行包含表的字段名;輸入時(shí),第一行被忽略。
13、quote
聲明 CSV 模式里的引號(hào)字符。缺省是雙引號(hào)。
14、escape
聲明在 CSV 模式下應(yīng)該出現(xiàn)在數(shù)據(jù)里 QUOTE 字符值前面的字符。缺省是 QUOTE 值(通常是雙引號(hào))。
15、FORCE QUOTE
在 CSV COPY TO 模式下,強(qiáng)制在每個(gè)聲明的字段周?chē)鷮?duì)所有非 NULL 值都使用引號(hào)包圍。NULL 輸出從不會(huì)被引號(hào)包圍。
16、FORCE NOT NULL
在 CSV COPY FROM 模式下,把聲明的每個(gè)字段都當(dāng)作它們有引號(hào)包圍來(lái)處理,因此就沒(méi)有 NULL 值。對(duì)于在 CSV 模式下的缺省空字符串(''),這樣導(dǎo)致一個(gè)缺失的數(shù)值當(dāng)作一個(gè)零長(zhǎng)字符串輸入。