Qlik Sense 增量加载数据

一、增量脚本思路

  1. 数据表中,必须有一个时间戳,或自增长主键
  2. 先创建一个全量抽取的 qvd
  3. 从 qvd 中获取最后插入的数据
  4. 将这个值转成变量
  5. 从数据库中抽取数据,做 where 条件,时间戳>变量
  6. 通过 Contencat 合并已经抽取好的 qvd数据
  7. 加载新数据集到 qvd;
  8. 在 qmc 中设置定时任务,形成定时增量抽取

二、脚本代码解析

1、全量抽取表数据,存为QVD

1
2
3
4
5
6
7
8
9
10
11
12
data:
LOAD
City,
"City Code",
Region,
Latitude,
Longitude,
"Desc"
FROM [lib://data/test_table.xlsx]
(ooxml, embedded labels, table is Cities);

store * from data into [lib:data/data.qvd](qvd);
SQL

2、从QVD加载数据

1
2
3
4
5
6
7
8
9
oldTable:
LOAD
City,
"City Code",
Region,
Latitude,
Longitude,
"Desc"
FROM [lib://data/data.qvd](qvd);
SQL

3、找到最后插入数据的时间戳(我这里是自增长主键)

1
2
3
4
max_Key:
load Max("City Code") as MaxKey
Resident oldTable;
//resident从之前加载的数据表中加载数据
SQL

4、将时间戳(主键)转成变量

1
Let max_Key = Peek('MaxKey',0,'max_Key');
SQL

5、从数据库中抽取更新数据

1
2
3
4
5
newTable:
Load
*
Form [lib://data/data.qvd](qvd)
Where City Code > $(max_Key);
SQL

6、合并全量数据表

1
2
3
4
Concatenate  //合并数据
Load
*
From [lib://data/data.qvd](qvd);
SQL

7、将增量抽取的数据存成Qvd

1
store newTable into [lib://data/data.qvd](qvd);
SQL

完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//抽取QVD中的数据
oldTable:
LOAD
*
FROM [lib://data/data.qvd]
(qvd);

//找到最后插入数据的时间戳,或者自增主键
//Resident 从已加载的数据表中加载数据
max_Key:
load Max(key) as MaxKey
Resident data;

//将最后的时间戳,或者主键存成变量
/**
* Peek() 用于在表格中查找已经加载或内部内存中存在的行的字段值。
* 可以将行号指定为表格。
* Peek (field_name[, row_no[, table_name ] ])
*/
Let max_Key = Peek('MaxKey',0,'max_Key');

/**
* 删除已经没用的数据表,
* 避免冗余数据造成Sense效率变慢
*/
Drop Table oldTable;

/**
* 增量加载数据部分
*/

//利用where条件,筛选出新增加的数据集
newTable:
LOAD
*
FROM [lib://data/data.xlsx]
where key > $(max_Key);

//拼接全量抽取的qvd
Concatenate
LOAD
*
FROM [lib://data/data.qvd]
(qvd);

//将抽取好的增量数据存入QVD
store NEWSENSORS into [lib://data/data.qvd](qvd);

/**
* 删除增量抽取的数据集
* 注:这里删除的原因是因为 ETL 和 OLAP 分开执行!
*/
Drop table newTable;
SQL

三、Qmc设置定时任务

1、打开 qmc,左侧栏找到 Tasks

2、进入Tasks,点击Create new

3、设置任务

  1. Step.1设置任务名称
  2. Step.2 选择执行任务的app
  3. Step.3勾选为启用任务
  4. Step.4任务会话超时,时长
  5. Step.5重试最大次数
  6. Step.6点击Actions

  1. 创建触发器

  1. 我们在这里创建一个每日触发器,双击进入编辑

  1. 我们在这里创建一个每日触发器,双击进入编辑

    1. Step.1设置触发器名称
    2. Step.2 勾选为启用任务
    3. Step.3 选择时区
      注意: 这里不改你的触发器触发事件会晚8个小时
    4. Step.4选择触发器开始执行的时间
    5. Step.5 最后确认选择触发机制
    6. Step.6 选择每几天出发一次任务
    7. Step.7任务结束时间,可以默认,不用时手动关闭!
    8. 点击 Ok 完成触发器设置

  1. 在Eidt reload Tasks页面点击Apply应用
  2. 退回到Tasks页面 查看新增的任务

至此,定时增量抽数已经讲解完毕!


Qlik Sense 增量加载数据
https://blog.pangcy.cn/2019/04/23/数据库相关/QlikSense/Qlik Sense 增量加载数据/
作者
子洋
发布于
2019年4月23日
许可协议