GaussDB數據庫使用COPY命令導入導出數據的場景分析
一、前言
在數字化時代,數據是驅動業(yè)務決策和創(chuàng)新的關鍵要素。數據庫作為數據存儲、管理和分析的核心工具,其高效、準確的數據導入功能至關重要。
GaussDB作為華為推出的高性能數據庫,提供了豐富的數據導入選項,其中之一便是COPY命令。COPY命令為數據遷移、備份恢復、大數據加載等場景提供了一個高效且靈活的手段。通過COPY命令,用戶可以將外部文件、數據流或其他數據源的數據快速導入到GaussDB中,從而支持業(yè)務分析、報表生成、數據挖掘等多樣化需求。
二、GaussDB數據庫使用COPY命令導數語法
通過COPY命令實現在表和文件之間拷貝。在GaussDB中,COPY FROM從一個文件拷貝數據到一個表,COPY TO把一個表的數據拷貝到一個文件。
1、語法COPY FROM
COPY table_name [ ( column_name [, ...] ) ]
FROM { 'filename' | STDIN }
[ [ USING ] DELIMITERS 'delimiters' ]
[ WITHOUT ESCAPING ]
[ LOG ERRORS ]
[ REJECT LIMIT 'limit' ]
[ [ WITH ] ( option [, ...] ) ]
| copy_option
| TRANSFORM ( { column_name [ data_type ] [ AS transform_expr ] } [, ...] )
| FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) [ ( option [, ...] ) | copy_option [ ...] ] ];2、語法COPY TO
COPY table_name [ ( column_name [, ...] ) ]
TO { 'filename' | STDOUT }
[ [ USING ] DELIMITERS 'delimiters' ]
[ WITHOUT ESCAPING ]
[ [ WITH ] ( option [, ...] ) ]
| copy_option
| FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) [ ( option [, ...] ) | copy_option [ ...] ] ];
COPY query
TO { 'filename' | STDOUT }
[ WITHOUT ESCAPING ]
[ [ WITH ] ( option [, ...] ) ]
| copy_option
| FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) [ ( option [, ...] ) | copy_option [ ...] ] ];3、特別說明及參數示意
1)特別說明:
- 語法中的FIXED FORMATTER ( { column_name( offset, length ) } [, ...] )以及 [copy_option [ ...] ] 的無沖突項可以任意排列組合。
- (query)與[USING] DELIMITERS不兼容,即若COPY TO的數據來自于一個query的查詢結果,那么COPY TO語法不能再指定[USING] DELIMITERS語法子句。
- 對于FIXED FORMATTTER語法后面跟隨的copy_option是以空格進行分隔的。
- copy_option是指COPY原生的參數形式,而option是兼容外表導入的參數形式。
2)參數說明:
- STDIN:聲明輸入是來自標準輸入。
- STDOUT:聲明輸出打印到標準輸出。
- FIXED:打開字段固定長度模式(每條記錄的每個字段長度相同。長度不足的字段以空格填充,數字類型字段左對齊,字符字段右對齊。字段和字段之間沒有分隔符)。
- WITHOUT ESCAPING:在TEXT格式中,不對'\'和后面的字符進行轉義。僅支持TEXT格式
- FORMATTER:在固定長度模式中,定義每一個字段在數據文件中的位置。按照column(offset,length)格式定義每一列在數據文件中的位置。
- OPTION { option_name ' value ' }:用于指定兼容外表的各類參數
- TRANSFORM ( { column_name [ data_type ] [ AS transform_expr ] } [, ...] ):指定表中各個列的轉換表達式;其中data_type指定該列在表達式參數中的數據類型;transform_expr為目標表達式,返回與表中目標列數據類型一致的結果值
三、GaussDB數據庫使用COPY命令導數示例
COPY 屬于SQL命令,導入導出的文件是在數據庫服務端的進行的。且需要數據庫管理員權限才可以執(zhí)行,COPY對較大數據集的整體讀寫效率較好。
1、操作步驟
根據業(yè)務需求確定導數需求,提前做好規(guī)劃,具體可參考如下步驟:

2、準備工作(示例)
1)指定(創(chuàng)建)數據文件存取目錄。
登錄數據庫服務器,切換至omm用戶,在“/home/omm”目錄下創(chuàng)建用于存放數據文件的目錄,此處取名“mydata”
“su omm”

“mkdir mydata”

Tip:如果在目錄操作中遇到類似“ls: cannot open directory .: Permission denied”報錯,需要切換到“cd /home/omm”目錄下,因為其它用戶(omm是數據庫用戶)是不能在root目錄下操作的。另外,有時候可能還需要通過“chmod”給文件或者文件夾賦權限,具體根據實際報錯提示處理即可。
2)準備數據
COPY TO:如果是從庫表導出數據到文件,以文件形式保存,請先確認需要被導出的庫表,實際業(yè)務中以真實存在的表為準,本次為了演示臨時創(chuàng)建測試表。
-創(chuàng)建測試表 DROP TABLE IF EXISTS public.test_3; CREATE TABLE public.test_3 ( id int4, name varchar(20), course varchar(20), score int4 ); --插入測試數據 INSERT INTO public.test_3 VALUES (1, 'zhangsan', '語文', 90); INSERT INTO public.test_3 VALUES (2, 'zhangsan', '數學', 95); INSERT INTO public.test_3 VALUES (3, 'zhangsan', '英語', 85); INSERT INTO public.test_3 VALUES (4, 'lisi', '語文', 85); INSERT INTO public.test_3 VALUES (5, 'lisi', '數學', 90); INSERT INTO public.test_3 VALUES (6, 'lisi', '英語', 95);
COPY FROM:如果是從數據文件導入數據到庫表,需要準備目標表和數據文件,目標表的表結構和數據文件的結構需要根據業(yè)務需求提前約定好。
--創(chuàng)建目標表 DROP TABLE IF EXISTS public.test_4; CREATE TABLE public.test_4 ( id int4, name varchar(20), course varchar(20), score int4 );
數據文件建議均以“.txt、.bat、.csv”等文本文件格式存儲,文件分隔符以“不跟字段值重復”為原則。文件編碼格式需要與數據庫設置的格式統(tǒng)一,防止出現中文亂碼。
數據文件“test_3.csv”(COPY命令相對大數據文件效率更高,此處以示意為主)
1;zhangsan;語文;90 2;zhangsan;數學;95 3;zhangsan;英語;85
3、把一個表的數據拷貝到一個文件(示例)
1)將數據表導出到指定 TXT 文件中(默認分隔符是 tab)
COPY public.test_3 TO '/home/omm/mydata/test_3.txt';


2)將數據表導出到指定 TXT 文件中(文件指定分隔符為’;’)
COPY public.test_3 TO '/home/omm/mydata/test_3.txt' delimiter ';';


3)將查詢結果集導出到指定 CSV 文件中(默認分隔符為’,’)
COPY (SELECT * FROM public.test_3 WHERE name='zhangsan') TO '/home/omm/mydata/test_3.txt' WITH CSV;


4、從一個數據文件拷貝數據到一個表(示例)
測試數據復用上文的數據文件“test_3.csv”,將其導入到測試表“public.test_4”。
COPY public.test_4 FROM '/home/omm/mydata/test_3.csv' WITH CSV;

更多信息請參考官網:
COPY_云數據庫 GaussDB_主備版_3.x版本_SQL參考_SQL語法_華為云
特別說明:數據的導入導出一定是在業(yè)務的需求下進行的,其中涉及到類似脫敏(加密)、數據覆蓋與被覆蓋、文件存儲目錄管理、數據量大小及數據導入導出效率等問題,本次不做說明,如有機會后續(xù)講解。
四、常見數據導入導出的場景
數據導入導出常見的應用場景常見于數據庫、數據倉庫和大數據平臺中。
1、數據庫:
- 數據遷移:當從一個數據庫系統(tǒng)遷移到另一個數據庫系統(tǒng)時,需要進行數據導入導出,確保數據的完整性和準確性。
- 備份與恢復:為了防止數據丟失,定期備份數據庫是必要的。導入導出功能可以用于備份和恢復操作。
2、數據倉庫:
- ETL(提取、轉換、加載):在構建數據倉庫時,通常需要從多個源提取數據,進行轉換和清洗,然后加載到數據倉庫中。這涉及到數據的導入導出。
- 報表生成:數據倉庫中的數據可以導出到報表中,以供分析和決策。
3、大數據平臺:
- 數據集成:在大數據平臺中,可能需要從各種來源導入大量數據,然后再導出到其他系統(tǒng)或服務中。
- 實時分析:某些場景下,需要實時地從大數據平臺中導入數據,以便進行實時分析或處理。
- 數據備份與恢復:與傳統(tǒng)的數據庫類似,大數據平臺也需要定期備份數據,以確保數據的完整性和可用性。
- 數據共享與分發(fā):大數據平臺的數據可以導出到其他系統(tǒng)或服務中,以實現數據的共享和分發(fā)。
這些場景都強調了數據導入導出的重要性,它們是確保數據流動、滿足業(yè)務需求、支持決策和風險管理的基礎設施。
五、小結
使用COPY命令可以方便地導入數據到GaussDB。只需確保源文件的格式與數據庫表結構相匹配,并正確指定文件路徑,即可輕松完成數據導入。此外,GaussDB還提供了其他數據導入工具和功能,如使用GDS導入數據、使用INSERT多行插入、使用gsql元命令導入數據、ETL工具集成等,以滿足不同場景下的數據導入需求。
到此這篇關于GaussDB數據庫使用COPY命令導數的文章就介紹到這了,更多相關GaussDB使用COPY命令導數內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Navicat?Premium12進行數據庫定期自動備份的方法步驟
本文主要介紹了Navicat?Premium?12進行數據庫定期自動備份,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02

