【问题标题】:Getting top n to n rows from db2从 db2 获取前 n 到 n 行
【发布时间】:2019-07-22 08:46:32
【问题描述】:

我需要将一个大表拆分成块。

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

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

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

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

以此类推,直到一个表的 count(*)

是否可以从 db2 获取前 n 到 n 行

我正在寻找如下查询,

select * from from tablename fetch 10 到 20 行

【问题讨论】:

  • 什么是 DB2 版本和平台?
  • 当您用 ssis 标记您的问题时,您如何接受并投票赞成与 ssis 无关的答案,这很奇怪?!同时你忽略了 ssis 的答案

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


【解决方案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.

【讨论】:

    【解决方案2】:

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

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

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

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

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

    参考文献

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-21
      • 2015-02-04
      • 1970-01-01
      • 2017-04-05
      • 1970-01-01
      相关资源
      最近更新 更多