日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

从 OSS 装载数据到 PostgreSQL

發(fā)布時(shí)間:2025/7/14 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从 OSS 装载数据到 PostgreSQL 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

oss_fdw

在阿里云上,支持通過(guò) oss_fdw 并行裝載數(shù)據(jù)到 PostgreSQL 和 PPAS 中

oss_fdw 參數(shù)

oss_fdw 和其他 fdw 的接口一樣,提供對(duì)外部數(shù)據(jù)源 oss 的數(shù)據(jù)封裝,用戶可以使用 oss_fdw 像一張表一樣讀取 oss 上的存放的文件。
和其他 fdw 一樣,oss_fdw 提供獨(dú)有的數(shù)個(gè)參數(shù)用于連接和解析 oss 上的文件數(shù)據(jù)。

和 oss 相關(guān)參數(shù)有

1. ossendpoint 參數(shù),是內(nèi)網(wǎng)訪問(wèn)oss的地址,也叫 host2. id oss 賬號(hào) id3. key oss 賬號(hào) key4. bucket ossbucket,需要?jiǎng)?chuàng)建 oss 賬號(hào)后分配5. filepath oss 中帶路徑的文件名5.1 文件名包含文件路徑,但不包含 bucket5.2 該參數(shù)匹配 oss 對(duì)應(yīng)路徑上的多個(gè)文件,支持將他們裝載到數(shù)據(jù)庫(kù)5.3 文件命名為 filepath 和 filepath.x 支持被導(dǎo)入到數(shù)據(jù)庫(kù),x 要求從 1 開(kāi)始,且是連續(xù)的5.4 例 filepath filepath.1 filepath.2 filepath.3 filepath.5 前4個(gè)文件會(huì)被匹配和導(dǎo)入,但是 filepath.5 不會(huì)。6. dir oss 中的虛擬文件目錄6.1 dir 需要以 / 結(jié)尾6.2 dir 制定的虛擬文件目錄中的所有文件(不包含子文件夾和子文件夾下的文件)都會(huì)被匹配和導(dǎo)入到數(shù)據(jù)庫(kù)。

需要注意

1. 前4個(gè)參數(shù) ossendpoint id key bucket 放在server對(duì)象中 2. filepath 和 dir 需要在 FDW 的 OPTIONS 參數(shù)參數(shù)中指定 3. filepath 和 dir 必須指定兩個(gè)參數(shù)之一,且不能同時(shí)指定 4. 各參數(shù)的值使用‘’引起來(lái),不能包括無(wú)用的空格

其他參數(shù)

1. format 指定文件的格式,目前只支持 csv2. encoding 文件中數(shù)據(jù)的編碼格式,支持常見(jiàn) pg 編碼,如 utf83. parse_errors 容錯(cuò)模式解析,按照行為單位,忽略文件分析過(guò)程中發(fā)生的錯(cuò)誤4. delimiter制定列的分割符5. quote 指定文件的引用字符6. escape 指定文件的逃逸字符7. null 指定匹配對(duì)應(yīng)字符串的列為 null例如 null 'test',即列值為 ‘test’ 的字符串為 null8. force_not_null制定一列為多列的值不是 null例 force_not_null ‘id’,即表中 id 列如果是 null,替換成空字符串

用例

# 創(chuàng)建插件 create extension oss_fdw;# 創(chuàng)建 server CREATE SERVER ossserver FOREIGN DATA WRAPPER oss_fdw OPTIONS (host 'oss-cn-hangzhou-zmf.aliyuncs.com' , id 'xxx', key 'xxx',bucket 'mybucket');# 創(chuàng)建 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');# 創(chuàng)建表,數(shù)據(jù)就裝載到這張表中 create table example(date text, time text, open float,high float, low float, volume int);# 數(shù)據(jù)并行的從 ossexample 裝載到 example 中。 insert into example select * from ossexample;# 可以看到 # oss_fdw 能夠正確估計(jì) oss 上的文件大小,正確的規(guī)劃查詢計(jì)劃。 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 打開(kāi)了 oss 到 PostgreSQL 和 PPAS 的數(shù)據(jù)通道,用戶可以把數(shù)據(jù)放到廉價(jià)的oss中,再導(dǎo)入到 PostgreSQL 或 PPAS 中。

1. oss_fdw 是在 PostgreSQL FOREIGN TABLE 框架下開(kāi)發(fā)的外部表插件。 2. 數(shù)據(jù)導(dǎo)入的性能和 PostgreSQL 集群的資源(CPU IO MEM MET)相關(guān),也和 OSS 相關(guān)。 3. 為了保證數(shù)據(jù)導(dǎo)入的性能 ossprotocol 中 ossendpoint 的需要匹配 PostgreSQL 云上所在 Region。相關(guān)信息請(qǐng)參考下面的鏈接。

id 和 key 隱藏

CREATE SERVER中的id和key信息如果不做任何處理,那么用戶將可以 select * from pg_foreign_server看到明文信息,這樣將會(huì)暴露用戶的id和key。
為了對(duì)id和key隱藏,我們通過(guò)對(duì)id和key進(jìn)行對(duì)稱(chēng)加密實(shí)現(xiàn)(不同的實(shí)例使用不同的秘鑰,最大限度保護(hù)用戶信息),但是不能使用類(lèi)似GP那樣,增加一個(gè)數(shù)據(jù)類(lèi)型,因?yàn)闀?huì)不兼容老實(shí)例。

最終的加密后的信息如下:

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}

加密后的信息將會(huì)以MD5開(kāi)頭(總長(zhǎng)度為len%8==3),這樣導(dǎo)出之后再導(dǎo)入不會(huì)再次加密,但是用戶不能創(chuàng)建MD5開(kāi)頭的key和id

參考鏈接

  • oss endpiint 信息
  • [oss help 頁(yè)面] [2]
  • [PostgreSQL CREATE FOREIGN TABLE 手冊(cè)] [3]
  • 《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結(jié)

    以上是生活随笔為你收集整理的从 OSS 装载数据到 PostgreSQL的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。