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

1. 概述

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


2. 使用场景

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

3. 使用方法

3.1. 获取 JDBC 地址和认证信息

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

展示内容如下图

3.2. JDBC 连接访问

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

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


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();
      }
    }
  }
}

JAVA


JDBC 访问认证

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

3.3. 查询数据

  • 通过「数据表管理」模块,查询项目对应的数据库名,如 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;
SQL



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

使用注解进行项目到数据库的自动翻译,且仅对 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*/;
SQL


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

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


4. JDBC 支持 SQL 类型

4.1.1. DQL(SELECT)

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


5. 附:配置 DBeaver 客户端

5.1. JDBC 链接配置信息

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


配置样例