---
方舟不仅提供 Kafka订阅数据的方式,还提供了更加高效、稳定的 SQL 查询方式,即直接使用 JDBC、presto-cli、python 或 R
进行数据查询。
---
# 使用程序访问数据库
>[info]
>使用程序直接进行数据访问涉及较多的技术细节,适用于对相关功能有经验
## JDBC
#### JDBC 信息
| 字段 | 信息 |
| ------------------- | --------------------------------------------------------------------------------------------- |
| jdbc url | jdbc:presto://ark2.analysys.xyz:4285/hive/default |
| driver | com.facebook.presto.jdbc.PrestoDriver |
| user | daxiang |
| SSL | true |
| password | 编辑 /etc/presto/presto-auth.properties 文件查看 |
| SSLKeyStorePath | presto.jks文件的路径,一般是/etc/presto/presto.jks |
| SSLKeyStorePassword | 值可以在单机环境的ark1,集群环境的ark2的/etc/presto/config.properties文件中找到,对应http-server.https.keystore.key的值 |
presto-jdbc.jar的下载地址:[https://jar-download.com/artifacts/com.facebook.presto/presto-jdbc/0.201](https://jar-download.com/artifacts/com.facebook.presto/presto-jdbc/0.201)
如果使用代码访问,可以直接通过maven添加presto-jdbc的依赖,Maven 的依赖定义如下:
```markup
<dependency>
<groupId>com.facebook.presto</groupId>
<artifactId>presto-jdbc</artifactId>
<version>0.201</version>
</dependency>
```
```python
示例代码:
Properties properties = new Properties();
properties.setProperty("user" , Config.prestoUsername);
properties.setProperty("password" , Config.prestoPassword);
properties.setProperty("SSL" , "true");
System.out.println(Config.class.getClassLoader().getResource("presto.jks").getPath());
properties.setProperty("SSLKeyStorePath" , Config.class.getClassLoader().getResource("presto.jks").getPath());
properties.setProperty("SSLKeyStorePassword" , Config.prestoSSLKeyStorePassword);
Connection conn = null;
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
logger.error(ExceptionUtil.getMessage(e));
throw new RuntimeException("找不到jdbc驱动类", e);
}
conn = DriverManager.getConnection(url, parameter);
return conn;
```
## presto-shell
除了直接使用 JDBC 接口之外,也可以直接适用 presto-shell 工具进行查询。
直接登陆任意的方舟服务器,运行以下命令即可:
```bash
#presto必须使用isuhadoop用户来连接
#集群环境
su - isuhadoop
bin/presto-cli --server ark2:8285
#单机环境
su - isuhadoop
bin/presto-cli --server ark1:8285
```
### 查询用户信息数据
#### 查看用户信息表的表结构
```bash
show create view hive.db_appid.profile_vd
```
#### 查询用户信息数据
```bash
select * from hive.db_appid.profile_vd limit 10
```
其中{appid}为要查询的appid
### 查询用户行为数据
#### 查看用户行为表的表结构
```bash
desc hive.db_appid.event_vd
```
#### 查询用户行为数据
```bash
select * from hive.db_appid.event_vd limit 10
```
其中{appid}为要查询的appid
### 数据导出
#### 导出不包含表头的CSV格式的文件
```bash
#集群环境
presto-cli --server ark2:8285 --execute 'select * from hive.db_{appid}.event_vd limit 10' --output-format CSV > dataFile.CSV
presto-cli --server ark2:8285 --execute 'select * from chbase.db_{appid}.profile limit 10' --output-format CSV > dataFile.CSV
#单机环境
presto-cli --server ark1:8285 --execute 'select * from hive.db_{appid}.event_vd limit 10' --output-format CSV > dataFile.CSV
presto-cli --server ark1:8285 --execute 'select * from chbase.db_{appid}.profile limit 10' --output-format CSV > dataFile.CSV
```
{appid}为要查询项目的appid
dataFile.CSV为导出的文件路径
#### 导出包含表头的CSV格式的文件
```bash
#集群环境
presto-cli --server ark2:8285 --execute 'select * from hive.db_{appid}.event_vd limit 10' --output-format CSV_HEADER > dataFile.CSV_HEADER
presto-cli --server ark2:8285 --execute 'select * from chbase.db_{appid}.profile limit 10' --output-format CSV_HEADER > dataFile. CSV_HEADER
#单机环境
presto-cli --server ark1:8285 --execute 'select * from hive.db_{appid}.event_vd limit 10' --output-format CSV_HEADER > dataFile.CSV_HEADER
presto-cli --server ark1:8285 --execute 'select * from chbase.db_{appid}.profile limit 10' --output-format CSV_HEADER > dataFile. CSV_HEADER
```
{appid}为要查询项目的appid
dataFile.CSV为导出的文件路径
数据第一行为表头
#### 导出不包含表头的TSV格式的文件–没有表头
```bash
presto-cli --server ark2:8285 --execute 'select * from hive.db_{appid}.event_vd limit 10' --output-format TSV > dataFile.TSV
presto-cli --server ark2:8285 --execute 'select * from chbase.db_{appid}.profile limit 10' --output-format TSV > dataFile. TSV
```
{appid}为要查询项目的appid
dataFile.CSV为导出的文件路径
字段间以tab键分割
#### 导出包含表头的TSV格式的文件
```bash
presto-cli --server ark2:8285 --execute 'select * from hive.db_{appid}.event_vd limit 10' --output-format TSV_HEADER > dataFile.TSV_HEADER
presto-cli --server ark2:8285 --execute 'select * from chbase.db_{appid}.profile limit 10' --output-format TSV_HEADER > dataFile.TSV_HEADER
```
{appid}为要查询项目的appid
dataFile.CSV为导出的文件路径
数据第一行为表头,字段间以tab键分割
其他格式,请参考 presto-cli --help 命令中--output-format 选项的说明。
## Python
如果你更熟悉 python,也可以通过 [presto-python-client](https://pypi.org/project/presto-python-client/) 来对数据库进行访问。
### 连接方法
```python
import prestodb
conn=prestodb.dbapi.connect(
host='ip address of ark2',
port=8285,
user='daxiang',
catalog='hive',
schema='db_{appkey}',
)
cur = conn.cursor()
cur.execute('SELECT * FROM event_vd limit 10')
rows = cur.fetchall()
print rows
```
## R
可以尝试使用开源项目 [https://github.com/prestodb/RPresto](https://github.com/prestodb/RPresto) 来对数据库进行访问。
## Metabase
Metabase 是类似 HUE(自定义查询) 的开源查询界面,如果你想直接通过 SQL 查询,而不想用 HUE 的话也可以用它直接连接方舟的 Presto。
下载地址:[https://www.metabase.com/](https://www.metabase.com)

#### 配置参数说明
**Name**:自定义数据源名称,方便后续识别
**Host:**方舟 Presto 的服务器IP,一般为内网IP( 如何查找?登录Ambari ——点击Presto ——点击Presto coordinator 找到想要查找数据的服务器)

**Port:**8285 (固定值)
**Database Name:**hive (固定值,注意全部小写字母)
**Database username: **streaming (固定值)
下方的三个开关保持默认,点击底部的确认按钮即可完成连接配置。
>[warning]
>若确认后看不到数据表,请关闭 Metabase 重新进入
>[info] 以上内容没有解答我的问题?[点击我进入方舟论坛去反馈](https://www.analysysdata.com/forum/index) 🚀
- 产品简介
- 快速上手
- Step 1 安装部署
- Step 2 激活系统创建项目
- Step 3 开启您的分析旅程
- 1. 集成 SDK
- 2. 可视化埋点
- 3. 创建分析模型
- 附:埋点方案设计
- 附:数据分析思路
- 产品更新日志
- V5.5 新增LTV分析功能等
- V5.3 UI 升级、分布分析重构、维度表动态更新、细节优化等
- V5.2 新增归因分析、消息中心、重构埋点方案、优化看数据体验……
- V5.1.0317 体验优化& Bug修复
- V5.1 升级可视化埋点、增强权限控制……
- Part I 产品功能说明
- 名词解释
- 指标说明
- 看板
- 5.3.3 看板 UI 重构
- 分析
- 事件分析
- 渠道分析
- 渠道相关名词解释
- 来源识别规则
- 搜索引擎
- 社交媒体
- 小程序场景值
- Session 分析
- Session 规则
- 实时分析
- 留存分析
- 转化漏斗
- 智能路径
- 归因分析
- 热图分析
- Web/H5 热图
- APP 热图
- 分布分析
- 间隔分析
- 属性分析
- LTV 分析
- 多主体分析
- 自定义查询
- 用户
- 用户分群
- 用户探查
- 用户标签
- 标签体系应用概览
- 标签体系
- 标签生命周期管理
- 标签加工
- 如何自定义SQL创建标签
- 单用户档案
- 运营
- 广告跟踪
- 微信小程序渠道追踪
- 预置广告媒介和渠道
- App 推广监测(Beta)
- 电子邮件
- 短信
- 消息通知
- 项目管理
- 项目概览
- 项目角色管理
- 项目成员管理
- 数据接入管理
- 埋点方案
- 可视化埋点
- 集成SDK接入数据
- 数据验证
- 用户数据导入
- 微信小程序全埋点事件定义
- 元数据管理
- 元事件
- 虚拟事件
- 事件属性
- 用户属性
- Session 管理
- 页面组管理
- 维度表
- 服务集成配置
- 监控告警
- 智能监控
- 自定义监控
- 平台管理
- 企业概览
- 项目管理
- 成员管理
- 安全设置
- 企业设置
- 日志管理
- 帐号设置
- Part II 技术文档
- 技术接入准备工作
- 部署环境检测工具
- 数据模型
- 数据格式
- 预置事件和属性
- App预置事件/属性
- JS 预置事件/属性
- 如何准确识别用户
- 如何设计埋点方案
- 分平台上报数据 vs 跨平台打通
- SDK 指南
- Android SDK
- 快速集成
- 全埋点模块
- 消息推送模块
- Android Hybrid模式
- SDK Gradle集成方式
- 多渠道打包
- 易观小工具
- 合规相关
- iOS SDK
- 快速集成
- 全埋点介绍
- iOS Hybrid模式
- 消息推送模块
- JS SDK
- 快速集成
- JS SDK基础版
- JS SDK插件
- uni-app SDK
- 快速集成
- 打包原生APP
- 开启移动端全埋点
- uni-app SDK标准版
- 微信小程序 SDK
- 快速集成
- 微信小程序标准版
- 微信小程序插件版
- 微信小程序通用框架版
- 支付宝小程序 SDK
- 支付宝小程序标准版
- 支付宝小程序通用框架版
- 字节跳动小程序 SDK
- 字节跳动小程序标准版
- 字节跳动小程序通用框架版
- 百度小程序 SDK
- 百度小程序标准版
- 百度小程序通用框架版
- 钉钉小程序 SDK
- 钉钉小程序标准版
- 钉钉小程序通用框架版
- QQ小程序 SDK
- QQ小程序标准版
- QQ小程序通用框架版
- 快应用 SDK
- 华为WeCode小程序
- WeCode SDK 标准版
- WeCode SDK插件
- PhoneGap SDK
- mPaaS SDK
- ReactNative SDK
- Flutter SDK
- Java SDK
- Python SDK
- PHP SDK
- C++ SDK
- C# SDK
- Node JS SDK
- Lua SDK
- Golang SDK
- SDK FAQ
- identify与alias的区别
- 爬虫数据如何识别?
- 页面停留如何获取时间?
- 如果获取SDK及更新日志
- 代码埋点和无埋点有什么区别
- Web页面中发现丢失某一个事件
- 自研 SDK 注意事项
- 页面时长统计功能
- 飞书小程序 SDK
- 飞书小程序标准版
- 飞书小程序通用框架版
- Unreal Engine SDK
- 数据验证
- 客户端埋点验证
- Debug 数据验证
- 数据入库验证
- 数据导入
- 接口导入
- JAVA工具包
- 标准json文件导入
- csv格式导入
- 数据导入FAQ
- 数据导出
- JAVA工具包
- 事件数据导出
- 用户数据导出
- 直接从Kafka中消费数据
- 使用程序访问数据库
- 脚本工具
- API
- 分析API
- 事件分析
- 留存分析
- 自定义查询
- 转化漏斗
- 属性分析
- Session分析
- 渠道分析
- 分布分析
- 用户API
- 分群查询
- 用户档案
- 分群管理
- 管理API
- 权限管理
- 元数据管理
- 埋点方案管理
- 维度表管理
- 运营API
- 广告跟踪
- APP推广监测
- 平台管理API
- 项目管理
- 成员管理
- 第三方登录
- OAuth2.0登录
- LDAP登录
- GDPR 合规
- Part III 常见问题
- License 许可
- 产品试用及采购
- 参与贡献