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

1. 概述

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


2. 使用场景

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

3. 使用方法

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

3.1.1. 神策分析版本在 3.0.1 版本及以上

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

展示内容如下图

3.1.2. 神策分析版本在 3.0.0 版本及以下

  • 登录任意的神策服务器
  • 切换至 sa_cluster 账户
su - sa_cluster
BASH
  • 使用以下命令获取地址
aradmin status -p infinity -m infinity_controller
BASH


      例如输出是:

+----------+---------------------+---------------------+------------------------------------------------------------------------+
| product  | module              | role                | addr[s]                                                                | 
+----------+---------------------+---------------------+------------------------------------------------------------------------+
| infinity | infinity_controller | infinity_controller | hybrid01.classic-tx-beijing-01.jdbc-test.deploy.sensorsdata.cloud:8411 | 
|          |                     |                     | hybrid02.classic-tx-beijing-01.jdbc-test.deploy.sensorsdata.cloud:8411 | 
|          |                     |                     | hybrid03.classic-tx-beijing-01.jdbc-test.deploy.sensorsdata.cloud:8411 | 
+----------+---------------------+---------------------+------------------------------------------------------------------------+
BASH

注意:不同环境输出内容可能略有差异,仅关注所需字段内容即可。


其中,addr[s] 列中的格式为 host:port,取任意 host 进行 JDBC 地址拼接,拼接方式为:

jdbc:hive2://{host}:8416/

在上述输出结果中,以下三个 JDBC 地址皆可使用
jdbc:hive2://hybrid01.classic-tx-beijing-01.jdbc-test.deploy.sensorsdata.cloud:8416/
jdbc:hive2://hybrid02.classic-tx-beijing-01.jdbc-test.deploy.sensorsdata.cloud:8416/
jdbc:hive2://hybrid03.classic-tx-beijing-01.jdbc-test.deploy.sensorsdata.cloud:8416/
CODE

注意:

端口号固定为 8416 。

使用上述获取的 HOST 对 JDBC 进行访问,仅限在神策环境可用。如希望跨网络访问,请自行设置网络访问安全策略以及替换 HOST IP。


JDBC 访问认证

  • 获取用户名(个人信息->基本信息→登录账号)
  • 获取 API-Key,请参考 API Key管理
  • 使用 JDBC Client 进行访问,代码示例如下:


Connection conn = DriveManager.getConnection("{your jdbc url}", "{your username}", "{your api-key}")
JAVA

3.2. JDBC 访问权限

3.3. JDBC 链接访问

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

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

注意:实际代码运行中, Hive JDBC Driver 会依赖其他 jar 包,主要有 hadoop-common 、hive-service、hive-common 和 libthrift。正常这些 jar 包会自动获取,如果没有自动获取,需要再添加相应的 jar 包,或检查是否在pom中排除了对应的包,可检查代码中是否存在类似的配置:

<exclusions>
	<exclusion>
		<groupId>org.apache.hadoop</groupId>
    	<artifactId>hadoop-common</artifactId>
	</exclusion>
    <exclusion>
		<groupId>org.apache.hive</groupId>
    	<artifactId>hive-service</artifactId>
	</exclusion>
</exclusions>
XML

如果包已导入,但是有其他的报错出现,则可能是存在包冲突所导致的,需要进行排包操作。

3.4. 查询数据

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


配置样例