从 OSS 装载数据到 PostgreSQL
生活随笔
收集整理的這篇文章主要介紹了
从 OSS 装载数据到 PostgreSQL
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
oss_fdw
在阿里云上,支持通過 oss_fdw 并行裝載數據到 PostgreSQL 和 PPAS 中
oss_fdw 參數
oss_fdw 和其他 fdw 的接口一樣,提供對外部數據源 oss 的數據封裝,用戶可以使用 oss_fdw 像一張表一樣讀取 oss 上的存放的文件。
和其他 fdw 一樣,oss_fdw 提供獨有的數個參數用于連接和解析 oss 上的文件數據。
和 oss 相關參數有
1. ossendpoint 參數,是內網訪問oss的地址,也叫 host2. id oss 賬號 id3. key oss 賬號 key4. bucket ossbucket,需要創建 oss 賬號后分配5. filepath oss 中帶路徑的文件名5.1 文件名包含文件路徑,但不包含 bucket5.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 指定文件的格式,目前只支持 csv2. encoding 文件中數據的編碼格式,支持常見 pg 編碼,如 utf83. parse_errors 容錯模式解析,按照行為單位,忽略文件分析過程中發生的錯誤4. delimiter制定列的分割符5. quote 指定文件的引用字符6. escape 指定文件的逃逸字符7. null 指定匹配對應字符串的列為 null例如 null 'test',即列值為 ‘test’ 的字符串為 null8. force_not_null制定一列為多列的值不是 null例 force_not_null ‘id’,即表中 id 列如果是 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.0Foreign 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
參考鏈接
總結
以上是生活随笔為你收集整理的从 OSS 装载数据到 PostgreSQL的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springmvc简述
- 下一篇: OSChina 周三乱弹 ——是不是兄弟