通过Spark SQL读写SQL Server数据
云原生数据仓库 AnalyticDB MySQL 版支持提交Spark SQL作业,您可以通过View方式访问自建SQL Server数据库或云数据库 RDS SQL Server 版数据库。本文以云数据库 RDS SQL Server 版为例,介绍如何通过Spark SQL访问SQL Server数据。
前提条件
AnalyticDB for MySQL集群的产品系列为企业版、基础版或湖仓版。
已在AnalyticDB for MySQL集群中创建Job型资源组。
已创建AnalyticDB for MySQL集群的数据库账号。
如果是通过阿里云账号访问,只需创建高权限账号。
如果是通过RAM用户访问,需要创建高权限账号和普通账号并且将RAM用户绑定到普通账号上。
AnalyticDB for MySQL集群与RDS SQL Server实例所属同一VPC。
已为RDS SQL Server实例添加安全组,且安全组规则的入方向与出方向放行RDS SQL Server端口的访问请求。
已将RDS SQL Server实例所属交换机的网段加入至RDS SQL Server白名单中。
步骤一:数据准备
在RDS SQL Server中创建数据库和表,并插入数据。示例语句如下:
CREATE DATABASE db;
CREATE TABLE test (
id INT NULL,
first_name NVARCHAR(32) NULL,
last_name NVARCHAR(32) NULL,
age INT NULL
);
INSERT INTO test VALUES(1,'a','b',5);
INSERT INTO test VALUES(2,'c','d',6);
INSERT INTO test VALUES(3,'e','f',7);
步骤二:下载并上传RDS SQL Server驱动程序
解压下载的驱动程序压缩包,将jars文件里后缀为jre8.jar的Jar包上传至OSS。
步骤三:提交Spark SQL作业
登录云原生数据仓库AnalyticDB MySQL控制台,在左上角选择集群所在地域。在左侧导航栏,单击集群列表,在企业版、基础版或湖仓版页签下,单击目标集群ID。
在左侧导航栏,单击
。在SQLConsole窗口,选择Spark引擎和Job型资源组。
在SQLConsole窗口中按访问方式输入以下作业内容:
ADD jar oss://testBucketName/mssql-jdbc-12.8.1.jre8.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:mysql://rm-t4nn744j34****.mssql.singapore.rds.aliyuncs.com:1433;databaseName=db;trustServerCertificate=true;encrypt=true;>', driver 'com.microsoft.sqlserver.jdbc.SQLServerDriver', dbtable '<tableName>', user '<user>', password '<password>' ); INSERT INTO table_tmp VALUES(4,'e','f',8); SELECT * FROM table_tmp;
参数说明:
参数
是否必填
说明
add jar
是
RDS SQL Server驱动程序所在的OSS路径。
本文示例为mssql-jdbc-12.8.1.jre8.jar包所在的OSS路径。
spark.adb.eni.enabled
是
开启ENI访问。
访问数据时,需将
spark.adb.eni.enabled
参数设置为true。spark.adb.eni.vswitchId
是
交换机ID。在RDS SQL Server实例的数据库连接页面,将鼠标移动至VPC处,获取交换机ID。
spark.adb.eni.securityGroupId
是
RDS SQL Server实例中添加的安全组ID。如未添加安全组,请参见设置安全组规则。
USING org.apache.spark.sql.jdbc
是
参数取值固定为
USING org.apache.spark.sql.jdbc
。options
是
url:RDS SQL Server实例的内网地址和端口。格式为:
jdbc:sqlserver://rm-t4nn744j34****.mssql.singapore.rds.aliyuncs.com:1433;databaseName=db;trustServerCertificate=true;encrypt=true;
。其中databaseName配置为具体访问的数据库名称,trustServerCertificate
和encrypt
均配置为true
。driver:参数取值固定为
com.microsoft.sqlserver.jdbc.SQLServerDriver
。dbtable:RDS SQL Server的表名。格式为
db_name.table_name
。本文以db.test为例。user:RDS SQL Server数据库的账号。
password:RDS SQL Server数据库账号的密码。
单击执行SQL。
Spark作业执行成功后,您可以在Spark Jar开发页面应用列表页签中的日志查看表数据。详情请参见Spark开发编辑器。