菜单

使用 JDBC 进行数据访问

本文档所描述的内容属于神策分析的高级使用功能,涉及较多技术细节,适用于对相关功能有经验的用户参考。如果对文档内容有疑惑,请咨询神策值班同学获取一对一的协助。

概述

神策系统提供了直接使用 JDBC 方式进行数据查询的能力,该方式适用于代码中集成使用 SQL 查询神策系统表数据,或使用支持 JDBC 的 SQL IDE 工具对神策数据表进行查询。

 

使用场景

  • 数据量:推荐返回小于 1000 万行数据且小于 50 列的查询
  • 目前仅限数据查询场景

 

使用方法

获取 JDBC 地址和认证信息

如果是私有部署,且神策分析版本在 3.0.1 及以上,访问 数据接入 > 数据表管理 页面,点击页面右上角 查看 JDBC 连接信息 链接,即可查看详细信息。

展示内容如下图

JDBC 连接访问

如果使用代码访问,我们建议使用 3.1.3 版本的 Hive JDBC Driver 来进行访问,Maven 的依赖定义如下:

<dependency>
	<groupId>org.apache.hive</groupId>
	<artifactId>hive-jdbc</artifactId>
	<version>3.1.3</version>
</dependency>

JDBC 连接示例代码如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class JdbcDemo {

  public static void main(String[] args) {
    String jdbcUrl = "jdbc:hive2://<server-host>:8416/<project-name>"; // 替换为实际 JDBC URL
    String username = "<your-username>";  // 替换为实际用户名
    String password = "<your-apikey>";  // 替换为实际密码

    Connection connection = null;
    Statement statement = null;
    ResultSet resultSet = null;

    try {
      // 加载 Hive JDBC 驱动
      Class.forName("org.apache.hive.jdbc.HiveDriver");

      // 建立连接
      System.out.println("Connecting to Hive...");
      connection = DriverManager.getConnection(jdbcUrl, username, password);

      // 创建 Statement 对象
      statement = connection.createStatement();
      // 执行查询
      String sql = "SELECT event FROM events LIMIT 10"; // 替换为实际 SQL
      resultSet = statement.executeQuery(sql);

      // 处理结果
      while (resultSet.next()) {
        // 处理执行结果
        // ...
      }
      System.out.println("Done!");
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      // 关闭资源
      try {
        if (resultSet != null) {
          resultSet.close();
        }
        if (statement != null) {
          statement.close();
        }
        if (connection != null) {
          connection.close();
        }
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }
}

JDBC 访问认证

  • 获取用户名(个人信息 > 基本信息 > 登录账号)
  • 获取 API-Key,请参考 API Key 管理

查询数据

  • 通过 数据表管理 模块,查询项目对应的数据库名,如 horizon_production_2;
  • 通过 SQL 进行查询
SELECT user_id,distinct_id,event,time,$lib as lib  FROM horizon_production_2.events WHERE `date` = CURRENT_DATE() LIMIT 10;

SELECT id,first_id,second_id  FROM horizon_production_2.users LIMIT 10;

此功能仅做兼容,不推荐使用!

使用注解进行项目到数据库的自动翻译,且仅对 events 和 users 表查询生效:

  • /*SA*/:使用默认项目进行数据查询
  • /*SA(project_name)*/:指定项目进行访问,如 production
SELECT user_id,distinct_id,event,time,$lib as lib  FROM events WHERE `date` = CURRENT_DATE() LIMIT 10 /*SA*/;

如果不是查询默认项目,则需要指定项目名称,例如:

SELECT id,first_id,second_id  FROM users LIMIT 10 /*SA(production)*/;

 

JDBC 支持 SQL 类型

DQL(SELECT)

SQL 说明 限制 样例
SELECT 数据查询 SELECT id FROM horizon_production_2.users LIMIT 10;

 

关于 Hive JDBC 接口的支持范围说明

神策提供的 Hive JDBC 接口是一种数据查询服务 (Data Query Service),旨在方便用户通过标准化的 JDBC 协议,使用编程语言(如 Java)或 SQL 客户端(如 DBeaver)对神策分析中的数据执行 SQL 查询并获取结果。

我们支持的场景(Hive JDBC:通过 Hive JDBC 发送 SQL 到神策,返回查询结果):

  1. 执行 SQL 查询: 您可以通过任何兼容 Hive JDBC 驱动的客户端发送标准的 SELECT 查询语句。
  2. 获取和处理结果集: 客户端可以像操作标准数据库一样,获取查询返回的数据结果集。
  3. 作为数据分析和报表工具的数据源: 适用于那些只需要通过 SQL 拉取数据进行展示的 BI 或报表工具。例如,在 DBeaver 中编写并执行一条 SQL。

我们不支持的场景(Hive 数仓:获取数据的组织方式和文件,直接访问元数据和文件):

  1. 完整的 Hive 数仓集成: 本接口不能被视为一个完整的、开放的 Hive 数仓。它不提供对 Hive Metastore (元数据存储) 或底层文件系统 (如 HDFS) 的直接访问。
  2. 深度集成的数据开发/ETL 工具: 许多复杂的数据集成平台、ETL 工具或数据调度平台(如 DataPhins, DolphinScheduler 等)在连接数据源时,会尝试自动发现和管理元数据(例如,获取所有数据库列表、表结构、分区信息等)。由于我们的接口不暴露 Metastore,这类工具将无法连接或正常工作。

 

附:配置 DBeaver 客户端

JDBC 链接配置信息

  • 数据库类型/驱动名称:Apache Hive
  • 主机:神策 JDBC Server IP
  • 端口:8416
  • 用户名:神策用户名
  • 密码:神策用户名对应的 API-Key

配置样例

上一个
数据导出
下一个
历史数据导入导出
最近修改: 2025-11-12