使用GreenPlum/postgres的copy命令匯出/匯入資料
阿新 • • 發佈:2018-12-06
1. COPY命令
1.1 postgres
postgres的COPY
命令可以快速的匯出/匯入資料到postgresql資料庫中,支援常用的檔案格式,如:txt、sql、csv、壓縮檔案、二進位制格式等。特別適合批量匯出和匯入資料,速度比較快。
COPY TO
把一個表的所有內容都拷貝到一個檔案;
COPY FROM
從一個檔案裡拷貝資料到一個表裡(把資料附加到表中已經存在的內容裡)。
注意:
COPY只能用於表,不能用於檢視。
1.2 GreenPlum
對於資料的載入,GreenPlum資料庫也提供了copy工具(源於PostgreSQL資料庫),使用方法同postgres資料庫的copy命令。copy命令支援檔案與表之間的資料的匯入和匯出。
注意:
使用copy命令進行資料匯入時,資料需要經過Master節點分發到Segment節點;同樣使用copy命令進行資料解除安裝,資料也需要由Segment傳送到Master節點,由Master節點彙總後再寫入外部檔案。這樣就限制了資料載入與解除安裝的效率,但是資料量較小的情況下,copy命令就非常方便。
當資料量比較大時可以考慮使用GreenPlum的gpload工具來匯入。
2. 使用copy命令匯出/匯入資料的步驟
通常使用
psql
工具來進行資料的匯出和匯入。
2.1 準備工作
(1) 建立用於存放匯出檔案(或待匯入檔案)的目錄,並賦予許可權;
注意:
使用root使用者
# 建立目錄
[[email protected] /]# mkdir /tmp/data
# 賦予許可權
[[email protected] /]# chmod 777 /tmp/data/
(2) 進入psql並切換資料庫
注意:
如果是postgres資料庫,則切換到postgres
使用者;
如果是GreenPlum的MPP,則切換到gpadmin
使用者;
# 由於我使用的是GreenPlum的MPP,所以切換gpadmin使用者
# ---------------------------------------------------------
[ [email protected] ~]# su - gpadmin
# 進入psql
[[email protected] ~]$ psql
# 使用`\c`命令切換資料庫,切換到要匯出或匯入資料的資料庫
# ---------------------------------------------------------
postgres=# \c resdata
You are now connected to database "resdata" as user "gpadmin".
3. 開始使用copy命令匯出或匯入資料
# 使用 copy 命令將 resdata 庫下的 aa_test 表中的資料匯出到 /tmp/data/test.csv 檔案中
# ---------------------------------------------------------
resdata=# COPY aa_test TO '/tmp/data/test.csv' WITH csv;
COPY 2
# 使用 copy 命令將 /tmp/data/test.csv 檔案中內容匯入到 resdata 庫下的 aa_test 表中
# ---------------------------------------------------------
resdata=# COPY aa_test FROM '/tmp/data/test.csv' WITH csv;
COPY 2
COPY TO還能拷貝SELECT查詢的結果。如果聲明瞭一個欄位列表,COPY將只在檔案和表之間拷貝已宣告欄位的資料。 如果表中有任何不在欄位列表裡的欄位,那麼COPY FROM將為那些欄位插入預設值。
# 使用select命令
COPY (select * from bb_test capture_time > '2018-08-16 00:00:00' and capture_time < '2018-08-17 00:00:00') TO '/tmp/data/test_20180816.csv' with csv;