You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Qlik Sense加载SQL数据库中存储的Array Pair为指定表格格式

Qlik Sense SQL元组列表数据转换解决方案

以下是两种可直接落地的实现方式:

方案1:SQL侧预处理(性能最优,优先选择)

针对支持JSON解析函数的数据库(MySQL 8.0+、PostgreSQL、SQL Server等),直接在取数查询时完成格式转换,无需后续在Qlik中二次处理。
示例查询(以MySQL为例,表名source_table,存储列表的字段名为raw_data):

SELECT 
  j.id,
  j.value
FROM source_table,
JSON_TABLE(
  -- 先将元组格式字符串转为标准JSON数组格式
  REPLACE(REPLACE(REPLACE(raw_data, '(', '['), ')', ']'), "'", '"'),
  '$[*]' COLUMNS (
    id INT PATH '$[0]',
    value VARCHAR(10) PATH '$[1]'
  )
) j;

方案2:Qlik Sense加载脚本内处理

若无法修改SQL查询逻辑,直接在Qlik数据加载编辑器中编写脚本完成解析:

  1. 第一步先加载SQL侧的原始数据到临时表
RawData:
LOAD
  raw_data // 替换为你实际存储列表的字段名
RESIDENT [SQL导入的源表名称]; // 替换为你从SQL加载到Qlik的表名
  1. 第二步解析字符串生成目标结构化表
ResultTable:
LOAD
  // 提取ID字段
  SubField(SubField(pair, ',', 1), '(', 2) AS ID,
  // 提取Value字段,去除多余符号和空格
  Trim(Replace(Replace(SubField(pair, ',', 2), "'", ''), ')', '')) AS Value
WHILE 
  // 按元组分隔符拆分原始字符串,循环遍历所有元组
  SubField(Replace(Replace(raw_data, '[', ''), ']', ''), '), (', IterNo()) AS pair
RESIDENT RawData;

// 释放临时表占用的内存
DROP TABLE RawData;

如果你给出的示例中ID=3的取值需要从c转换为v,可额外增加映射逻辑:

ValueMap:
Mapping LOAD * INLINE [
old_val, new_val
c, v
];
// 将ResultTable中Value的定义替换为以下内容即可
ApplyMap('ValueMap', Trim(Replace(Replace(SubField(pair, ',', 2), "'", ''), ')', '')), Trim(Replace(Replace(SubField(pair, ',', 2), "'", ''), ')', ''))) AS Value

内容的提问来源于stack exchange,提问作者user17155772

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 15:15:05