通过Spark SQL读写RDS PostgreSQL数据

更新时间:

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

  1. 在官方网站下载适配RDS for PostgreSQL版本的驱动程序。下载地址,请参见 postgresql

    本文以postgresql-42.7.7.jar包为例。

  2. RDS for PostgreSQL驱动程序上传至OSS

步骤三:提交Spark SQL作业

  1. 登录云原生数据仓库AnalyticDB MySQL控制台,在左上角选择集群所在地域。在左侧导航栏,单击集群列表,然后单击目标集群ID。

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

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

  4. 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数据库账号的密码。

  5. 单击执行SQL

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