GaussDB數(shù)據(jù)庫(kù)使用COPY命令導(dǎo)入導(dǎo)出數(shù)據(jù)的場(chǎng)景分析
一、前言
在數(shù)字化時(shí)代,數(shù)據(jù)是驅(qū)動(dòng)業(yè)務(wù)決策和創(chuàng)新的關(guān)鍵要素。數(shù)據(jù)庫(kù)作為數(shù)據(jù)存儲(chǔ)、管理和分析的核心工具,其高效、準(zhǔn)確的數(shù)據(jù)導(dǎo)入功能至關(guān)重要。
GaussDB作為華為推出的高性能數(shù)據(jù)庫(kù),提供了豐富的數(shù)據(jù)導(dǎo)入選項(xiàng),其中之一便是COPY命令。COPY命令為數(shù)據(jù)遷移、備份恢復(fù)、大數(shù)據(jù)加載等場(chǎng)景提供了一個(gè)高效且靈活的手段。通過COPY命令,用戶可以將外部文件、數(shù)據(jù)流或其他數(shù)據(jù)源的數(shù)據(jù)快速導(dǎo)入到GaussDB中,從而支持業(yè)務(wù)分析、報(bào)表生成、數(shù)據(jù)挖掘等多樣化需求。
二、GaussDB數(shù)據(jù)庫(kù)使用COPY命令導(dǎo)數(shù)語(yǔ)法
通過COPY命令實(shí)現(xiàn)在表和文件之間拷貝。在GaussDB中,COPY FROM從一個(gè)文件拷貝數(shù)據(jù)到一個(gè)表,COPY TO把一個(gè)表的數(shù)據(jù)拷貝到一個(gè)文件。
1、語(yǔ)法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、語(yǔ)法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、特別說明及參數(shù)示意
1)特別說明:
- 語(yǔ)法中的FIXED FORMATTER ( { column_name( offset, length ) } [, ...] )以及 [copy_option [ ...] ] 的無(wú)沖突項(xiàng)可以任意排列組合。
- (query)與[USING] DELIMITERS不兼容,即若COPY TO的數(shù)據(jù)來(lái)自于一個(gè)query的查詢結(jié)果,那么COPY TO語(yǔ)法不能再指定[USING] DELIMITERS語(yǔ)法子句。
- 對(duì)于FIXED FORMATTTER語(yǔ)法后面跟隨的copy_option是以空格進(jìn)行分隔的。
- copy_option是指COPY原生的參數(shù)形式,而option是兼容外表導(dǎo)入的參數(shù)形式。
2)參數(shù)說明:
- STDIN:聲明輸入是來(lái)自標(biāo)準(zhǔn)輸入。
- STDOUT:聲明輸出打印到標(biāo)準(zhǔn)輸出。
- FIXED:打開字段固定長(zhǎng)度模式(每條記錄的每個(gè)字段長(zhǎng)度相同。長(zhǎng)度不足的字段以空格填充,數(shù)字類型字段左對(duì)齊,字符字段右對(duì)齊。字段和字段之間沒有分隔符)。
- WITHOUT ESCAPING:在TEXT格式中,不對(duì)'\'和后面的字符進(jìn)行轉(zhuǎn)義。僅支持TEXT格式
- FORMATTER:在固定長(zhǎng)度模式中,定義每一個(gè)字段在數(shù)據(jù)文件中的位置。按照column(offset,length)格式定義每一列在數(shù)據(jù)文件中的位置。
- OPTION { option_name ' value ' }:用于指定兼容外表的各類參數(shù)
- TRANSFORM ( { column_name [ data_type ] [ AS transform_expr ] } [, ...] ):指定表中各個(gè)列的轉(zhuǎn)換表達(dá)式;其中data_type指定該列在表達(dá)式參數(shù)中的數(shù)據(jù)類型;transform_expr為目標(biāo)表達(dá)式,返回與表中目標(biāo)列數(shù)據(jù)類型一致的結(jié)果值
三、GaussDB數(shù)據(jù)庫(kù)使用COPY命令導(dǎo)數(shù)示例
COPY 屬于SQL命令,導(dǎo)入導(dǎo)出的文件是在數(shù)據(jù)庫(kù)服務(wù)端的進(jìn)行的。且需要數(shù)據(jù)庫(kù)管理員權(quán)限才可以執(zhí)行,COPY對(duì)較大數(shù)據(jù)集的整體讀寫效率較好。
1、操作步驟
根據(jù)業(yè)務(wù)需求確定導(dǎo)數(shù)需求,提前做好規(guī)劃,具體可參考如下步驟:
2、準(zhǔn)備工作(示例)
1)指定(創(chuàng)建)數(shù)據(jù)文件存取目錄。
登錄數(shù)據(jù)庫(kù)服務(wù)器,切換至omm用戶,在“/home/omm”目錄下創(chuàng)建用于存放數(shù)據(jù)文件的目錄,此處取名“mydata”
“su omm”
“mkdir mydata”
Tip:如果在目錄操作中遇到類似“ls: cannot open directory .: Permission denied”報(bào)錯(cuò),需要切換到“cd /home/omm”目錄下,因?yàn)槠渌脩簦╫mm是數(shù)據(jù)庫(kù)用戶)是不能在root目錄下操作的。另外,有時(shí)候可能還需要通過“chmod”給文件或者文件夾賦權(quán)限,具體根據(jù)實(shí)際報(bào)錯(cuò)提示處理即可。
2)準(zhǔn)備數(shù)據(jù)
COPY TO:如果是從庫(kù)表導(dǎo)出數(shù)據(jù)到文件,以文件形式保存,請(qǐng)先確認(rèn)需要被導(dǎo)出的庫(kù)表,實(shí)際業(yè)務(wù)中以真實(shí)存在的表為準(zhǔn),本次為了演示臨時(shí)創(chuàng)建測(cè)試表。
-創(chuàng)建測(cè)試表 DROP TABLE IF EXISTS public.test_3; CREATE TABLE public.test_3 ( id int4, name varchar(20), course varchar(20), score int4 ); --插入測(cè)試數(shù)據(jù) INSERT INTO public.test_3 VALUES (1, 'zhangsan', '語(yǔ)文', 90); INSERT INTO public.test_3 VALUES (2, 'zhangsan', '數(shù)學(xué)', 95); INSERT INTO public.test_3 VALUES (3, 'zhangsan', '英語(yǔ)', 85); INSERT INTO public.test_3 VALUES (4, 'lisi', '語(yǔ)文', 85); INSERT INTO public.test_3 VALUES (5, 'lisi', '數(shù)學(xué)', 90); INSERT INTO public.test_3 VALUES (6, 'lisi', '英語(yǔ)', 95);
COPY FROM:如果是從數(shù)據(jù)文件導(dǎo)入數(shù)據(jù)到庫(kù)表,需要準(zhǔn)備目標(biāo)表和數(shù)據(jù)文件,目標(biāo)表的表結(jié)構(gòu)和數(shù)據(jù)文件的結(jié)構(gòu)需要根據(jù)業(yè)務(wù)需求提前約定好。
--創(chuàng)建目標(biāo)表 DROP TABLE IF EXISTS public.test_4; CREATE TABLE public.test_4 ( id int4, name varchar(20), course varchar(20), score int4 );
數(shù)據(jù)文件建議均以“.txt、.bat、.csv”等文本文件格式存儲(chǔ),文件分隔符以“不跟字段值重復(fù)”為原則。文件編碼格式需要與數(shù)據(jù)庫(kù)設(shè)置的格式統(tǒng)一,防止出現(xiàn)中文亂碼。
數(shù)據(jù)文件“test_3.csv”(COPY命令相對(duì)大數(shù)據(jù)文件效率更高,此處以示意為主)
1;zhangsan;語(yǔ)文;90 2;zhangsan;數(shù)學(xué);95 3;zhangsan;英語(yǔ);85
3、把一個(gè)表的數(shù)據(jù)拷貝到一個(gè)文件(示例)
1)將數(shù)據(jù)表導(dǎo)出到指定 TXT 文件中(默認(rèn)分隔符是 tab)
COPY public.test_3 TO '/home/omm/mydata/test_3.txt';
2)將數(shù)據(jù)表導(dǎo)出到指定 TXT 文件中(文件指定分隔符為’;’)
COPY public.test_3 TO '/home/omm/mydata/test_3.txt' delimiter ';';
3)將查詢結(jié)果集導(dǎo)出到指定 CSV 文件中(默認(rèn)分隔符為’,’)
COPY (SELECT * FROM public.test_3 WHERE name='zhangsan') TO '/home/omm/mydata/test_3.txt' WITH CSV;
4、從一個(gè)數(shù)據(jù)文件拷貝數(shù)據(jù)到一個(gè)表(示例)
測(cè)試數(shù)據(jù)復(fù)用上文的數(shù)據(jù)文件“test_3.csv”,將其導(dǎo)入到測(cè)試表“public.test_4”。
COPY public.test_4 FROM '/home/omm/mydata/test_3.csv' WITH CSV;
更多信息請(qǐng)參考官網(wǎng):
COPY_云數(shù)據(jù)庫(kù) GaussDB_主備版_3.x版本_SQL參考_SQL語(yǔ)法_華為云
特別說明:數(shù)據(jù)的導(dǎo)入導(dǎo)出一定是在業(yè)務(wù)的需求下進(jìn)行的,其中涉及到類似脫敏(加密)、數(shù)據(jù)覆蓋與被覆蓋、文件存儲(chǔ)目錄管理、數(shù)據(jù)量大小及數(shù)據(jù)導(dǎo)入導(dǎo)出效率等問題,本次不做說明,如有機(jī)會(huì)后續(xù)講解。
四、常見數(shù)據(jù)導(dǎo)入導(dǎo)出的場(chǎng)景
數(shù)據(jù)導(dǎo)入導(dǎo)出常見的應(yīng)用場(chǎng)景常見于數(shù)據(jù)庫(kù)、數(shù)據(jù)倉(cāng)庫(kù)和大數(shù)據(jù)平臺(tái)中。
1、數(shù)據(jù)庫(kù):
- 數(shù)據(jù)遷移:當(dāng)從一個(gè)數(shù)據(jù)庫(kù)系統(tǒng)遷移到另一個(gè)數(shù)據(jù)庫(kù)系統(tǒng)時(shí),需要進(jìn)行數(shù)據(jù)導(dǎo)入導(dǎo)出,確保數(shù)據(jù)的完整性和準(zhǔn)確性。
- 備份與恢復(fù):為了防止數(shù)據(jù)丟失,定期備份數(shù)據(jù)庫(kù)是必要的。導(dǎo)入導(dǎo)出功能可以用于備份和恢復(fù)操作。
2、數(shù)據(jù)倉(cāng)庫(kù):
- ETL(提取、轉(zhuǎn)換、加載):在構(gòu)建數(shù)據(jù)倉(cāng)庫(kù)時(shí),通常需要從多個(gè)源提取數(shù)據(jù),進(jìn)行轉(zhuǎn)換和清洗,然后加載到數(shù)據(jù)倉(cāng)庫(kù)中。這涉及到數(shù)據(jù)的導(dǎo)入導(dǎo)出。
- 報(bào)表生成:數(shù)據(jù)倉(cāng)庫(kù)中的數(shù)據(jù)可以導(dǎo)出到報(bào)表中,以供分析和決策。
3、大數(shù)據(jù)平臺(tái):
- 數(shù)據(jù)集成:在大數(shù)據(jù)平臺(tái)中,可能需要從各種來(lái)源導(dǎo)入大量數(shù)據(jù),然后再導(dǎo)出到其他系統(tǒng)或服務(wù)中。
- 實(shí)時(shí)分析:某些場(chǎng)景下,需要實(shí)時(shí)地從大數(shù)據(jù)平臺(tái)中導(dǎo)入數(shù)據(jù),以便進(jìn)行實(shí)時(shí)分析或處理。
- 數(shù)據(jù)備份與恢復(fù):與傳統(tǒng)的數(shù)據(jù)庫(kù)類似,大數(shù)據(jù)平臺(tái)也需要定期備份數(shù)據(jù),以確保數(shù)據(jù)的完整性和可用性。
- 數(shù)據(jù)共享與分發(fā):大數(shù)據(jù)平臺(tái)的數(shù)據(jù)可以導(dǎo)出到其他系統(tǒng)或服務(wù)中,以實(shí)現(xiàn)數(shù)據(jù)的共享和分發(fā)。
這些場(chǎng)景都強(qiáng)調(diào)了數(shù)據(jù)導(dǎo)入導(dǎo)出的重要性,它們是確保數(shù)據(jù)流動(dòng)、滿足業(yè)務(wù)需求、支持決策和風(fēng)險(xiǎn)管理的基礎(chǔ)設(shè)施。
五、小結(jié)
使用COPY命令可以方便地導(dǎo)入數(shù)據(jù)到GaussDB。只需確保源文件的格式與數(shù)據(jù)庫(kù)表結(jié)構(gòu)相匹配,并正確指定文件路徑,即可輕松完成數(shù)據(jù)導(dǎo)入。此外,GaussDB還提供了其他數(shù)據(jù)導(dǎo)入工具和功能,如使用GDS導(dǎo)入數(shù)據(jù)、使用INSERT多行插入、使用gsql元命令導(dǎo)入數(shù)據(jù)、ETL工具集成等,以滿足不同場(chǎng)景下的數(shù)據(jù)導(dǎo)入需求。
到此這篇關(guān)于GaussDB數(shù)據(jù)庫(kù)使用COPY命令導(dǎo)數(shù)的文章就介紹到這了,更多相關(guān)GaussDB使用COPY命令導(dǎo)數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
數(shù)據(jù)庫(kù)修改多對(duì)多的中間表的記錄的技巧
修改多對(duì)多的中間表的記錄的方法,需要的朋友可以參考下。提高效率。2010-01-01SunlightDB 2017新型區(qū)塊鏈數(shù)據(jù)庫(kù)
這篇文章主要為大家詳細(xì)介紹了SunlightDB 2017新型區(qū)塊鏈數(shù)據(jù)庫(kù)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01GaussDB數(shù)據(jù)庫(kù)事務(wù)管理及高級(jí)應(yīng)用
GaussDB是華為公司開發(fā)的一種數(shù)據(jù)庫(kù)產(chǎn)品,它是一種分布式關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS),這篇文章主要給大家介紹了關(guān)于GaussDB數(shù)據(jù)庫(kù)事務(wù)管理及高級(jí)應(yīng)用的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-05-05數(shù)據(jù)庫(kù)中union 與union all 的區(qū)別
當(dāng)我們要對(duì)兩個(gè)或兩個(gè)以上的表進(jìn)行操作時(shí)。我們經(jīng)常會(huì)用到union 與union all2009-11-11redis密碼設(shè)置、訪問權(quán)限控制等安全設(shè)置
這篇文章主要介紹了redis密碼設(shè)置、訪問權(quán)限控制等安全設(shè)置,需要的朋友可以參考下2014-05-05Navicat?Premium12進(jìn)行數(shù)據(jù)庫(kù)定期自動(dòng)備份的方法步驟
本文主要介紹了Navicat?Premium?12進(jìn)行數(shù)據(jù)庫(kù)定期自動(dòng)備份,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02MSSQL轉(zhuǎn)MySQL數(shù)據(jù)庫(kù)的實(shí)際操作記錄
今天把一個(gè)MSSQL的數(shù)據(jù)庫(kù)轉(zhuǎn)成MySQL,在沒有轉(zhuǎn)換工具的情況下,對(duì)于字段不多的數(shù)據(jù)表我用了如下手功轉(zhuǎn)換的方法,還算方便。MSSQL使用企業(yè)管理器操作,MySQL用phpmyadmin操作。2010-06-06