引言
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;
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论