Vertica 集成 Qlik Sense¶
本文整合了 Vertica 官方 Qlik Sense 连接指南与 QuickStart 两篇文章,去重合并,并补充性能优化与故障排查内容。
关于 Vertica 连接指南¶
Vertica 连接指南提供将第三方合作伙伴产品连接到 Vertica 的基本说明,基于 Vertica 与合作伙伴产品的实际测试。
最新测试版本¶
| 组件 | 版本 |
|---|---|
| Qlik Sense Hub | August 2022 |
| 桌面平台 | Windows Server 2016 |
| Vertica 客户端 | ODBC Driver 12.0.1 |
| Vertica 服务器 | Vertica Analytic Database 12.0.1 |
| 服务器平台 | Linux RHEL 8.7 |
注意:以上为官方测试版本。Qlik Sense 和 Vertica 均可使用更高版本,ODBC 驱动向前兼容。详见 Client Driver and Server Version Compatibility。
1. Qlik Sense 产品体系与 Vertica 连接架构¶
1.1 Qlik Sense 概述¶
Qlik Sense 是一款自助式数据分析和可视化 BI 工具,核心特点包括:
- 关联引擎(Associative Engine):自动发现数据间的关联关系,而非预定义 JOIN 路径
- 智能搜索:支持跨所有数据的自由搜索,自动高亮关联和无关数据
- 响应式设计:仪表板自适应不同屏幕尺寸
- 部署灵活:支持 Qlik Sense Desktop(单机)、Qlik Sense Enterprise(Server)、Qlik Cloud(SaaS)
1.2 连接架构¶
Qlik Sense 通过 ODBC 连接到 Vertica,架构如下:
Qlik Sense Desktop ──ODBC──► Vertica 集群
Qlik Sense Server ──ODBC──► Vertica 集群
Qlik Cloud ──► Qlik Data Gateway ──ODBC──► Vertica 集群
与 Tableau 的关键差异:
| 维度 | Tableau | Qlik Sense |
|---|---|---|
| 连接方式 | 界面直接填 IP/端口/库名 | 必须预先创建 64 位 ODBC DSN |
| 数据加载模式 | Live / Extract | Standard Load(提取到内存) / Direct Query(下推) |
| SQL 下推方式 | 自动生成 SQL | 手动编写 DIRECT QUERY 脚本声明 dimension/measure |
| 连接池控制 | connection-configs.xml + TDC 文件 | 依赖 ODBC DSN 配置 + 系统 ODBC 参数 |
| 64 位要求 | 无特殊要求 | 必须使用 64 位 ODBC DSN |
2. 环境准备¶
2.1 安装 Qlik Sense¶
- 查看 Qlik 硬件和软件要求
- 运行
Qlik Sense_setup.exe安装向导 - 按提示完成安装
2.2 安装 Vertica ODBC 驱动并创建 DSN¶
⚠️ 关键:Qlik Sense 使用 64 位 ODBC DSN。必须使用 64 位 ODBC 数据源管理器配置。
安装驱动¶
- 访问 Vertica Client Drivers 页面
- 下载与操作系统(64-bit)和 Vertica 服务器版本兼容的客户端包
- 按安装向导安装,选择 ODBC 组件即可
创建 64 位 DSN¶
- 打开 Windows 运行(Win+R),输入
odbcad32.exe(64 位 ODBC 管理器位于C:\Windows\System32\)不要通过 Control Panel → Administrative Tools 进入,可能默认打开 32 位版本
- 在 System DSN 选项卡中,点击 Add,选择 Vertica 驱动
- 配置连接参数:
- Server:Vertica 节点 IP 或主机名
- Port:默认 5433
- Database:目标数据库
- User Name / Password:数据库凭据
- 点击 Test Connection 验证连通性
3. 连接配置¶
3.1 Qlik Sense Hub → Vertica(标准连接)¶
- 在 Qlik Sense Hub 中,选择 Create new app → 输入名称 → Create → Open App
- 点击 Add data from files and other sources → 选择 ODBC
- 在 Create new connection (ODBC) 对话框中:
- 选择之前创建的 64 位 DSN
- 输入 Username 和 Password
- Name:保留 DSN 名称或自定义
- 点击 Create
- 连接成功后:
- Database 字段显示 DSN 中的数据库名
- Owner 下拉列表显示 Vertica 中的 schema
- 选择 schema 后,该 schema 下的表显示在列表中
- 选择表后可预览列和数据
标准连接的特点:数据被加载到 Qlik Sense 的内存关联引擎中,查询在本地执行。适合数据量较小(可全部载入内存)的场景。
3.2 Direct Query 下推模式¶
Direct Query 是 Qlik Sense 连接大数据量 Vertica 的核心模式。它只加载表的元数据(列名和类型),实际查询在 Qlik 界面操作时实时生成 SQL 并下推到 Vertica 执行。
配置步骤¶
- 完成 3.1 节的标准连接后,选择要使用的表,点击 Next
- 在 Prepare 选项卡中,选择 Data load editor(而非默认的 Data manager)
- 在 Data load editor 中编写 DIRECT QUERY 脚本:
LIB Connect To 'Vertica_vmart (intw2k19-73-33_administrator)';
DIRECT QUERY
dimension
sale_date_key,
ship_date_key,
product_key,
customer_key,
call_center_key
measure
sales_dollar_amount,
ship_dollar_amount
FROM
online_sales.online_sales_fact;
- 点击 Load data 加载
- 加载成功后,在 Data manager 中会出现 DirectTable,包含脚本中声明的字段
- 在 Analyse 选项卡中,使用 DirectTable 的字段创建仪表板
验证下推是否生效¶
在 Vertica 侧查询 query_requests 系统表,确认 Qlik Sense 生成的 SQL 是否实际到达了 Vertica:
SELECT request, request_duration_ms, start_timestamp
FROM query_requests
WHERE request_type = 'QUERY'
AND request ILIKE '%online_sales_fact%'
ORDER BY start_timestamp DESC
LIMIT 10;
4. Direct Query 深度解析¶
4.1 工作原理¶
Direct Query 模式下的数据流:
Qlik Sense 前端(用户点击筛选/拖拽字段)
→ Qlik 引擎生成 SQL 查询
→ ODBC 发送到 Vertica
→ Vertica 执行查询,仅返回结果集(非全表数据)
→ Qlik Sense 渲染可视化
与标准连接的关键区别:数据不进入 Qlik 内存引擎,而是每次交互向 Vertica 发起查询,Vertica 只返回聚合后的少量结果。
4.2 dimension 与 measure 声明策略¶
DIRECT QUERY 脚本中 dimension 和 measure 的声明直接影响生成的 SQL:
| 声明类型 | 对应 SQL 角色 | 示例 |
|---|---|---|
| dimension | GROUP BY 列 / 筛选列 | product_key, sale_date_key |
| measure | 聚合列 | SUM(sales_dollar_amount) |
最佳实践:
- dimension 只声明会被用于分组和筛选的列——多余的列会增加不必要的 GROUP BY
- measure 必须声明所有需要聚合的数值列——遗漏的列无法在仪表板中使用
- 如果某列既可能用于分组也可能用于聚合(如
quantity_sold),在 dimension 和 measure 中都声明
常见错误:将高基数列(如交易 ID、行号)声明为 dimension,导致 Vertica 执行大量无意义的分组操作。
4.3 与 Tableau Live 连接的对比¶
| 维度 | Qlik Sense Direct Query | Tableau Live Connection |
|---|---|---|
| SQL 生成 | 引擎自动生成,但需手动声明字段角色 | 引擎完全自动生成 |
| 评估策略 | Qlik 关联引擎在本地评估部分逻辑 | 全部下推到 Vertica |
| 字段发现 | 新字段需修改脚本并 Reload | 拖拽即用,自动发现 |
| 灵活性 | 开发者有更多控制权 | 用户更自由 |
| 适合场景 | 明确的 ETL 输出表,字段稳定 | 探索式分析,字段频繁变更 |
4.4 限制与适用场景¶
Direct Query 不适合以下场景: - 同一仪表板需要关联多张尚未在 Vertica 中 JOIN 的表(Qlik 的关联引擎优势被削弱) - 字段频繁变更的分析探索阶段(每次加字段都要改脚本 Reload) - 需要 Qlik 本地函数做复杂计算的场景(如高级 Set Analysis)
Direct Query 最适合以下场景: - 单表或已在 Vertica 中建好 VIEW 的宽表 - 数据量远超内存容量的场景 - 需要近实时分析,且字段结构稳定 - 利用 Vertica LAP(Live Aggregate Projections)的预聚合数据
5. 性能优化¶
5.1 ODBC 连接参数调优¶
在 Windows ODBC DSN 配置中,可调整以下参数优化性能:
| 参数 | 建议值 | 作用 |
|---|---|---|
ResultBufferSize |
500000 或 0(无限) |
增大结果集缓冲,避免大批量结果分批传输 |
ConnectionLoadBalance |
1 |
启用本地连接负载均衡,分散客户端连接开销 |
Label |
qlik_session |
设置会话标签,便于在 Vertica 日志中追踪 Qlik 查询 |
SSLMode |
require(如需要) |
启用 SSL 加密传输 |
5.2 Direct Query 性能策略¶
控制查询频率¶
- Qlik Sense 默认在用户每次筛选操作时向 Vertica 发送查询
- 对于包含多个筛选器的仪表板,考虑使用 Apply 按钮 模式减少查询频次
- 避免在 dimension 中声明高基数且不用于筛选的列
聚合下推¶
- 所有 measure 列的聚合都在 Vertica 侧完成,Qlik 只接收聚合结果
- 不要在 Qlik Sense 中对 Direct Query 的 measure 做二次计算(如再套一层公式),这会拉取明细数据到本地
- 复杂计算尽量在 Vertica 中通过 VIEW 预处理
日期筛选策略¶
- Qlik Sense 的日期筛选器可能生成多条查询
- 建议在 Vertica 中为日期维度创建预聚合表(如按天/周/月汇总),减少 GROUP BY 开销
5.3 Vertica 侧调优¶
与 Tableau 集成相同,Vertica 侧的优化同样适用于 Qlik Sense:
Database Designer¶
将 Qlik Sense 生成的慢查询作为样本提交给 Database Designer:
-- 从 Vertica 日志或 query_requests 中提取 Qlik 下推的查询
SELECT request FROM v_monitor.query_requests
WHERE request_type = 'QUERY'
AND request ILIKE '%online_sales%'
ORDER BY request_duration_ms DESC LIMIT 10;
Live Aggregate Projections(LAP)¶
对于 Direct Query 中频繁聚合的高频 measure,创建 LAP 预计算:
专用资源池¶
CREATE RESOURCE POOL qlik_pool;
ALTER USER qlik_user RESOURCE POOL qlik_pool;
-- 级联超时保护
CREATE RESOURCE POOL qlik_pool_backup RUNTIMECAP '5 minutes';
ALTER RESOURCE POOL qlik_pool CASCADE TO qlik_pool_backup;
5.4 标准连接 vs Direct Query 选择决策¶
数据量 < Qlik 服务器内存容量?
├─ 是 → 标准连接(更快、更灵活、支持离线)
└─ 否 → Direct Query
├─ 字段结构稳定?→ 是 → Direct Query 完美匹配
└─ 字段频繁变化?→ 建议 Vertica 侧建 VIEW 固化字段,再用 Direct Query
6. 故障排查¶
6.1 DSN 不可见或不匹配¶
现象:Qlik Sense 创建 ODBC 连接时找不到已创建的 DSN。
根因:Qlik Sense 是 64 位应用,只能看到 64 位 DSN。如果用了 32 位 ODBC 管理器创建了 32 位 DSN,Qlik Sense 无法识别。
解决:通过 C:\Windows\System32\odbcad32.exe 重新创建 64 位 System DSN。
6.2 Direct Query 未实际下推¶
现象:Direct Query 脚本加载成功,但查询似乎仍在 Qlik 本地执行(大查询慢、内存涨)。
诊断步骤:
1. 在 Vertica 中查询 query_requests 确认是否有 Qlik 发来的查询:
SELECT request, start_timestamp FROM query_requests
WHERE request ILIKE '%DIRECT QUERY%' OR client_label = 'qlik_session'
ORDER BY start_timestamp DESC LIMIT 5;
SELECT * 全表扫描记录,说明 dimension/measure 声明不完整 — Qlik 回退到全量加载
解决:确保 DIRECT QUERY 脚本中 dimension 和 measure 声明完整覆盖了仪表板使用的所有字段。
6.3 VARCHAR 数据截断¶
现象:超过 2100 字符的字符串在 Qlik Sense 中被截断并显示 "..."。
根因:Qlik Sense ODBC 连接器对 VARCHAR 有 2100 字符的默认限制。
解决: - 在 Vertica 侧创建 VIEW,将长文本列截断到 2100 字符:
- 或将长文本拆分为多个列6.4 NUMERIC 精度四舍五入¶
现象:超过 15 位精度的 NUMERIC 值被四舍五入。
根因:ODBC 层对 NUMERIC 精度限制。不同于 Tableau(直接截断),Qlik Sense 会四舍五入。
解决:
- 在 Vertica 中将高精度数值转为 VARCHAR 传输,Qlik 侧再做解析
- 或在 Vertica VIEW 中将精度控制在 15 位以内
6.5 Data Load 超时¶
现象:Direct Query 数据加载阶段超时。
解决: - 检查 ODBC DSN 的连接超时参数 - 确认 Vertica 中表的分区裁剪和投影设计已优化 - 尝试减少 dimension 列数(特别是高基数列) - 检查 Vertica 资源池是否有排队
7. 已知限制¶
7.1 数据类型限制¶
| 数据类型 | 限制表现 | 应对策略 |
|---|---|---|
| CHAR / VARCHAR / LONGVARCHAR | 超过 2100 字符截断并显示 "..." | ⚠️ 最严格限制,比 Tableau(65000)和 DataStage 都严;长文本需预处理截断 |
| TIME / TIMESTAMP | 毫秒被截断 | 低影响,ETL 场景通常不需要毫秒精度 |
| TIMETZ / TIMESTAMPTZ | 毫秒和时区均被截断 | 转为 UTC 时间戳 + 独立时区列 |
| BINARY / VARBINARY / LONG VARBINARY | 显示为十六进制(如 \377\000 → FF000000) |
转为 VARCHAR 或 Base64 编码 |
| NUMERIC | 15 位后四舍五入(非截断) | 高精度值转 VARCHAR 传输 |
7.2 功能限制¶
| 限制 | 说明 |
|---|---|
| 单表 Direct Query | DIRECT QUERY 语法只支持单表,多表关联需先在 Vertica 中建 VIEW |
| 无 TDC 等效文件 | 无 Tableau TDC 那样的全局连接配置文件,所有配置依赖 ODBC DSN 级别 |
| 脚本手动维护 | 字段变更需手动更新 DIRECT QUERY 脚本并 Reload |
| Set Analysis 受限 | Qlik 强大的 Set Analysis 表达式在 Direct Query 模式下部分不可用 |
8. 示例应用:QuickStart(VMart 零售分析)¶
Vertica QuickStarts 是免费的示例应用,仅用于演示和教育目的,不适合生产部署。
8.1 环境要求¶
- Vertica 数据库服务器 + VMart 示例数据库
- Vertica ODBC 客户端驱动(64 位 DSN)
- Qlik Sense Desktop
8.2 安装与使用¶
- 从 Vertica QuickStart 下载
Vertica QuickStart for Qlik Sense - 解压后,将
.qvf文件放入 Qlik Sense Apps 文件夹: - 打开 Qlik Sense Desktop → Hub 中选择 VMart_quick_start
- 在 Data load editor 中,编辑 ODBC 连接,选择 64 位 DSN,输入凭据
- 点击 Load data 加载数据(可能需要几分钟)
- 在 App overview 中查看仪表板
8.3 仪表板列表¶
| 仪表板 | 分析内容 |
|---|---|
| Executive Dashboard | 整体营收和业务 KPI 高层视图 |
| Online Sales Dashboard | 在线销售渠道业绩 |
| Store Sales Dashboard | 门店销售渠道业绩 |
| Customer Dashboard | 客户行为模式分析 |
| Product Dashboard | 产品销售趋势 |
| Vendor Dashboard | 供应商绩效(含 Perfect Order Rate) |
| Inventory Dashboard | 库存状况分析 |
9. 交付检查清单¶
环境层¶
- [ ] Qlik Sense Desktop / Server 已安装
- [ ] Vertica ODBC 驱动已安装(64 位版本)
- [ ] 64 位 System DSN 已创建并通过 Test Connection
- [ ] (Qlik Cloud 场景)Qlik Data Gateway 已安装,Gateway 机器上有 ODBC 驱动
连接层¶
- [ ] Qlik Sense Hub 中可成功通过 ODBC 连接到 Vertica
- [ ] Schema 下拉列表可正常显示
- [ ] 表选择后可预览列和数据
Direct Query 层¶
- [ ] DIRECT QUERY 脚本中 dimension 和 measure 声明完整
- [ ] 仅声明实际使用的字段(避免多余 GROUP BY)
- [ ] 高基数列未作为 dimension 声明
- [ ]
query_requests系统表可观察到 Qlik 下推的查询 - [ ] 多表场景已在 Vertica 中建 VIEW
性能层¶
- [ ] ODBC DSN 已配置
ResultBufferSize、ConnectionLoadBalance - [ ] 高频聚合的 measure 已创建 LAP
- [ ] Qlik 专用资源池已配置
- [ ] VARCHAR 列已控制在 2100 字符以内
- [ ] NUMERIC 列精度已控制在 15 位以内
总结¶
Qlik Sense 与 Vertica 的集成通过 ODBC 实现,核心在于 Direct Query 模式的选择与配置。
与 Tableau 的核心区别决定了交付策略:
- Tableau 偏「自动挡」:拖拽即用,自动下推,适合探索式分析
- Qlik Sense 偏「手动挡」:Direct Query 需要手动声明 dimension/measure,换来更精准的下推控制,适合固定报表场景
- VARCHAR 2100 字符限制 是 Qlik Sense 最严苛的数据类型限制,交付前必须检查所有文本列长度
- 64 位 DSN 是新手最容易踩的坑——必须用 System32 下的
odbcad32.exe创建 - 多表场景提前建 VIEW:Direct Query 只支持单表语法,所有 JOIN 逻辑必须在 Vertica 侧完成
原文来源:https://www.vertica.com/kb/QlikSense-CG/Content/Partner/QlikSense-CG.htm, https://www.vertica.com/kb/HPE-Vertica-QuickStart-for-Qlik-Sense/Content/Partner/HPE-Vertica-QuickStart-for-Qlik-Sense.htm