Spring Boot操作MaxComputer(保姆级教程)
目录
引言
一、引入依赖
二、配置文件 application.properties(信息用自己的奥)
三、实体类User.java
四、UserController
五、UserService
六、UserDao
七、UserDao.xml
八、postman 访问,成功查询数据
附件(修改和删除数据)
引言
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;