从 db2 获取前 n 到 n 行
Getting top n to n rows from db2
我需要将一个巨大的 table 分成几块。
正在从 DB2 中获取数据并在 SSIS 中进行处理
iteration 1 : Get first 10 rows and process it
iteration 2 : Get next 10 rows(11-20) and process it
iteration 3 : Get next 10 rows(21-30) and process it
等等,直到 table
的计数 (*)
是否可以从 db2 中获取前 n 到 n 行
我正在寻找如下查询,
select * from from tablename fetch 10 to 20 rows
db2 "select row_number() over(order by tabschema, tabname)
, tabschema::char(10), tabname::char(30)
from syscat.tables
order by tabschema, tabname
offset 10 rows
fetch first 10 rows only"
1 2 3
-------------------- ---------- ------------------------------
11 SYSCAT COLCHECKS
12 SYSCAT COLDIST
13 SYSCAT COLGROUPCOLS
14 SYSCAT COLGROUPDIST
15 SYSCAT COLGROUPDISTCOUNTS
16 SYSCAT COLGROUPS
17 SYSCAT COLIDENTATTRIBUTES
18 SYSCAT COLLATIONS
19 SYSCAT COLOPTIONS
20 SYSCAT COLUMNS
10 record(s) selected.
使用 OFFSET x FETCH FIRST y ROWS ONLY 选项按块读取数据
要在 SSIS 中使用此方法,您应该执行以下步骤:
- 添加执行SQL任务以获取行数并将其存储到变量中。
- 添加一个 Forloop 容器以循环遍历一系列数字,直到达到行数
- 在 Forloop 容器内,添加一个包含 OLEDB 源或 ODBC 和 OLEDB 目标的数据流任务
In OLEDB/ODBC Source, Set the Access mode to SQL Command and define an epxression similar to:
"SELECT * FROM MYTABLE ORDER BY ID_COLUMN
OFFSET " + (DT_WSTR,50)@[User::IncrementValue] + "
FETCH FIRST " + (DT_WSTR,50)@[User::IncrementValue] + " ROWS ONLY"
以下答案是从 SQLite 分块加载数据的分步指南,您只需更改 SQL 命令语法即可:
参考资料
- SQL Paging With Limit And Offset In DB2 For i
- Using the OFFSET clause with a cursor
- DB2 Using LIMIT and OFFSET
-
使用 LIMIT 和 OFFSET 或 ROWNUM
对结果集进行分页
我需要将一个巨大的 table 分成几块。
正在从 DB2 中获取数据并在 SSIS 中进行处理
iteration 1 : Get first 10 rows and process it
iteration 2 : Get next 10 rows(11-20) and process it
iteration 3 : Get next 10 rows(21-30) and process it
等等,直到 table
的计数 (*)是否可以从 db2 中获取前 n 到 n 行
我正在寻找如下查询,
select * from from tablename fetch 10 to 20 rows
db2 "select row_number() over(order by tabschema, tabname)
, tabschema::char(10), tabname::char(30)
from syscat.tables
order by tabschema, tabname
offset 10 rows
fetch first 10 rows only"
1 2 3
-------------------- ---------- ------------------------------
11 SYSCAT COLCHECKS
12 SYSCAT COLDIST
13 SYSCAT COLGROUPCOLS
14 SYSCAT COLGROUPDIST
15 SYSCAT COLGROUPDISTCOUNTS
16 SYSCAT COLGROUPS
17 SYSCAT COLIDENTATTRIBUTES
18 SYSCAT COLLATIONS
19 SYSCAT COLOPTIONS
20 SYSCAT COLUMNS
10 record(s) selected.
使用 OFFSET x FETCH FIRST y ROWS ONLY 选项按块读取数据
要在 SSIS 中使用此方法,您应该执行以下步骤:
- 添加执行SQL任务以获取行数并将其存储到变量中。
- 添加一个 Forloop 容器以循环遍历一系列数字,直到达到行数
- 在 Forloop 容器内,添加一个包含 OLEDB 源或 ODBC 和 OLEDB 目标的数据流任务
In OLEDB/ODBC Source, Set the Access mode to SQL Command and define an epxression similar to:
"SELECT * FROM MYTABLE ORDER BY ID_COLUMN OFFSET " + (DT_WSTR,50)@[User::IncrementValue] + " FETCH FIRST " + (DT_WSTR,50)@[User::IncrementValue] + " ROWS ONLY"
以下答案是从 SQLite 分块加载数据的分步指南,您只需更改 SQL 命令语法即可:
参考资料
- SQL Paging With Limit And Offset In DB2 For i
- Using the OFFSET clause with a cursor
- DB2 Using LIMIT and OFFSET
- 使用 LIMIT 和 OFFSET 或 ROWNUM 对结果集进行分页