用Java代码调用MaxCompute

简介: 有什么办法把MaxCompute的作业、设置和自己的代码做无缝集成呢,MaxComput SDK就能干这个。本文就实际的工作中最常见的几个场景,做一些示例。

MaxCompute的客户端的工具odpscmd是好东西,什么都能干。但是它不方便在自己的代码做很好的集成,毕竟它是个Shell脚本。那有什么办法把MaxCompute的作业、设置和自己的代码做无缝集成呢,MaxComput SDK就能干这个。本文就实际的工作中最常见的几个场景,做一些示例。详细的使用可以在Maven上下到SDK的文档说明
其实这里面的很多写法都是文档里有的,或者在帮助文档里有写过类似的例子。这里就做算是做个整理吧。

对象操作

其实官方的SDK文档里,对这方面的介绍是最多的了,可以参考这里。这里我再针对实际场景里的比较多的创建表和分区做个例子,相信看完这些后对这方面就没有疑惑了

        String access_id = "your access id";
        String access_key = "your access key";
        String endpoint = "http://service.odps.aliyun.com/api";
        String project = "testproject";
        String tableName = "testCreate";
        String partition = "ds='20170614'";
        
        Account account = new AliyunAccount(access_id, access_key);
        Odps odps = new Odps(account);
        odps.setEndpoint(endpoint);
        odps.setDefaultProject(project);


        TableSchema schema = new TableSchema();
        schema.addColumn(new Column("col_str",OdpsType.STRING,"column string"));
        schema.addColumn(new Column("col_datetime",OdpsType.DATETIME,"column datetime"));
        schema.addColumn(new Column("col_int",OdpsType.BIGINT,"column bigint"));
        schema.addColumn(new Column("col_double",OdpsType.DOUBLE,"column double"));
        schema.addColumn(new Column("col_boolean",OdpsType.BOOLEAN,"column boolean"));
        schema.addPartitionColumn(new Column("ds",OdpsType.STRING,"partition column"));
        
        
        PartitionSpec ps= new PartitionSpec(partition);
        
        try {
            odps.tables().create(tableName, schema);
            odps.tables().get(tableName).createPartition(ps);
        } catch (OdpsException e) {
            e.printStackTrace();
        }


odps@ testproject>desc testCreate;

+------------------------------------------------------------------------------------+
| Owner: ALIYUN$cloudtecengr@aliyun.com | Project: testproject                                  |
| TableComment:                                                                      |
+------------------------------------------------------------------------------------+
| CreateTime:               2017-06-14 20:00:48                                      |
| LastDDLTime:              2017-06-14 20:00:48                                      |
| LastModifiedTime:         2017-06-14 20:00:48                                      |
+------------------------------------------------------------------------------------+
| InternalTable: YES      | Size: 0                                                  |
+------------------------------------------------------------------------------------+
| Native Columns:                                                                    |
+------------------------------------------------------------------------------------+
| Field           | Type       | Label | Comment                                     |
+------------------------------------------------------------------------------------+
| col_str         | string     |       | column string                               |
| col_datetime    | datetime   |       | column datetime                             |
| col_int         | bigint     |       | column bigint                               |
| col_double      | double     |       | column double                               |
| col_boolean     | boolean    |       | column boolean                              |
+------------------------------------------------------------------------------------+
| Partition Columns:                                                                 |
+------------------------------------------------------------------------------------+
| ds              | string     | partition column                                    |
+------------------------------------------------------------------------------------+

OK
odps@ testproject>show partitions  testCreate;

ds=20170614

OK

SQL

上文的提到的SDK文档里有个例子,可以用来提交SQL。

另外前面提到的创建表的操作,也可以用这里的SQLTask跑Create Table的SQL来实现。

说到SQL就少不了要说JDBC,目前有基于SQLTask开源做了个JDBC的实现,可以参考这里

授权

授权不能直接用SQLTask来做,不过有类似的方法

    com.aliyun.odps.security.SecurityManager securityManager = odps.projects().get().getSecurityManager();
    String res = securityManager.runQuery("grant all on table wc_in to user aliyun$xxxxxxxxx@aliyun.com;", false);

MapReduce

针对这个问题,我写了一篇文档可以参考下

Graph

图计算我们把这个功能写进了产品文档,可以参考这里。这里的ss.setLocalRun(false);如果是Ture就是本地调试,如果是false就是在云上跑作业。

Tunnel

Tunnel可以参考Tunnel SDK对应章节,本文不再展开说明。

相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
目录
相关文章
|
9月前
|
Java 开发工具
【Azure Storage Account】Java Code访问Storage Account File Share的上传和下载代码示例
本文介绍如何使用Java通过azure-storage-file-share SDK实现Azure文件共享的上传下载。包含依赖引入、客户端创建及完整示例代码,助你快速集成Azure File Share功能。
614 6
|
10月前
|
IDE Java 关系型数据库
Java 初学者学习路线(含代码示例)
本教程为Java初学者设计,涵盖基础语法、面向对象、集合、异常处理、文件操作、多线程、JDBC、Servlet及MyBatis等内容,每阶段配核心代码示例,强调动手实践,助你循序渐进掌握Java编程。
1228 3
|
10月前
|
安全 Java 应用服务中间件
Spring Boot + Java 21:内存减少 60%,启动速度提高 30% — 零代码
通过调整三个JVM和Spring Boot配置开关,无需重写代码即可显著优化Java应用性能:内存减少60%,启动速度提升30%。适用于所有在JVM上运行API的生产团队,低成本实现高效能。
1136 3
|
10月前
|
Java
java入门代码示例
本文介绍Java入门基础,包含Hello World、变量类型、条件判断、循环及方法定义等核心语法示例,帮助初学者快速掌握Java编程基本结构与逻辑。
697 0
|
9月前
|
Java 数据处理 API
为什么你的Java代码应该多用Stream?从循环到声明式的思维转变
为什么你的Java代码应该多用Stream?从循环到声明式的思维转变
400 115
|
9月前
|
安全 Java 编译器
为什么你的Java代码需要泛型?类型安全的艺术
为什么你的Java代码需要泛型?类型安全的艺术
296 98
|
9月前
|
安全 Java 容器
告别繁琐判空:Optional让你的Java代码更优雅
告别繁琐判空:Optional让你的Java代码更优雅
|
9月前
|
安全 Java 容器
告别空指针噩梦:Optional让Java代码更优雅
告别空指针噩梦:Optional让Java代码更优雅
543 94
|
9月前
|
Java 编译器 API
java最新版和java8的区别,用代码展示
java最新版和java8的区别,用代码展示
701 43

热门文章

最新文章

相关产品

  • 云原生大数据计算服务 MaxCompute