目錄
引言
一、引入依賴
二、配置文件?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 {@Autowiredprivate 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 {@Autowiredprivate 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 mapperPUBLIC "-//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
SELECTid,CASEWHEN id = 3 THEN '楊逍'ELSE nameEND 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;