通过Spark SQL读写RDS PostgreSQL数据
云原生数据仓库 AnalyticDB MySQL 版支持提交Spark SQL作业,您可以通过View方式访问自建PostgreSQL数据库或云数据库 RDS PostgreSQL 版数据库。本文以RDS for PostgreSQL为例,介绍如何通过Spark SQL读写RDS for PostgreSQL数据。
前提条件
AnalyticDB for MySQL集群的产品系列为企业版、基础版或湖仓版。
已在AnalyticDB for MySQL集群中创建Job型资源组。
已创建AnalyticDB for MySQL集群的数据库账号。
如果是通过阿里云账号访问,只需创建高权限账号。
如果是通过RAM用户访问,需要创建高权限账号和普通账号并且将RAM用户绑定到普通账号上。
已创建RDS for PostgreSQL实例,且与AnalyticDB for MySQL所属同一VPC。
已为RDS for PostgreSQL实例创建数据库账号。
已为RDS for PostgreSQL实例设置安全组,且安全组规则的入方向与出方向放行RDS for PostgreSQL端口的访问请求。
已将RDS for PostgreSQL实例所属交换机的网段加入至RDS for PostgreSQL白名单。
步骤一:数据准备
在RDS for PostgreSQL中创建schemademo
和表tbl
,并插入数据。示例语句如下:
CREATE SCHEMA demo;
CREATE TABLE tbl (
id INTEGER,
first_name VARCHAR(32),
laster_name VARCHAR(32),
age INTEGER
);
INSERT INTO tbl VALUES(1,'a','b',5);
INSERT INTO tbl VALUES(2,'c','d',6);
INSERT INTO tbl VALUES(3,'e','f',7);
步骤二:下载并上传RDS for PostgreSQL驱动程序
在官方网站下载适配RDS for PostgreSQL版本的驱动程序。下载地址,请参见 postgresql。
本文以postgresql-42.7.7.jar包为例。
将RDS for PostgreSQL驱动程序上传至OSS。
步骤三:提交Spark SQL作业
登录云原生数据仓库AnalyticDB MySQL控制台,在左上角选择集群所在地域。在左侧导航栏,单击集群列表,然后单击目标集群ID。
在左侧导航栏,单击 。
在SQLConsole窗口,选择Spark引擎和Job型资源组。
在SQLConsole窗口中输入以下作业内容:
ADD jar oss://testBucketName/postgresql-42.7.7.jar; SET spark.adb.eni.enabled=true; SET spark.adb.eni.vswitchId=vsw-bp1sxxsodv28ey5dl****; SET spark.adb.eni.securityGroupId=sg-bp19mr685pmg4ihc****; CREATE TEMPORARY VIEW table_tmp USING org.apache.spark.sql.jdbc OPTIONS ( url 'jdbc:postgresql://pgm-t4n37****.pgsql.singapore.rds.aliyuncs.com:5432/test', driver 'org.postgresql.Driver', dbtable 'demo.tbl', user 'user', password 'password****' ); INSERT INTO table_tmp VALUES(4,'e','f',8); SELECT * FROM table_tmp;
参数说明:
参数
说明
ADD jar
RDS for PostgreSQL驱动程序所在的OSS路径。
本文示例为postgresql-42.7.7.jar包所在的OSS路径。
spark.adb.eni.enabled
开启ENI访问。
访问数据时,需将
spark.adb.eni.enabled
参数设置为true。spark.adb.eni.vswitchId
RDS for PostgreSQL实例的交换机ID。
在RDS for PostgreSQL实例的数据库连接页面,将鼠标移动至VPC处,获取交换机ID。
spark.adb.eni.securityGroupId
RDS for PostgreSQL实例中添加的安全组ID。
在RDS for PostgreSQL实例的白名单与安全组页面,单击安全组页签,获取安全组ID。
table_tmp
视图名称。本文以table_tmp为例。
USING org.apache.spark.sql.jdbc
参数取值固定为
USING org.apache.spark.sql.jdbc
。OPTIONS
url:RDS for PostgreSQL实例的链接地址、端口及数据库名称。格式为:
jdbc:postgresql://pgm-t4n37****.pgsql.singapore.rds.aliyuncs.com:5432/db_name
。driver :参数取值固定为
org.postgresql.Driver
。dbtable:RDS for PostgreSQL的表名。格式为
schema_name.table_name
。本文以demo.tbl
为例。user:RDS for PostgreSQL数据库的账号。
password:RDS for PostgreSQL数据库账号的密码。
单击执行SQL。
Spark作业执行成功后,您可以在Spark Jar开发页面应用列表页签中的日志查看表数据。详情请参见Spark开发编辑器。