使用 JDBC 进行数据访问
|
收藏
本文档所描述的内容属于神策分析的高级使用功能,涉及较多技术细节,适用于对相关功能有经验的用户参考。如果对文档内容有疑惑,请咨询神策值班同学获取一对一的协助。
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
- 使用以下命令获取地址
aradmin status -p infinity -m infinity_controller
例如输出是:
+----------+---------------------+---------------------+------------------------------------------------------------------------+
| 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 |
+----------+---------------------+---------------------+------------------------------------------------------------------------+
注意:不同环境输出内容可能略有差异,仅关注所需字段内容即可。
其中,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/
注意:
端口号固定为 8416 。
使用上述获取的 HOST 对 JDBC 进行访问,仅限在神策环境可用。如希望跨网络访问,请自行设置网络访问安全策略以及替换 HOST IP。
JDBC 访问认证
- 获取用户名(个人信息->基本信息→登录账号)
- 获取 API-Key,请参考 API Key管理
使用 JDBC Client 进行访问,代码示例如下:
Connection conn = DriveManager.getConnection("{your jdbc url}", "{your username}", "{your api-key}")
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>
注意:实际代码运行中, 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>
如果包已导入,但是有其他的报错出现,则可能是存在包冲突所导致的,需要进行排包操作。
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;
此功能仅做兼容,不推荐使用!
使用注解进行项目到数据库的自动翻译,且仅对 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)*/;
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
配置样例
注:本文档内容为神策产品使用和技术细节说明文档,不包含适销类条款;具体企业采购产品和技术服务内容,以商业采购合同为准。