Skip to main content

MaxCompute

简单说明如何对接阿里云大数据计算服务 MaxCompute

一、基础配置

编排平台通过JDBC驱动连接MaxCompute执行SQL并获取结果,需要执行账号满足以下要求:

  • 是项目空间的成员

  • 有项目空间的CreateInstance权限

  • 有目标表的Select和Download权限

  • MaxCompute提供了数据保护功能。当数据保护模式开启时,无法将数据转移到项目空间之外。2.4之前版本的JDBC无法获取result set。2.4及之后版本的JDBC可以获得不超过READ_TABLE_MAX_ROW所定义行数的数据,详情请参见项目空间操作。数据保护功能详情请参见数据保护机制

  • MaxCompute 2.0数据类型版本支持较多数据类型,例如TINYINT、SMALLINT、DATETIME、TIMESTAMP、ARRAY、MAP和STRUCT等。如果需要使用这些新类型,在执行SQL之前需要执行以下语句,打开MaxCompute 2.0数据类型开关。

    set odps.sql.type.system.odps2=true

1. 驱动包安装

驱动包开源地址:https://github.com/aliyun/aliyun-odps-jdbc

将驱动包拷贝到编排平台服务器 lib 的 ext 子目录下:

  • 对于虚机部署的编排平台,直接放到/opt/orchsym/runtime/lib/ext

  • 对于容器化部署的编排平台,需要放到上面目录挂载的出来的目录,可通过vi /etc/systemd/system/runtime.service查看挂载路径

2. 驱动基础信息

  • 连接url

    jdbc:odps:<maxcompute_endpoint>?project=<maxcompute_project_name>[&useProjectTimeZone={true|false}]
    • <maxcompute_endpoint>:MaxCompute服务所在区域的Endpoint。例如,华东1(杭州)区域的外网Endpoint为http://service.cn-hangzhou.maxcompute.aliyun.com/api。Endpoint的配置信息详情请参见Endpoint

    • <maxcompute_project_name>:MaxCompute项目空间名称

    • useProjectTimeZone:是否使用MaxCompute项目空间的时区

    • 示例:

    jdbc:odps:http://service.cn-hangzhou.maxcompute.aliyun.com/api?project=orchsym
  • 驱动类

    com.aliyun.odps.jdbc.OdpsDriver
  • 驱动包路径

    /opt/orchsym/runtime/lib/ext/odps-jdbc-3.5.5-jar-with-dependencies.jar

    需要先将第1步上传驱动配置完成

  • JDBC参数说明参考:JDBC参数配置

2. MaxCompute基础信息

  • endpoint:MaxCompute服务所在区域的Endpoint
  • project_name:MaxCompute项目空间名称
  • accessId:创建项目空间的AccessKey ID
  • accessKey:创建项目空间的AccessKey ID对应的AccessKey Secret

以上为MaxCompute需要提供的基础信息

二、MaxCompute增删改查

1. 创建表、插入数据

组件通过执行对应DDL语句操作MaxCompute。

CREATE TABLE personal_info (
id BIGINT,
name STRING,
age INT,
gender STRING,
address STRING
);
INSERT INTO personal_info VALUES
(1, 'Alice', 25, 'Female', '123 Main Street'),
(2, 'Bob', 30, 'Male', '456 Elm Street'),
(3, 'Charlie', 35, 'Male', '789 Oak Street'),
(4, 'David', 28, 'Male', '321 Pine Street'),
(5, 'Emma', 27, 'Female', '654 Maple Street'),
(6, 'Frank', 32, 'Male', '987 Cedar Street'),
(7, 'Grace', 29, 'Female', '135 Birch Street'),
(8, 'Henry', 31, 'Male', '246 Walnut Street'),
(9, 'Ivy', 26, 'Female', '579 Spruce Street'),
(10, 'Jack', 33, 'Male', '864 Fir Street');

实现步骤

  • ExecuteSQL组件配置要执行的SQL语句,然后创建DBCPConnectionPool控制器服务(第一步基础配置已经完成的情况下)
  • 特别的:**最大等待时间字段**,需要设置为一个大于0的值,该字段表示查询超时时间

  • 数据库连接的控制器服务-DBCPConnectionPool中,配置MaxCompute相关信息,配置完成后,启动 DBCPConnectionPool
  • 正常启动 DBCPConnectionPool后,即可启动 ExecuteSQL 组件,完成MaxCompute调用。

3. JSON数据写入MaxCompute表

假设有以下JSON数据:

[
{
"id": 11,
"name": "Kate",
"age": 24,
"gender": "Female",
"address": "111 Oak Street"
},
{
"id": 12,
"name": "Liam",
"age": 29,
"gender": "Male",
"address": "222 Elm Street"
},
{
"id": 13,
"name": "Mia",
"age": 26,
"gender": "Female",
"address": "333 Maple Street"
},
{
"id": 14,
"name": "Noah",
"age": 31,
"gender": "Male",
"address": "444 Pine Street"
},
{
"id": 15,
"name": "Olivia",
"age": 28,
"gender": "Female",
"address": "555 Cedar Street"
}
]

如果想将该JSON数据快速插入前面创建的personal_info表中,可以用ConvertJSONToSQL组件+ExecuteSQL组件实现,ConvertJSONToSQL配置如下:

  • ConvertJSONToSQL可以将JSON数据转换成insertupdatedelete等语句

  • ConvertJSONToSQL转换后的SQL语句在流文件内容中,不会带实际值,主要是为了避免SQL注入漏洞

    INSERT INTO personal_info (id, name, age, gender, address) VALUES (?, ?, ?, ?, ?)
  • ExecuteSQL组件接收到ConvertJSONToSQL转换后的流文件,数据库查询属性需要配置为空,如果该属性不为空会忽略输入的流文件

三、流程模板

下载模板