从db2获取n行到n行

问题描述 投票:2回答:2

我需要将一张巨大的桌子拆分成块。

从DB2获取数据并在SSIS中处理

迭代1:获取前10行并处理它

迭代2:获取接下来的10行(11-20)并处理它

迭代3:获取接下来的10行(21-30)并处理它

等等到表的计数(*)

是否有可能从db2获得n行到n行

我正在寻找如下的查询,

select * from from tablename fetch 10到20行

sql-server ssis db2 etl batch-processing
2个回答
1
投票

https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0061832.html

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.

1
投票

Use OFFSET x FETCH FIRST y ROWS ONLY option to read data by chunk

要在SSIS中受益于此方法,您应该按照以下步骤操作:

  1. 添加执行SQL任务以获取行计数并将其存储到变量中。
  2. 添加For循环容器以循环遍历一系列数字,直到达到行计数
  3. 在For循环容器内,添加包含OLE DB源或ODBC和OLEDB目标的数据流任务
  4. 在OLEDB / ODBC Source中,将Access模式设置为SQL Command并定义类似于的表达式: qazxsw poi

以下答案是按步骤从SQLite加载数据的分步指南,您可以按照它更改SQL Command语法,如上所述:

  • "SELECT * FROM MYTABLE ORDER BY ID_COLUMN OFFSET " + (DT_WSTR,50)@[User::IncrementValue] + " FETCH FIRST " + (DT_WSTR,50)@[User::IncrementValue] + " ROWS ONLY"

References

© www.soinside.com 2019 - 2024. All rights reserved.