通過Spark SQL讀寫SQL Server資料

更新時間:
Copy as MD

AnalyticDB for MySQL支援提交Spark SQL作業,您可以通過View方式訪問自建SQL Server資料庫或ApsaraDB RDS for SQL Server資料庫。本文以ApsaraDB RDS for 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. SQL Console視窗,選擇Spark引擎和Job型資源群組。

  4. SQL Console視窗中按訪問方式輸入以下作業內容:

    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開發編輯器