从 OSS 装载数据到 PostgreSQL

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
简介: oss_fdw 在阿里云上,支持通过 oss_fdw 并行装载数据到 PostgreSQL 和 PPAS 中 oss_fdw 参数 oss_fdw 和其他 fdw 的接口一样,提供对外部数据源 oss 的数据封装,用户可以使用 oss_fdw 像一张表一样读取 oss 上的存放的文件。 和其

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,替换成空字符串

用例

# 创建插件
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

参考链接

  1. oss endpiint 信息
  2. [oss help 页面] [2]
  3. [PostgreSQL CREATE FOREIGN TABLE 手册] [3]
目录
相关文章
|
29天前
|
存储 关系型数据库 分布式数据库
PolarDB常见问题之PolarDB冷存数据到OSS之后恢复失败如何解决
PolarDB是阿里云推出的下一代关系型数据库,具有高性能、高可用性和弹性伸缩能力,适用于大规模数据处理场景。本汇总囊括了PolarDB使用中用户可能遭遇的一系列常见问题及解答,旨在为数据库管理员和开发者提供全面的问题指导,确保数据库平稳运行和优化使用体验。
|
1月前
|
SQL 关系型数据库 分布式数据库
在PolarDB中,行数评估是通过对表的统计数据、基数估计以及算子代价模型来进行估算的。
【2月更文挑战第14天】在PolarDB中,行数评估是通过对表的统计数据、基数估计以及算子代价模型来进行估算的。
82 1
|
2天前
|
SQL 关系型数据库 MySQL
关系型数据库插入数据的语句
使用SQL的`INSERT INTO`语句向关系型数据库的`students`表插入数据。例如,插入一个`id`为1,`name`为'张三',`age`为20的记录:`INSERT INTO students (id, name, age) VALUES (1, '张三', 20)。如果`id`自增,则可简化为`INSERT INTO students (name, age) VALUES ('张三', 20)`。
5 2
|
2天前
|
SQL 存储 Oracle
关系型数据库查询数据的语句
本文介绍了关系型数据库中的基本SQL查询语句,包括选择所有或特定列、带条件查询、排序、分组、过滤分组、表连接、限制记录数及子查询。SQL还支持窗口函数、存储过程等高级功能,是高效管理数据库的关键。建议深入学习SQL及相应数据库系统文档。
6 2
|
9天前
|
人工智能 Cloud Native 算法
数据之势丨AI时代,云原生数据库的最新发展趋势与进展
AI与云数据库的深度结合是数据库发展的必然趋势,基于AI能力的加持,云数据库未来可以实现更快速的查询和决策,帮助企业更好地利用海量数据进行业务创新和决策优化。
数据之势丨AI时代,云原生数据库的最新发展趋势与进展
|
25天前
|
存储 API 开发工具
oss数据解密与下载
阿里云OSS提供服务器端加密(SSE-OSS/SSE-KMS)功能,保证静态数据安全。下载加密对象时,OSS自动解密并返回原始内容。确保下载请求者有相应权限,尤其是使用SSE-KMS时。可通过SDK、图形化工具或编程框架集成下载,发起请求时,OSS自动处理解密,客户端接收解密后的数据。权限、下载方式选择及请求发起是关键步骤。
9 1
|
25天前
|
关系型数据库 MySQL OLAP
PolarDB +AnalyticDB Zero-ETL :免费同步数据到ADB,享受数据流通新体验
Zero-ETL是阿里云瑶池数据库提供的服务,旨在简化传统ETL流程的复杂性和成本,提高数据实时性。降低数据同步成本,允许用户快速在AnalyticDB中对PolarDB数据进行分析,降低了30%的数据接入成本,提升了60%的建仓效率。 Zero-ETL特性包括免费的PolarDB MySQL联邦分析和PolarDB-X元数据自动同步,提供一体化的事务处理和数据分析,并能整合多个数据源。用户只需简单配置即可实现数据同步和实时分析。
|
2月前
|
关系型数据库 分布式数据库 PolarDB
电子书阅读分享《PolarDB开发者大会:PolarDB在线数据实时分析加速》
电子书阅读分享《PolarDB开发者大会:PolarDB在线数据实时分析加速》
85 3
|
2月前
|
关系型数据库 分布式数据库 PolarDB
电子书阅读分享《PolarDB开发者大会:PolarDB在线数据实时分析加速》
电子书阅读分享《PolarDB开发者大会:PolarDB在线数据实时分析加速》
76 1
|
2月前
|
关系型数据库 分布式数据库 PolarDB
电子书阅读分享《PolarDB开发者大会:PolarDB在线数据实时分析加速》
电子书阅读分享《PolarDB开发者大会:PolarDB在线数据实时分析加速》
87 1