本文档所描述的内容属于神策分析的高级使用功能,涉及较多技术细节,适用于对相关功能有经验的用户参考。如果对文档内容有疑惑,请咨询神策值班同学获取一对一的协助。
概述
神策系统提供了直接使用 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;
