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. 驱动包安装
将驱动包拷贝到编排平台服务器 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数据转换成insert
、update
、delete
等语句ConvertJSONToSQL
转换后的SQL语句在流文件内容中,不会带实际值,主要是为了避免SQL注入漏洞INSERT INTO personal_info (id, name, age, gender, address) VALUES (?, ?, ?, ?, ?)
ExecuteSQL
组件接收到ConvertJSONToSQL
转换后的流文件,数据库查询属性需要配置为空,如果该属性不为空会忽略输入的流文件