使用JDBC编程访问ODPS

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介:

ODPS 提供了自己的 Java SDK 作为编程接口。但是对于大多数来自传统关系数据库的用户来说,为了完成一些简单任务再学习一套 SDK,性价比颇低。odps-jdbc 可以较好的解决这个问题。通过 odps-jdbc 可以轻松完成类似执行 select 语句,并获得结果集这样的任务。
创建任意 Java 项目,从 maven 添加 odps-jdbc 作为依赖(位于 maven 主仓-http://search.maven.org/#artifactdetails%7Ccom.aliyun.odps%7Codps-jdbc%7C1.0-public%7Cjar):

<dependency>
<groupId>com.aliyun.odps</groupId>
<artifactId>odps-jdbc</artifactId>
<version>1.0-public</version>
</dependency>

参考如下示例代码,包含了删表、建表、获取表 meta、执行 insert、执行 select 以及遍历结果集等常见操作:

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class Main {

private static String driverName = “com.aliyun.odps.jdbc.OdpsDriver”;

public static void main(String[] args) throws SQLException {
try {
Class.forName(driverName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
System.exit(1);
}

Properties config = new Properties();
config.put(“access_id”, “your_access_id”);
config.put(“access_key”, “your_access_key”);
config.put(“project_name”, “your_project”);
config.put(“charset”, “utf-8″);
Connection
conn = DriverManager.getConnection(“jdbc:odps:https://service.odps.aliyun.com/api”, config);
ResultSet rs;

// create a table
Statement stmt = conn.createStatement();
String tableName = “jdbc_test”;
stmt.execute(“drop table if exists ” + tableName);
stmt.execute(“create table ” + tableName + ” (key int, value string)”);

// get meta data
DatabaseMetaData metaData = conn.getMetaData();
System.out.println(“product = ” + metaData.getDatabaseProductName());
System.out.println(“jdbc version = ” + metaData.getDriverMajorVersion() + “, ”
+ metaData.getDriverMinorVersion());
rs = metaData.getTables(null, null, tableName, null);
while (rs.next()) {
String name = rs.getString(3);
System.out.println(“inspecting table: ” + name);
ResultSet rs2 = metaData.getColumns(null, null, name, null);
while (rs2.next()) {
System.out.println(rs2.getString(“COLUMN_NAME”) + “\t”
+ rs2.getString(“TYPE_NAME”) + “(” + rs2.getInt(“DATA_TYPE”) + “)”);
}
}

// run sql
String sql;

// insert a record
sql = String.format(“insert into table %s select 24 key, ‘hours’ value from (select count(1) from %s) a”, tableName, tableName);
System.out.println(“Running: ” + sql);
int count = stmt.executeUpdate(sql);
System.out.println(“updated records: ” + count);

// select * query
sql = “select * from ” + tableName;
System.out.println(“Running: ” + sql);
rs = stmt.executeQuery(sql);
while (rs.next()) {
System.out.println(String.valueOf(rs.getInt(1)) + “\t” + rs.getString(2));
}

}

}

运行可以获得类似如下结果:

product = ODPS JDBC
jdbc version = 1, 0
inspecting table: jdbc_test
key BIGINT(-5)
value   STRING(12)
Running: insert into table jdbc_test select 24 key, ‘hours’ value from (select count(1) from jdbc_test) a
updated records: 1
Running: select * from jdbc_test
24  hours

这里列一下使用 odps-jdbc 可能要注意的事项:

  • 目前 odps-jdbc 的实现,类似 select 这样的查询会在 odps 中生成临时表,表名为 jdbc_temp_tbl_$UUID。这些临时表会在 Statement.close 和 Connection.close 的时候被删除。如果忘记了调用 close,这些表会遗留在 ODPS 中,默认生命周期是 3 天。
  • odps-jdbc 虽然可以完成 insert into 动作,但并不适合如传统关系数据库那样密集执行每次 insert 一条记录的场景。每次 insert into 会启动一个 instance,执行时间可能需要数秒。
  • 并不是所有 odpscmd 命令都被 Statement 支持。Statement 只接受 sql 语句,例如 set、grant 等都不是 sql。
  • 不支持 select null。目前 odps 无法支持 create table … as select …, null, …,因此在 Statement 中写带有 null 的 select 会出错。

我们的目的是使 ODPS 更加开放、灵活和易用。目前 odps-jdbc 已经完成集团的开源流程,托管在 github-https://github.com/aliyun/aliyun-odps-jdbc 上。欢迎各位开源热心人士积极反馈,贡献代码。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
28天前
|
Java 大数据 数据库连接
大数据-163 Apache Kylin 全量增量Cube的构建 手动触发合并 JDBC 操作 Scala
大数据-163 Apache Kylin 全量增量Cube的构建 手动触发合并 JDBC 操作 Scala
27 2
大数据-163 Apache Kylin 全量增量Cube的构建 手动触发合并 JDBC 操作 Scala
|
29天前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
30 0
|
3月前
|
Java 数据库连接 网络安全
JDBC数据库编程(java实训报告)
这篇文章是关于JDBC数据库编程的实训报告,涵盖了实验要求、实验环境、实验内容和总结。文中详细介绍了如何使用Java JDBC技术连接数据库,并进行增删改查等基本操作。实验内容包括建立数据库连接、查询、添加、删除和修改数据,每个部分都提供了相应的Java代码示例和操作测试结果截图。作者在总结中分享了在实验过程中遇到的问题和解决方案,以及对Java与数据库连接操作的掌握情况。
JDBC数据库编程(java实训报告)
|
4月前
|
分布式计算 DataWorks 数据处理
MaxCompute操作报错合集之UDF访问OSS,配置白名单后出现报错,是什么原因
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
4月前
|
分布式计算 大数据 数据挖掘
MaxCompute产品使用合集之如何解决MC通过外部表方式访问Hologres时,数据量达到3000万条左右导致查询速度慢
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
4月前
|
SQL Java 关系型数据库
Java中的JDBC编程详解
Java中的JDBC编程详解
|
4月前
|
SQL Java 关系型数据库
Java中的JDBC编程详解
Java中的JDBC编程详解
|
5月前
|
分布式计算 DataWorks MaxCompute
MaxCompute操作报错合集之在Spark访问OSS时出现证书错误的问题,该如何解决
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
5月前
|
SQL XML Java
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
70 3
|
5月前
|
机器学习/深度学习 分布式计算 DataWorks
MaxCompute产品使用问题之如何在UDF函数中访问外网
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。

热门文章

最新文章

  • 1
    DataWorks操作报错合集之DataWorks任务异常 报错: GET_GROUP_SLOT_EXCEPTION 该怎么处理
    97
  • 2
    DataWorks操作报错合集之DataWorksUDF 报错:evaluate for user defined function xxx cannot be loaded from any resources,该怎么处理
    101
  • 3
    DataWorks操作报错合集之在DataWorks中,任务流在调度时间到达时停止运行,是什么原因导致的
    104
  • 4
    DataWorks操作报错合集之DataWorks ODPS数据同步后,timesramp遇到时区问题,解决方法是什么
    86
  • 5
    DataWorks操作报错合集之DataWorks配置参数在开发环境进行调度,参数解析不出来,收到了 "Table does not exist" 的错误,该怎么处理
    84
  • 6
    DataWorks操作报错合集之DataWorks中udf开发完后,本地和在MaxCompute的工作区可以执行函数查询,但是在datawork里报错FAILED: ODPS-0130071:[2,5],是什么原因
    94
  • 7
    DataWorks操作报错合集之DataWorks提交失败: 提交节点的源码内容到TSP(代码库)失败:"skynet_packageid is null,该怎么解决
    106
  • 8
    DataWorks操作报错合集之DataWorks在同步mysql时报错Code:[Framework-02],mysql里面有个json类型字段,是什么原因导致的
    141
  • 9
    DataWorks操作报错合集之DataWorks集成实例绑定到同一个vpc下面,也添加了RDS的IP白名单报错:数据源配置有误,请检查,该怎么处理
    83
  • 10
    DataWorks操作报错合集之在 DataWorks 中运行了一个 Hologres 表的任务并完成了执行,但是在 Hologres 表中没有看到数据,该怎么解决
    108