引言
maxcomputer本质上是管理dataworks 中的表,我们如何用java框架来操作maxcomputer中的表数据呢,有几种方法,今天我推荐的是maxcomputer结合spring boot ;mybatis 的操作方式,这种方法优点是很简单,不用学习新的api 数据mybatis 操作即可。
首先要在阿里云后台创建一张表,下面我用user 表测试
https://maxcompute.console.aliyun.com/cn-shanghai/sql-express

一、引入依赖
<!-- spring boot 依赖-->
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-web</artifactid>
</dependency>
<!--添加阿里云的依赖-->
<dependency>
<groupid>com.aliyun</groupid>
<artifactid>aliyun-java-sdk-core</artifactid>
<version>4.5.0</version>
</dependency>
<dependency>
<groupid>com.aliyun.odps</groupid>
<artifactid>odps-sdk-udf</artifactid>
<version>0.36.4-public</version>
</dependency>
<dependency>
<groupid>com.aliyun.odps</groupid>
<artifactid>odps-sdk-core</artifactid>
<version>0.36.4-public</version>
</dependency>
<!-- mybatis 依赖 -->
<!-- mybatis -->
<dependency>
<groupid>org.mybatis.spring.boot</groupid>
<artifactid>mybatis-spring-boot-starter</artifactid>
<version>2.0.1</version>
</dependency>
<!-- maxcompute jdbc 连接驱动 -->
<dependency>
<groupid>com.aliyun.odps</groupid>
<artifactid>odps-jdbc</artifactid>
<version>3.2.0</version>
</dependency>二、配置文件 application.properties(信息用自己的奥)
其中用户名和密码就是 accesskeyid和 accesskeysecret
spring.application.name= huixin-dataworks # ??? server.port= 8080 aliyun.accesskeyid= aliyun.accesskeysecret=n8rsiewsh6awinhfdp8shidehhrbpd aliyun.endpoint= http://service.cn-shanghai.maxcompute.aliyun.com/api aliyun.project= liingniu_2023 # maxcompute 数据源配置 spring.datasource.url=jdbc:odps:http://service.cn-shanghai.maxcompute.aliyun.com/api?project=liingniu_2023 spring.datasource.username= spring.datasource.password=n8rsiewsh6awinhfdp8shidehhrbpd spring.datasource.driver-class-name=com.aliyun.odps.jdbc.odpsdriver # mybatis 配置 mybatis.mapper-locations=classpath:mapper/*.xml
三、实体类user.java
package com.huixin.model;
public class user {
private integer id;
private string name;
public user(integer id, string name) {
this.id = id;
this.name = name;
}
public integer getid() {
return id;
}
public void setid(integer id) {
this.id = id;
}
public string getname() {
return name;
}
public void setname(string name) {
this.name = name;
}
public user() {
}
}四、usercontroller
package com.huixin.controller;
import com.huixin.model.user;
import com.huixin.service.userservice;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.web.bind.annotation.*;
import java.util.list;
@restcontroller
@requestmapping("/api")
public class usercontroller {
@autowired
private userservice userservice;
/**
* 查询数据
* @return
*/
@getmapping("/users")
public list<user> getusers() {
return userservice.selectall();
}
}五、userservice
package com.huixin.service;
import com.huixin.dao.userdao;
import com.huixin.model.user;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.stereotype.service;
import java.util.list;
@service
public class userservice {
@autowired
private userdao userdao;
public list<user> selectall(){
return userdao.getallusers();
}
}六、userdao
package com.huixin.dao;
import com.huixin.model.user;
import org.apache.ibatis.annotations.mapper;
import java.util.list;
/**
* <p>project: huixin-dataworks - userdao</p>
* <p>powered by webrx on 2025-02-27 08:41:08</p>
* <p>描述:<p>
*
* @author 简单遗忘 [814736551@qq.com]
* @version 1.0
* @since 17
*/
@mapper
public interface userdao {
list<user> getallusers();
}七、userdao.xml
<?xml version="1.0" encoding="utf-8" ?>
<!doctype mapper
public "-//mybatis.org//dtd mapper 3.0//en"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.huixin.dao.userdao">
<select id="getallusers" resulttype="com.huixin.model.user">
select id, name from user limit 10
</select>
</mapper>八、postman 访问,成功查询数据

附件(修改和删除数据)
maxcompute 是一个 分布式大数据计算平台,主要用于 批量处理,并不支持像传统数据库那样的 实时更新、删除 操作。
它的设计更多地侧重于批处理和大规模数据查询,因此,maxcompute 中并不直接支持 update 和 delete 操作。
修改
但是可以使用其他方法修改数据(这个语句只修改了 id 为3 的数据其他的不影响)
insert overwrite table user
select
id,
case
when id = 3 then '杨逍'
else name
end as name
from user;删除
方法一:分区删除
假设 user 表是按 dt 分区的,现在你想删除 dt = '20250227' 的数据。这样会删除整个分区的数据。
alter table user drop partition (dt = '20250227');
方法二:覆盖删除
如果你不使用分区或需要删除特定的数据,最常见的方法是通过 insert overwrite 覆盖数据,将不需要的数据排除。
示例:删除 id = 3 的数据
insert overwrite table user select * from user where id != 3;
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论