1、COPY命令簡單實用
一、copy在postgres與GreenPlum介紹
1.1 postgres
postgres的COPY命令能夠快速的導出/導入數據到postgresql數據庫中,支持經常使用的文件格式,如:txt、sql、csv、壓縮文件、二進制格式等。特別適合批量導出和導入數據,速度比較快。
COPY TO把一個表的全部內容都拷貝到一個文件;
COPY FROM從一個文件裏拷貝數據到一個表裏(把數據附加到表中已經存在的內容裏)。
postgres的COPY命令能夠快速的導出/導入數據到postgresql數據庫中,支持經常使用的文件格式,如:txt、sql、csv、壓縮文件、二進制格式等。特別適合批量導出和導入數據,速度比較快。
COPY TO把一個表的全部內容都拷貝到一個文件;
COPY FROM從一個文件裏拷貝數據到一個表裏(把數據附加到表中已經存在的內容裏)。
注意:
COPY只能用於表,不能用於視圖。
COPY只能用於表,不能用於視圖。
1.2 GreenPlum
對於數據的加載,GreenPlum數據庫也提供了copy工具(源於PostgreSQL數據庫),使用方法同postgres數據庫的copy命令。copy命令支持文件與表之間的數據的導入和導出。
對於數據的加載,GreenPlum數據庫也提供了copy工具(源於PostgreSQL數據庫),使用方法同postgres數據庫的copy命令。copy命令支持文件與表之間的數據的導入和導出。
注意:
使用copy命令進行數據導入時,數據須要通過Master節點分發到Segment節點;一樣使用copy命令進行數據卸載,數據也須要由Segment發送到Master節點,由Master節點彙總後再寫入外部文件。這樣就限制了數據加載與卸載的效率,可是數據量較小的狀況下,copy命令就很是方便。
使用copy命令進行數據導入時,數據須要通過Master節點分發到Segment節點;一樣使用copy命令進行數據卸載,數據也須要由Segment發送到Master節點,由Master節點彙總後再寫入外部文件。這樣就限制了數據加載與卸載的效率,可是數據量較小的狀況下,copy命令就很是方便。
當數據量比較大時能夠考慮使用GreenPlum的gpload工具來導入。
2. 使用copy命令導出/導入數據的步驟
COPY aa_test FROM '/tmp/data/test.csv' csv HEADER NULL '';node
一般使用psql工具來進行數據的導出和導入。
2.1 準備工做
(1) 建立用於存放導出文件(或待導入文件)的目錄,並賦予權限;
(1) 建立用於存放導出文件(或待導入文件)的目錄,並賦予權限;
注意:
使用root用戶
使用root用戶
# 建立目錄
[root@node8 /]# mkdir /tmp/data
[root@node8 /]# mkdir /tmp/data
# 賦予權限
[root@node8 /]# chmod 777 /tmp/data/
12345
(2) 進入psql並切換數據庫
[root@node8 /]# chmod 777 /tmp/data/
12345
(2) 進入psql並切換數據庫
注意:
若是是postgres數據庫,則切換到postgres用戶;
若是是GreenPlum的MPP,則切換到gpadmin用戶;
若是是postgres數據庫,則切換到postgres用戶;
若是是GreenPlum的MPP,則切換到gpadmin用戶;
# 因爲我使用的是GreenPlum的MPP,因此切換gpadmin用戶
# ---------------------------------------------------------
[root@node8 ~]# su - gpadmin
# ---------------------------------------------------------
[root@node8 ~]# su - gpadmin
# 進入psql
[gpadmin@node8 ~]$ psql
[gpadmin@node8 ~]$ psql
# 使用`\c`命令切換數據庫,切換到要導出或導入數據的數據庫
# ---------------------------------------------------------
postgres=# \c resdata
You are now connected to database "resdata" as user "gpadmin".
1234567891011
# ---------------------------------------------------------
postgres=# \c resdata
You are now connected to database "resdata" as user "gpadmin".
1234567891011
3. 開始使用copy命令導出或導入數據
# 使用 copy 命令將 resdata 庫下的 aa_test 表中的數據導出到 /tmp/data/test.csv 文件中
# ---------------------------------------------------------
resdata=# COPY aa_test TO '/tmp/data/test.csv' WITH csv;
COPY 2
# 使用 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
123456789
# ---------------------------------------------------------
resdata=# COPY aa_test FROM '/tmp/data/test.csv' WITH csv;
COPY 2
123456789
COPY TO還能拷貝SELECT查詢的結果。若是聲明瞭一個字段列表,COPY將只在文件和表之間拷貝已聲明字段的數據。 若是表中有任何不在字段列表裏的字段,那麼COPY FROM將爲那些字段插入缺省值。
# 使用select命令
---------------------
---------------------
2、copy命令詳細介紹
一、Copy的基本語法
Copy的做用是複製數據在數據表和文件之間。
Copy在PostgreSql中的語法是(來自文檔):
Copy在PostgreSql中的語法是(來自文檔):
1) 將文件中的數據複製到表中:
COPY table_name [ ( column_name [, ...] ) ]
FROM { 'filename' | PROGRAM 'command' | STDIN }
[ [ WITH ] ( option [, ...] ) ]
COPY table_name [ ( column_name [, ...] ) ]
FROM { 'filename' | PROGRAM 'command' | STDIN }
[ [ WITH ] ( option [, ...] ) ]
2)將表中的數據複製到文件中:
COPY { table_name [ ( column_name [, ...] )] | ( query ) }
TO{ 'filename' | PROGRAM 'command' | STDOUT }
[[ WITH ] ( option [, ...] ) ]
其中option的設置的參數以下:
FORMAT format_name
OIDS [ boolean ]
FREEZE [ boolean ]
DELIMITER 'delimiter_character'
NULL 'null_string'
HEADER [ boolean ]
QUOTE 'quote_character'
ESCAPE 'escape_character'
FORCE_QUOTE { ( column_name [, ...] ) | * }
FORCE_NOT_NULL ( column_name [, ...] )
ENCODING 'encoding_name'
COPY { table_name [ ( column_name [, ...] )] | ( query ) }
TO{ 'filename' | PROGRAM 'command' | STDOUT }
[[ WITH ] ( option [, ...] ) ]
其中option的設置的參數以下:
FORMAT format_name
OIDS [ boolean ]
FREEZE [ boolean ]
DELIMITER 'delimiter_character'
NULL 'null_string'
HEADER [ boolean ]
QUOTE 'quote_character'
ESCAPE 'escape_character'
FORCE_QUOTE { ( column_name [, ...] ) | * }
FORCE_NOT_NULL ( column_name [, ...] )
ENCODING 'encoding_name'
二、Copy的參數解釋和示例
FORMAT:指複製到文件的文件類型,如:CSV,TEXT。
OIDS :指複製到文件時帶上oid,可是當某個表沒有oid時就會出錯。
FREEZE :凍結數據,而後執行VACUUM FREEZE。
DELIMITER:指在導出文件時的分隔符指定須要用單引號。在TEXT時默認爲tab,CSV文件默認是逗號。不支持binary文件格式。
HEADER:指在複製到文件時帶上表字段名稱。
NULL:指定null值,默認爲\N。
ENCODING:指定文件的編碼,若是沒有指定就默認使用客戶端的字符集。
STDIN:指的是客戶端程序的輸入流。
STDOUT:指向是客戶端的輸出流。
在執行COPY FROM時table_name就須要實際存在的表,其中字段是能夠自選的,如:
1. COPYemp(ename) FROM 「E://emp.txt」
須要注意的是字段類型要匹配而且文件也只要一個字段的值。
2. COPYemp FROM 「E://emp.txt」
文件中須要包含emp表中的字段的值,或tab,或‘,’等分割開的數據
在執行COPY TO時的一些注意,解釋和示例:
1. COPYemp TO STDOUT (DELIMITER ‘|’)
指的是輸出在客戶端而且以‘|’爲分隔符
2. COPY (select* from emp) TO ‘E://emp.csv’ (FORMAT ‘CSV’,DELIMITER ‘|’,HEADER true,NULL ‘’’’’’)
Table_name是能夠爲動態視圖的,而且在後面的括號中參數能夠包含多個,多個參數以逗號分隔開。HERDER的值可使true,false,1,0,on,off,須要注意的是HERDER參數只有在FORMAT爲CSV時生效。
3. COPY empTO PROGRAM ‘zip > E://emp.zip’
參數PROGRAM指的是使用操做系統內部的程序對輸出文件進行加工,上面的做用是將emp導出而且壓縮。
OIDS :指複製到文件時帶上oid,可是當某個表沒有oid時就會出錯。
FREEZE :凍結數據,而後執行VACUUM FREEZE。
DELIMITER:指在導出文件時的分隔符指定須要用單引號。在TEXT時默認爲tab,CSV文件默認是逗號。不支持binary文件格式。
HEADER:指在複製到文件時帶上表字段名稱。
NULL:指定null值,默認爲\N。
ENCODING:指定文件的編碼,若是沒有指定就默認使用客戶端的字符集。
STDIN:指的是客戶端程序的輸入流。
STDOUT:指向是客戶端的輸出流。
在執行COPY FROM時table_name就須要實際存在的表,其中字段是能夠自選的,如:
1. COPYemp(ename) FROM 「E://emp.txt」
須要注意的是字段類型要匹配而且文件也只要一個字段的值。
2. COPYemp FROM 「E://emp.txt」
文件中須要包含emp表中的字段的值,或tab,或‘,’等分割開的數據
在執行COPY TO時的一些注意,解釋和示例:
1. COPYemp TO STDOUT (DELIMITER ‘|’)
指的是輸出在客戶端而且以‘|’爲分隔符
2. COPY (select* from emp) TO ‘E://emp.csv’ (FORMAT ‘CSV’,DELIMITER ‘|’,HEADER true,NULL ‘’’’’’)
Table_name是能夠爲動態視圖的,而且在後面的括號中參數能夠包含多個,多個參數以逗號分隔開。HERDER的值可使true,false,1,0,on,off,須要注意的是HERDER參數只有在FORMAT爲CSV時生效。
3. COPY empTO PROGRAM ‘zip > E://emp.zip’
參數PROGRAM指的是使用操做系統內部的程序對輸出文件進行加工,上面的做用是將emp導出而且壓縮。
轉載自:
原文:https://blog.csdn.net/chuan_day/article/details/44099859
原文:https://blog.csdn.net/chuan_day/article/details/44099859
原文:https://blog.csdn.net/lijingjingchn/article/details/83055550