跳转至

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

  1. 查看 Qlik 硬件和软件要求
  2. 运行 Qlik Sense_setup.exe 安装向导
  3. 按提示完成安装

2.2 安装 Vertica ODBC 驱动并创建 DSN

⚠️ 关键:Qlik Sense 使用 64 位 ODBC DSN。必须使用 64 位 ODBC 数据源管理器配置。

安装驱动

  1. 访问 Vertica Client Drivers 页面
  2. 下载与操作系统(64-bit)和 Vertica 服务器版本兼容的客户端包
  3. 按安装向导安装,选择 ODBC 组件即可

创建 64 位 DSN

  1. 打开 Windows 运行(Win+R),输入 odbcad32.exe(64 位 ODBC 管理器位于 C:\Windows\System32\

    不要通过 Control Panel → Administrative Tools 进入,可能默认打开 32 位版本

  2. System DSN 选项卡中,点击 Add,选择 Vertica 驱动
  3. 配置连接参数:
  4. Server:Vertica 节点 IP 或主机名
  5. Port:默认 5433
  6. Database:目标数据库
  7. User Name / Password:数据库凭据
  8. 点击 Test Connection 验证连通性

3. 连接配置

3.1 Qlik Sense Hub → Vertica(标准连接)

  1. Qlik Sense Hub 中,选择 Create new app → 输入名称 → CreateOpen App
  2. 点击 Add data from files and other sources → 选择 ODBC
  3. Create new connection (ODBC) 对话框中:
  4. 选择之前创建的 64 位 DSN
  5. 输入 UsernamePassword
  6. Name:保留 DSN 名称或自定义
  7. 点击 Create
  8. 连接成功后:
  9. Database 字段显示 DSN 中的数据库名
  10. Owner 下拉列表显示 Vertica 中的 schema
  11. 选择 schema 后,该 schema 下的表显示在列表中
  12. 选择表后可预览列和数据

标准连接的特点:数据被加载到 Qlik Sense 的内存关联引擎中,查询在本地执行。适合数据量较小(可全部载入内存)的场景。

3.2 Direct Query 下推模式

Direct Query 是 Qlik Sense 连接大数据量 Vertica 的核心模式。它只加载表的元数据(列名和类型),实际查询在 Qlik 界面操作时实时生成 SQL 并下推到 Vertica 执行。

配置步骤

  1. 完成 3.1 节的标准连接后,选择要使用的表,点击 Next
  2. Prepare 选项卡中,选择 Data load editor(而非默认的 Data manager)
  3. 在 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;
  1. 点击 Load data 加载
  2. 加载成功后,在 Data manager 中会出现 DirectTable,包含脚本中声明的字段
  3. 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 5000000(无限) 增大结果集缓冲,避免大批量结果分批传输
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 预计算:

-- 创建 LAP 后通过 VIEW 暴露给 Qlik Sense
CREATE VIEW v_qlik_daily_sales AS SELECT * FROM daily_sales_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;
2. 若没有记录,说明 SQL 未到达 Vertica — 检查 ODBC DSN 连通性 3. 若只有 SELECT * 全表扫描记录,说明 dimension/measure 声明不完整 — Qlik 回退到全量加载

解决:确保 DIRECT QUERY 脚本中 dimension 和 measure 声明完整覆盖了仪表板使用的所有字段。


6.3 VARCHAR 数据截断

现象:超过 2100 字符的字符串在 Qlik Sense 中被截断并显示 "..."。

根因:Qlik Sense ODBC 连接器对 VARCHAR 有 2100 字符的默认限制。

解决: - 在 Vertica 侧创建 VIEW,将长文本列截断到 2100 字符:

CREATE VIEW v_qlik_comments AS
SELECT LEFT(comment_text, 2100) AS comment_text, ...
FROM comments;
- 或将长文本拆分为多个列


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\000FF000000 转为 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 安装与使用

  1. Vertica QuickStart 下载 Vertica QuickStart for Qlik Sense
  2. 解压后,将 .qvf 文件放入 Qlik Sense Apps 文件夹:
    C:\Users\<username>\Documents\Qlik\Sense\Apps
    
  3. 打开 Qlik Sense Desktop → Hub 中选择 VMart_quick_start
  4. Data load editor 中,编辑 ODBC 连接,选择 64 位 DSN,输入凭据
  5. 点击 Load data 加载数据(可能需要几分钟)
  6. 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 已配置 ResultBufferSizeConnectionLoadBalance
  • [ ] 高频聚合的 measure 已创建 LAP
  • [ ] Qlik 专用资源池已配置
  • [ ] VARCHAR 列已控制在 2100 字符以内
  • [ ] NUMERIC 列精度已控制在 15 位以内

总结

Qlik Sense 与 Vertica 的集成通过 ODBC 实现,核心在于 Direct Query 模式的选择与配置。

与 Tableau 的核心区别决定了交付策略:

  1. Tableau 偏「自动挡」:拖拽即用,自动下推,适合探索式分析
  2. Qlik Sense 偏「手动挡」:Direct Query 需要手动声明 dimension/measure,换来更精准的下推控制,适合固定报表场景
  3. VARCHAR 2100 字符限制 是 Qlik Sense 最严苛的数据类型限制,交付前必须检查所有文本列长度
  4. 64 位 DSN 是新手最容易踩的坑——必须用 System32 下的 odbcad32.exe 创建
  5. 多表场景提前建 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