OSS 裝載資料到 PostgreSQL

來源:互聯網
上載者:User

oss_fdw

在阿里雲上,支援通過 oss_fdw 並行裝載資料到 PostgreSQL 和 PPAS 中

oss_fdw 參數

oss_fdw 和其他 fdw 的介面一樣,提供對外部資料源 oss 的資料封裝,使用者可以使用 oss_fdw 像一張表一樣讀取 oss 上的存放的檔案。
和其他 fdw 一樣,oss_fdw 提供專屬的數個參數用於串連和解析 oss 上的檔案資料。

和 oss 相關參數有

1. ossendpoint 參數,是內網訪問oss的地址,也叫 host

2. id oss 帳號 id

3. key oss 帳號 key

4. bucket ossbucket,需要建立 oss 帳號後分配

5. filepath oss 中帶路徑的檔案名稱
  5.1 檔案名稱包含檔案路徑,但不包含 bucket
  5.2 該參數匹配 oss 對應路徑上的多個檔案,支援將他們裝載到資料庫
  5.3 檔案命名為 filepath 和 filepath.x 支援被匯入到資料庫,x 要求從 1 開始,且是連續的
  5.4 例 filepath filepath.1 filepath.2 filepath.3 filepath.5 前4個檔案會被匹配和匯入,但是 filepath.5 不會。

6. dir oss 中的虛擬檔案目錄
    6.1 dir 需要以 / 結尾
    6.2 dir 制定的虛擬檔案目錄中的所有檔案(不包含子檔案夾和子檔案夾下的檔案)都會被匹配和匯入到資料庫。

需要注意

1. 前4個參數 ossendpoint id key bucket 放在server對象中
2. filepath 和 dir 需要在 FDW 的 OPTIONS 參數參數中指定
3. filepath 和 dir 必須指定兩個參數之一,且不能同時指定
4. 各參數的值使用‘’引起來,不能包括無用的空格


其他參數

1. format
    指定檔案的格式,目前只支援 csv

2. encoding
    檔案中資料的編碼格式,支援常見 pg 編碼,如 utf8

3. parse_errors
    容錯模式解析,按照行為單位,忽略檔案分析過程中發生的錯誤

4. delimiter
   制定列的分割符

5. quote
   指定檔案的引用字元

6. escape
    指定檔案的逃逸字元

7. null
    指定匹配對應字串的列為 null
    例如 null 'test',即列值為 ‘test’ 的字串為 null

8. force_not_null
    制定一列為多列的值不是 null
    例 force_not_null ‘id’,即表中 id 列如果是 null,替換成Null 字元串


用例

# 建立外掛程式
create extension oss_fdw;

# 建立 server
CREATE SERVER ossserver FOREIGN DATA WRAPPER oss_fdw OPTIONS
     (host 'oss-cn-hangzhou-zmf.aliyuncs.com' , id 'xxx', key 'xxx',bucket 'mybucket');

# 建立 oss 外部表格
CREATE FOREIGN TABLE ossexample
    (date text, time text, open float,
     high float, low float, volume int)
     SERVER ossserver
     OPTIONS ( filepath 'osstest/example.csv', delimiter ',' ,
        format 'csv', encoding 'utf8', PARSE_ERRORS '100');

# 建立表,資料就裝載到這張表中
create table example
        (date text, time text, open float,
         high float, low float, volume int);

# 資料並行的從 ossexample 裝載到 example 中。
insert into example select * from ossexample;

# 可以看到
# oss_fdw 能夠正確估計 oss 上的檔案大小,正確的規劃查詢計劃。
explain insert into example select * from ossexample;
                             QUERY PLAN                             
---------------------------------------------------------------------
 Insert on example  (cost=0.00..1.60 rows=6 width=92)
   ->  Foreign Scan on ossexample  (cost=0.00..1.60 rows=6 width=92)
         Foreign OssFile: osstest/example.csv.0
         Foreign OssFile Size: 728
(4 rows)

oss_fdw 使用注意
oss_fdw 開啟了 oss 到 PostgreSQL 和 PPAS 的資料通道,使用者可以把資料放到廉價的oss中,再匯入到 PostgreSQL 或 PPAS 中。

1. oss_fdw 是在 PostgreSQL FOREIGN TABLE 架構下開發的外部表格外掛程式。
2. 資料匯入的效能和 PostgreSQL 叢集的資源(CPU IO MEM MET)相關,也和 OSS 相關。
3. 為了保證資料匯入的效能 ossprotocol 中 ossendpoint 的需要匹配 PostgreSQL 雲上所在 Region。相關資訊請參考下面的連結。

id 和 key 隱藏

CREATE SERVER中的id和key資訊如果不做任何處理,那麼使用者將可以 select * from pg_foreign_server看到明文資訊,這樣將會暴露使用者的id和key。
為了對id和key隱藏,我們通過對id和key進行對稱式加密實現(不同的執行個體使用不同的秘鑰,最大限度保護使用者資訊),但是不能使用類似GP那樣,增加一個資料類型,因為會不相容老執行個體。

最終的加密後的資訊如下:

postgres=# select * from pg_foreign_server ;
  srvname  | srvowner | srvfdw | srvtype | srvversion | srvacl |                                                                              srvoptions

-----------+----------+--------+---------+------------+--------+------------------------------------------------------------------------------------------------------------------------------------
----------------------------------
 ossserver |       10 |  16390 |         |            |        | {host=oss-cn-hangzhou-zmf.aliyuncs.com,id=MD5xxxxxxxx,key=MD5xxxxxxxx,bucket=067862}

加密後的資訊將會以MD5開頭(總長度為len%8==3),這樣匯出之後再匯入不會再次加密,但是使用者不能建立MD5開頭的key和id

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.