推特 阿里云技术文档正文

TSQL JDBC支持_TSQL 开发指南_时序数据库 TSDB_时序时空数据库TSDB

admin 阿里云技术文档 2020-02-11 186 0
阿里云服务器优惠

TSQL JDBC支持

阿里云时序数据库TSDB的SQL查询引擎支持JDBC协议,用户可以使用常见的支持JDBC访问方式的客户端来访问TSDB,或者也可以在自己的Java应用程序里,通过JDBC协议,使用TSQL查询TSDB时序数据。

用户可以在自己的实例控制台上查看到JDBC访问信息(需要TSDB实例的版本满足要求):TSQL JDBC支持_TSQL 开发指南_时序数据库 TSDB_时序时空数据库TSDB 阿里云技术文档 第1张

接下来会简要介绍如何在Java应用程序里,如何通过JDBC协议进行TSQL查询获取TSDB数据库的数据。

一. JDBC连接示例

1. Driver依赖引入

运行时要求:

  • Java 1.8 Runtime
  • 配置实例JBDC访问, 获取JDBC URL
  • 配置实例网络黑白名单, 确保应用客户端可以正常访问实例.

TSQL的JDBC driver的依赖已经发布到Maven仓库, 这里以maven来管理项目(tsql_jdbc_app)为例,把下面的内容加入的pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>com.alibaba.tsdb.tsql</groupId>
  7. <artifactId>tsql_jdbc_app</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. <dependencies>
  10. <!-- https://mvnrepository.com/artifact/org.apache.drill.exec/drill-jdbc -->
  11. <dependency>
  12. <groupId>org.apache.drill.exec</groupId>
  13. <artifactId>drill-jdbc-all</artifactId>
  14. <version>1.15.0</version>
  15. <exclusions>
  16. <exclusion>
  17. <groupId>org.slf4j</groupId>
  18. <artifactId>log4j-over-slf4j</artifactId>
  19. </exclusion>
  20. </exclusions>
  21. </dependency>
  22. </dependencies>
  23. <build>
  24. <plugins>
  25. <plugin>
  26. <artifactId>maven-assembly-plugin</artifactId>
  27. <configuration>
  28. <archive>
  29. <manifest>
  30. <mainClass>com.alibaba.tsdb.tsql.TsqlJdbcSampleApp</mainClass>
  31. </manifest>
  32. </archive>
  33. <descriptorRefs>
  34. <descriptorRef>jar-with-dependencies</descriptorRef>
  35. </descriptorRefs>
  36. </configuration>
  37. <executions>
  38. <execution>
  39. <id>make-assembly</id> <!-- this is used for inheritance merges -->
  40. <phase>package</phase> <!-- bind to the packaging phase -->
  41. <goals>
  42. <goal>single</goal>
  43. </goals>
  44. </execution>
  45. </executions>
  46. </plugin>
  47. </plugins>
  48. </build>
  49. </project>

注意上面的内容,其目的是我们可以获得一个包括把所有依赖jar,以及我们的应用程序的.class合成一个jar包。

2. JDBC 连接示例代码

请注意,这仅仅是示例,在你的应用中,你需要修改相应的

  • host: 你在第一步中申请的TSDB实例的hostname或ip地址
  • port: 在阿里云TSDB时序数据库上,缺省的JDBC端口是3306
  • sql: 你所需要执行的TSQL查询语句

在Java应用项目下,创建一个package com.alibaba.tsdb.tsql, 并创建一个Java 源文件TsqlJdbcSampleApp.TSQL JDBC支持_TSQL 开发指南_时序数据库 TSDB_时序时空数据库TSDB 阿里云技术文档 第2张

完整代码:

  1. package com.alibaba.tsdb.tsql;
  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.ResultSet;
  5. import java.sql.SQLException;
  6. import java.sql.Statement;
  7. public class TsqlJdbcSampleApp {
  8. public static void main(String[] args) throws Exception {
  9. Connection connection = null;
  10. Statement stmt = null;
  11. try {
  12. // step 1: Register JDBC driver
  13. Class.forName("org.apache.drill.jdbc.Driver");
  14. // hostname or address of TSDB instance.
  15. String host = "ts-uf64t3199j58j8251.tsql.hitsdb.rds.aliyuncs.com";
  16. // port for TSQL JDBC service
  17. int port = 3306;
  18. String jdbcUrl = String.format("jdbc:drill:drillbit=%s:%s", host, port);
  19. // step 2: Open connection
  20. System.out.println("Connecting to database @ " + jdbcUrl + " ...");
  21. connection = DriverManager.getConnection(jdbcUrl);
  22. // step 3: Create a statement
  23. System.out.println("Creating statement ...");
  24. stmt = connection.createStatement();
  25. // step 4: Execute a query using the statement.
  26. String sql = "select hostname, `timestamp`, `value` " +
  27. "from tsdb.`cpu.usage_system` " +
  28. "where `timestamp` between '2019-03-01' and '2019-03-01 00:05:00'";
  29. ResultSet rs = stmt.executeQuery(sql);
  30. // step 5: Extract data from ResultSet.
  31. int row = 0;
  32. System.out.println("hostname\ttimestamp\tvalue");
  33. System.out.println("-----------------------------------------------------");
  34. while (rs.next()) {
  35. row++;
  36. System.out.println(rs.getString("hostname") + "\t" + rs.getTimestamp("timestamp") + "\t" +rs.getDouble("value"));
  37. }
  38. System.out.println("-----------------------------------------------------");
  39. System.out.println( row + "rows returned");
  40. } catch(SQLException se){
  41. //Handle errors for JDBC
  42. se.printStackTrace();
  43. }catch(Exception e){
  44. //Handle errors for Class.forName
  45. e.printStackTrace();
  46. }finally{
  47. //finally block used to close resources
  48. try{
  49. if(stmt!=null)
  50. stmt.close();
  51. }catch(SQLException se2){
  52. }// nothing we can do
  53. try{
  54. if(connection!=null)
  55. connection.close();
  56. }catch(SQLException se){
  57. se.printStackTrace();
  58. }//end finally try
  59. }//end try
  60. System.out.println("Goodbye!");
  61. }
  62. }

3. 编译与执行

在项目根目录下,执行下面的maven命令 maven clean install

执行完成后, 你将在项目目录/targets下获得一个可执行Jar文件: tsql_jdbc_app-1.0-SNAPSHOT-jar-with-dependencies.jar

执行该应用程序,

java -jar target/tsql_jdbc_app-1.0-SNAPSHOT-jar-with-dependencies.jar

下图显示了我们刚才讲了的TSQL JDBC应用程序的部分查询结果。TSQL JDBC支持_TSQL 开发指南_时序数据库 TSDB_时序时空数据库TSDB 阿里云技术文档 第3张

小结:通过以上的步骤,你可以使用JDBC协议,编写Java应用程序,进行时序数据查询。

二. JDBC协议使用限制

TSQL的JDBC协议存在功能限制。在使用TSQL JDBC协议前请对照检查,具体限制和说明如下:

  1. TSQL 目前仅支持时序数据查询和时序元数据查询,不支持数据写入,修改和删除
  2. TSDB没有事务(Transaction)的支持。

具体JDBC API的限制说明如下:

Interfae Method TSDB JDBC支持情况
Connection setAutoCommit(boolean) 仅允许true作为传入参数
Connection getAutoCommit() 返回true
Connection commit() 调用会引发异常: SQLFeatureNotSupportedException
Connection rollback() 调用会引发异常: SQLFeatureNotSupportedException
Connection setTransactionIsolation(int level) 仅允许TRANSACTION_NONE
Connection getTransactionIsolation() 仅允许TRANSACTION_NONE
Connection setSavePoint() 调用会引发异常 SQLFeatureNotSupportedException
Connection setSavePoint(String name) 调用会引发异常 SQLFeatureNotSupportedException
Connection rollback(Savepoint savepoint) 调用会引发异常 SQLFeatureNotSupportedException
Connection releaseSavePoint(Savepoint savepoint) 调用会引发异常 SQLFeatureNotSupportedException
Connection setNetworkTimeout() 调用会引发异常 SQLFeatureNotSupportedException
Connection getNetworkTimeout() 调用会引发异常 SQLFeatureNotSupportedException
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

评论

-----