从db2获取前n至n行

时间:2019-02-28 12:21:58

标签: sql-server ssis db2 etl batch-processing

我需要将一个巨大的表分成多个块。

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

  

迭代1:获取前10行并对其进行处理

     

迭代2:获取下10行(11-20)并进行处理

     

迭代3:获取下10行(21-30)并进行处理

依次类推,直到表的计数(*)

是否有可能从db2中获得前n至n行

正在寻找如下查询

  

从表名中选择*可获取10到20行

2 个答案:

答案 0 :(得分: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 :(得分:1)

使用OFFSET x FETCH FIRST y ROWS ONLY选项按块读取数据

要从SSIS中使用此方法,请执行以下步骤:

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

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

以下答案是从SQLite逐块加载数据的分步指南,您可以遵循它,只需更改所提到的SQL Command语法即可:

参考