1. 程式人生 > >使用GreenPlum/postgres的copy命令匯出/匯入資料

使用GreenPlum/postgres的copy命令匯出/匯入資料

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;