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

概述

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


使用场景

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

使用方法

使用步骤

获取 JDBC 地址

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


      例如输出是:

+----------+---------------------+---------------------+------------------------------------------------------------------------+---------------+
| product  | module              | role                | addr[s]                                                                | containerized |
+----------+---------------------+---------------------+------------------------------------------------------------------------+---------------+
| infinity | infinity_controller | infinity_controller | hybrid01.classic-tx-beijing-01.jdbc-test.deploy.sensorsdata.cloud:8411 | true          |
|          |                     |                     | 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

JDBC 访问权限

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

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

查询数据

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


JDBC 支持 SQL 类型

DQL(SELECT)

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


附:配置 DBeaver 客户端

JDBC 链接配置信息

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


配置样例