通过Spark SQL读写SQL Server数据

更新时间:

云原生数据仓库 AnalyticDB MySQL 版支持提交Spark SQL作业,您可以通过View方式访问自建SQL Server数据库或云数据库 RDS SQL Server 版数据库。本文以云数据库 RDS SQL Server 版为例,介绍如何通过Spark SQL访问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驱动程序

  1. 下载RDS SQL Server驱动程序

  2. 解压下载的驱动程序压缩包,将jars文件里后缀为jre8.jarJar上传至OSS

步骤三:提交Spark SQL作业

  1. 登录云原生数据仓库AnalyticDB MySQL控制台,在左上角选择集群所在地域。在左侧导航栏,单击集群列表,在企业版、基础版或湖仓版页签下,单击目标集群ID。

  2. 在左侧导航栏,单击作业开发 > SQL开发

  3. SQLConsole窗口,选择Spark引擎和Job型资源组。

  4. 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配置为具体访问的数据库名称,trustServerCertificateencrypt均配置为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数据库账号的密码。

  5. 单击执行SQL

  6. Spark作业执行成功后,您可以在Spark Jar开发页面应用列表页签中的日志查看表数据。详情请参见Spark开发编辑器