日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

使用OSS外表高速導(dǎo)出數(shù)據(jù)到OSS

更新時(shí)間:

云原生數(shù)據(jù)倉(cāng)庫(kù)AnalyticDB PostgreSQL版支持通過(guò)OSS外部表(即gpossext功能),將數(shù)據(jù)并行導(dǎo)出到阿里云對(duì)象存儲(chǔ)OSS,并支持通過(guò)GZIP進(jìn)行OSS外部表文件壓縮,大量節(jié)省存儲(chǔ)空間及成本。

功能介紹

目前gpossext支持讀寫(xiě)TEXT、CSV格式的文件以及GZIP壓縮格式的TEXT、CSV文件。

gpossext架構(gòu)圖如下。

OSS

TEXT和CSV格式說(shuō)明

下列幾個(gè)參數(shù)可以在外表DDL參數(shù)中指定,用于規(guī)定讀寫(xiě)OSS的文件格式:

  • TEXT和CSV行分割符號(hào)是\n,也就是換行符。

  • DELIMITER用于定義列的分割符:

    • 當(dāng)用戶(hù)數(shù)據(jù)中包括DELIMITER時(shí),則需要和QUOTE參數(shù)一同使用。

    • 推薦的列分割符有,\t|或一些不常見(jiàn)的字符。

  • QUOTE用于包裹有特殊字符的用戶(hù)數(shù)據(jù)(以列為單位):

    • 包含有特殊字符的字符串會(huì)被QUOTE包裹,用于區(qū)分用戶(hù)數(shù)據(jù)和控制字符。

    • 如果不必要,例如整數(shù),基于優(yōu)化效率的考慮,不必使用QUOTE包裹數(shù)據(jù)。

    • QUOTE不能和DELIMITER相同,默認(rèn)QUOTE是雙引號(hào)。

    • 當(dāng)用戶(hù)數(shù)據(jù)中包含了QUOTE字符,則需要使用轉(zhuǎn)義字符ESCAPE加以區(qū)分。

  • ESCAPE用于特殊字符轉(zhuǎn)義:

    • 轉(zhuǎn)義字符出現(xiàn)在需要轉(zhuǎn)義的特殊字符前,表示它不是一個(gè)特殊字符。

    • ESCAPE默認(rèn)和QUOTE相同,為雙引號(hào)""

    • 也支持設(shè)置成\(MySQL默認(rèn)的轉(zhuǎn)義字符)或別的字符。

表 1. 典型的TEXT和CSV默認(rèn)控制字符

控制字符和格式

TEXT

CSV

DELIMITER(列分割符)

\t(Tab)

, (Comma)

QUOTE(摘引)

" (Double-Quote)

"(Double-Quote)

ESCAPE(轉(zhuǎn)義)

(不適用)

與QUOTE相同

NULL(空值)

\N(Backslash-N)

(無(wú)引號(hào)的空字符串)

說(shuō)明

所有的控制字符都必須是單字節(jié)字符。

注意事項(xiàng)

  • 創(chuàng)建和使用外部表的語(yǔ)法,除了location相關(guān)參數(shù),其余參數(shù)和Greenplum的使用方式相同。

  • 數(shù)據(jù)導(dǎo)入導(dǎo)出的性能和AnalyticDB PostgreSQL的資源(CPU、I/O、內(nèi)存、網(wǎng)絡(luò)等)有關(guān),也和OSS相關(guān)。為了獲取最優(yōu)的導(dǎo)入導(dǎo)出性能,建議在創(chuàng)建表時(shí),使用列式存儲(chǔ)加壓縮功能。例如,指定子句"WITH (APPENDONLY=true, ORIENTATION=column, COMPRESSTYPE=zlib, COMPRESSLEVEL=5, BLOCKSIZE=1048576)",詳細(xì)信息,請(qǐng)參見(jiàn) Greenplum Database創(chuàng)建表官方文檔

  • 為了保證數(shù)據(jù)導(dǎo)入導(dǎo)出的性能,請(qǐng)保證OSS與AnalyticDB PostgreSQL在同一地域下。

操作步驟

  1. 創(chuàng)建OSS外部表插件。

    使用OSS外部表時(shí),需要在AnalyticDB PostgreSQL中先創(chuàng)建OSS外部表插件(每個(gè)庫(kù)中均需要單獨(dú)創(chuàng)建)。創(chuàng)建命令如下:

    CREATE EXTENSION IF NOT EXISTS oss_ext;
  2. AnalyticDB PostgreSQL中,創(chuàng)建WRITABLE外部表。

    創(chuàng)建OSS外部表語(yǔ)法如下。

    CREATE WRITABLE EXTERNAL TABLE table_name
    ( column_name data_type [, ...] | LIKE other_table )
    LOCATION ('ossprotocol')
    FORMAT 'TEXT'
                   [( [DELIMITER [AS] 'delimiter']
                   [NULL [AS] 'null string']
                   [ESCAPE [AS] 'escape' | 'OFF'] )]
              | 'CSV'
                   [([QUOTE [AS] 'quote']
                   [DELIMITER [AS] 'delimiter']
                   [NULL [AS] 'null string']
                   [FORCE QUOTE column [, ...]] ]
                   [ESCAPE [AS] 'escape'] )]
    [ ENCODING 'encoding' ]
    [ DISTRIBUTED BY (column, [ ... ] ) | DISTRIBUTED RANDOMLY ]
    ossprotocol:
       oss://oss_endpoint [prefix=prefix_name|dir=[folder/[folder/]...]/file_name]
        id=userossid key=userosskey bucket=ossbucket compressiontype=[none|gzip] async=[true|false]

    參數(shù)說(shuō)明如下。

    參數(shù)

    說(shuō)明

    WRITABLE

    WRITABLE是導(dǎo)出模式外部表的關(guān)鍵字,創(chuàng)建外部表時(shí)需要明確指明。

    FORMAT

    支持文件格式,例如TEXT、CSV。

    ENCODING

    文件中數(shù)據(jù)的編碼格式,例如UTF8。

    DISTRIBUTED BY

    DISTRIBUTED BY子句可以讓數(shù)據(jù)節(jié)點(diǎn)(Segment)按指定的分布鍵將數(shù)據(jù)導(dǎo)出到OSS。

    oss://oss_endpoint

    協(xié)議和Endpoint,格式為協(xié)議名://oss_endpoint,其中協(xié)議名為oss,oss_endpoint為OSS對(duì)應(yīng)區(qū)域的域名。示例如下:

    oss://oss-cn-hangzhou.aliyuncs.com
    重要

    如果是從阿里云的主機(jī)訪問(wèn)數(shù)據(jù)庫(kù),應(yīng)該使用內(nèi)網(wǎng)域名(即帶有internal的域名),避免產(chǎn)生公網(wǎng)流量。

    id

    阿里云賬號(hào)的AccessKey ID。獲取AccessKey操作,請(qǐng)參見(jiàn)創(chuàng)建AccessKey

    key

    阿里云賬號(hào)的AccessKey Secret。獲取AccessKey操作,請(qǐng)參見(jiàn)創(chuàng)建AccessKey

    bucket

    指定數(shù)據(jù)文件所在的Bucket,需要在OSS上預(yù)先創(chuàng)建。

    prefix

    指定數(shù)據(jù)文件對(duì)應(yīng)路徑名的前綴,不支持正則表達(dá)式,僅是匹配前綴。

    說(shuō)明

    dir互斥,兩者只能設(shè)置其中一個(gè)。

    WRITABLE外部表在導(dǎo)出數(shù)據(jù)時(shí),會(huì)根據(jù)該前綴自動(dòng)生成一個(gè)唯一的文件名來(lái)給導(dǎo)出文件命名。

    如果指定prefix=osstest/exp/outfromhdb,則表示的導(dǎo)出路徑為osstest/exp/,導(dǎo)出文件的名稱(chēng)都以outfromhdb開(kāi)頭。

    dir

    OSS中的虛擬文件夾路徑。

    說(shuō)明

    prefix互斥,兩者只能設(shè)置其中一個(gè)。

    • 文件夾路徑需要以/結(jié)尾,如test/mydir/

    • 在導(dǎo)出數(shù)據(jù)時(shí),使用此參數(shù)創(chuàng)建外部表,所有數(shù)據(jù)會(huì)導(dǎo)出到此目錄下的多個(gè)文件中,輸出文件名的形式為filename.x,x為數(shù)字,但可能不是連續(xù)的。

    compressiontype

    導(dǎo)出文件的壓縮格式。

    • none(默認(rèn)值):導(dǎo)入的文件未壓縮。

    • gzip:導(dǎo)入的文件壓縮格式為GZIP。

    說(shuō)明

    目前僅支持GZIP壓縮格式。

    num_parallel_worker

    設(shè)置導(dǎo)出到OSS的壓縮數(shù)據(jù)的并行壓縮線程個(gè)數(shù),默認(rèn)值為3。取值范圍為1~8。示例如下:

    num_parallel_worker=3

    oss_flush_block_size

    單次導(dǎo)出數(shù)據(jù)到OSS的buffer大小,默認(rèn)為32 MB。取值范圍為1 MB~128 MB。示例如下:

    oss_flush_block_size=32

    oss_file_max_size

    設(shè)置導(dǎo)出到OSS的最大文件大小,超出之后會(huì)切換到另一個(gè)文件繼續(xù)寫(xiě)。默認(rèn)為1024 MB。取值范圍為8 MB~4000 MB。示例如下:

    oss_file_max_size=1024

    oss_connect_timeout

    設(shè)置連接超時(shí)。單位為秒,默認(rèn)為10秒。

    oss_dns_cache_timeout

    設(shè)置DNS超時(shí)。單位為秒,默認(rèn)為60秒。

    oss_speed_limit

    設(shè)置觸發(fā)超時(shí)的最小速率。默認(rèn)為1024字節(jié),即1 KB。

    需要與oss_speed_time參數(shù)配合使用。

    說(shuō)明

    如果使用默認(rèn)值且連續(xù)15秒的傳輸速率小于1 KB,會(huì)觸發(fā)超時(shí)。具體信息,請(qǐng)參見(jiàn)OSS SDK 錯(cuò)誤處理

    oss_speed_time

    設(shè)置觸發(fā)超時(shí)的最長(zhǎng)時(shí)間。默認(rèn)為15秒。

    需要與oss_speed_limit參數(shù)配合使用。

    說(shuō)明

    如果使用默認(rèn)值且連續(xù)15秒的傳輸速率小于1 KB,會(huì)觸發(fā)超時(shí)。具體信息,請(qǐng)參見(jiàn)OSS SDK 錯(cuò)誤處理

  3. 并行導(dǎo)出數(shù)據(jù)。

    AnalyticDB PostgreSQL數(shù)據(jù)庫(kù)中執(zhí)行如下命令,并行將數(shù)據(jù)導(dǎo)出到OSS。

    INSERT INTO <外部表> SELECT * FROM <源表>

操作示例

本文以源表example為例,介紹將源表example的數(shù)據(jù)導(dǎo)出到OSS。

  1. 創(chuàng)建OSS外部表插件。

    創(chuàng)建命令如下:

    CREATE EXTENSION IF NOT EXISTS oss_ext;
  2. 創(chuàng)建源表,用于裝載待導(dǎo)出的數(shù)據(jù)。

    源表example的建表語(yǔ)句如下:

    CREATE TABLE example
            (date text, time text, open float,
             high float, low float, volume int)
             DISTRIBUTED BY (date);
  3. 創(chuàng)建OSS導(dǎo)出外部表。

    • 創(chuàng)建外部表時(shí),使用prefix參數(shù)指定導(dǎo)出路徑。示例如下:

      CREATE WRITABLE EXTERNAL TABLE ossexample_exp
              (date text, time text, open float, high float,
              low float, volume int)
              location('oss://oss-cn-hangzhou.aliyuncs.com
              prefix=osstest/exp/outfromhdb id=XXX
              key=XXX bucket=testbucket') FORMAT 'csv'
              DISTRIBUTED BY (date);
    • 創(chuàng)建外部表時(shí),使用dir參數(shù)指定導(dǎo)出路徑。示例如下:

      CREATE WRITABLE EXTERNAL TABLE ossexample_exp
              (date text, time text, open float, high float,
              low float, volume int)
              location('oss://oss-cn-hangzhou.aliyuncs.com
              dir=osstest/exp/ id=XXX
              key=XXX bucket=testbucket') FORMAT 'csv'
              DISTRIBUTED BY (date);
  4. 將數(shù)據(jù)并行地從example表導(dǎo)出到OSS。

    INSERT INTO ossexample_exp SELECT * FROM example;

執(zhí)行如下查詢(xún)計(jì)劃,可以看到Segment節(jié)點(diǎn)直接將本地?cái)?shù)據(jù)導(dǎo)出到OSS,沒(méi)有進(jìn)行數(shù)據(jù)重分布。

EXPLAIN INSERT INTO ossexample_exp SELECT * FROM example;

返回信息如下:

                          QUERY PLAN
---------------------------------------------------------------
 Insert (slice0; segments: 3)  (rows=1 width=92)
   ->  Seq Scan on example  (cost=0.00..0.00 rows=1 width=92)
(2 rows)

SDK錯(cuò)誤處理

當(dāng)導(dǎo)入或?qū)С霾僮鞒鲥e(cuò)時(shí),錯(cuò)誤日志可能會(huì)出現(xiàn)如下信息:

  • code:出錯(cuò)請(qǐng)求的HTTP狀態(tài)碼。

  • error_code:OSS的錯(cuò)誤碼。

  • error_msg:OSS的錯(cuò)誤信息。

  • req_id:標(biāo)識(shí)該次請(qǐng)求的UUID。當(dāng)您無(wú)法解決問(wèn)題時(shí),可以憑req_id來(lái)請(qǐng)求OSS開(kāi)發(fā)工程師的幫助。

具體信息,請(qǐng)參見(jiàn)OSS API 錯(cuò)誤響應(yīng),超時(shí)相關(guān)的錯(cuò)誤可以使用oss_ext相關(guān)參數(shù)處理。

參考文檔