Sql 使用no和set counter更新标志/列值以创建小块文件
我总共有60个.txt文件,我正在尝试使用SSIS包处理并生成1个输出平面文件。这些60.txt文件加载到表中 现在输出文件将太大。所以我试着把这个文件分成6的chunck。因此,当我的ssis包运行时,将处理10个文件并创建1个 输出文件,然后再次运行ssis包并生成另一个文件。总共将有6个文件 我有一个SQL任务,它在SSIS包中获取这些不同的文件名,然后进行处理。有一个列名Sql 使用no和set counter更新标志/列值以创建小块文件,sql,ssis,Sql,Ssis,我总共有60个.txt文件,我正在尝试使用SSIS包处理并生成1个输出平面文件。这些60.txt文件加载到表中 现在输出文件将太大。所以我试着把这个文件分成6的chunck。因此,当我的ssis包运行时,将处理10个文件并创建1个 输出文件,然后再次运行ssis包并生成另一个文件。总共将有6个文件 我有一个SQL任务,它在SSIS包中获取这些不同的文件名,然后进行处理。有一个列名JobDone,我将其视为一个标志 SELECT DISTINCT FileName FROM Table A WHE
JobDone
,我将其视为一个标志
SELECT DISTINCT FileName FROM Table A WHERE JobDone IS NULL
我在表A中将列名声明为=>Bit null,因此SSIS包将拾取JobDone
值为null
的所有文件
通过上面的SQL语句,它将获取所有60个文件。现在我想一次只提取10个文件。我想用一些no来更新标志,例如7
这50个文件,所以当我的SSIS包运行时,只需要10个文件
在SSIS中完成这10个文件处理后,要将JobDone
的标志更新为NUL
L,以便从这50个文件中再运行10个文件,这10个文件将运行,现在剩下40个。然后,我想再次将标志更新为NULL
以获得10个以上的文件,并运行SSIS pacakge。直到所有正在处理的文件和6个输出文件生成
任何帮助都将不胜感激。
提前谢谢 如果我必须按照你的要求去做,我的软件包会是这样的(减去第一步) 在下面创建两个名为和对象类型的变量
- 文件名字符串
- 表列表对象
IF NOT EXISTS
(
SELECT *
FROM sys.tables AS T
WHERE T.name = 'Chunks' AND T.schema_id = SCHEMA_ID('dbo')
)
BEGIN
-- Source table
CREATE TABLE
dbo.Chunks
(
SourceFile varchar(50) NOT NULL
, JobDone bit NULL
, FileData varchar(500) NOT NULL
);
-- add some data
WITH SRC AS
(
SELECT
OBJECT_NAME(AC.object_id) AS SourceFile
, NULL AS bit
, AC.name AS FileData
FROM
sys.all_columns AS AC
)
, TOP60 AS
(
SELECT TOP 60
SRC.SourceFile
, COUNT(1) AS rc
FROM
SRC
GROUP BY
SRC.SourceFile
ORDER BY
2 DESC
)
INSERT INTO
dbo.Chunks
(
SourceFile
, JobDone
, FileData
)
SELECT
SRC.SourceFile
, SRC.bit
, SRC.FileData
FROM
TOP60 T
INNER JOIN
SRC
ON SRC.SourceFile = T.SourceFile;
END
我的OLEDB源代码类似于以下查询
-- grab all the data associated to them
SELECT
C.SourceFile
, C.JobDone
, C.FileData
FROM
dbo.Chunks AS C
WHERE
C.SourceFile IN
(
-- Grab any 10 sourcefile names that haven't been processed
SELECT TOP 10
C.SourceFile
FROM
dbo.Chunks AS C
WHERE
C.JobDone IS NULL
)
ORDER BY
C.SourceFile;
我的更新语句看起来像
UPDATE
C
SET
JobDone = 1
FROM
dbo.Chunks AS C
WHERE
C.JobDone IS NULL
AND C.FileName = ?;
如果我必须按照你的要求去做,我的包看起来会像这样(减去第一步) 在下面创建两个名为和对象类型的变量
- 文件名字符串
- 表列表对象
IF NOT EXISTS
(
SELECT *
FROM sys.tables AS T
WHERE T.name = 'Chunks' AND T.schema_id = SCHEMA_ID('dbo')
)
BEGIN
-- Source table
CREATE TABLE
dbo.Chunks
(
SourceFile varchar(50) NOT NULL
, JobDone bit NULL
, FileData varchar(500) NOT NULL
);
-- add some data
WITH SRC AS
(
SELECT
OBJECT_NAME(AC.object_id) AS SourceFile
, NULL AS bit
, AC.name AS FileData
FROM
sys.all_columns AS AC
)
, TOP60 AS
(
SELECT TOP 60
SRC.SourceFile
, COUNT(1) AS rc
FROM
SRC
GROUP BY
SRC.SourceFile
ORDER BY
2 DESC
)
INSERT INTO
dbo.Chunks
(
SourceFile
, JobDone
, FileData
)
SELECT
SRC.SourceFile
, SRC.bit
, SRC.FileData
FROM
TOP60 T
INNER JOIN
SRC
ON SRC.SourceFile = T.SourceFile;
END
我的OLEDB源代码类似于以下查询
-- grab all the data associated to them
SELECT
C.SourceFile
, C.JobDone
, C.FileData
FROM
dbo.Chunks AS C
WHERE
C.SourceFile IN
(
-- Grab any 10 sourcefile names that haven't been processed
SELECT TOP 10
C.SourceFile
FROM
dbo.Chunks AS C
WHERE
C.JobDone IS NULL
)
ORDER BY
C.SourceFile;
我的更新语句看起来像
UPDATE
C
SET
JobDone = 1
FROM
dbo.Chunks AS C
WHERE
C.JobDone IS NULL
AND C.FileName = ?;
听起来这里发生了很多事情。您只是想讨论如何更新位字段,还是想深入研究更大的问题?只是想讨论更新表a中的其他内容文件00、文件10、文件30、文件45和文件59(假设我列出了10)是否进入输出文件还是存在某种隐式顺序(File00-File09)组成一个输出批?这些文件有多大?除了合并这些文件之外,SSIS包的作用是什么?不要紧,只需一次抓取10个文件,并将标志更新为其他文件,这样它就不会拾取这些文件。因此,运行10个文件,然后SSIS包将用“是”更新标志,以更新完成任务的那些文件-JobDone 1,然后再从这些大块文件中,我想更新列JobDone=Null的值,以便它拾取这些文件并处理它们。听起来这里有很多事情。你只是想谈谈如何更新位字段,还是想深入探讨更大的问题?只是想谈谈日期
表A中还有什么
文件00、文件10、文件30、文件45和文件59(假设我列出了10)进入输出文件还是存在某种隐式顺序(文件00-文件09)重要吗组成一个输出批?这些文件有多大?除了合并这些文件之外,SSIS包的作用是什么?不要紧,只需一次抓取10个文件,并将标志更新为其他文件,这样它就不会拾取这些文件。因此,运行10个文件,然后SSIS包将用“是”更新标志,以更新完成任务的那些文件-JobDone 1,然后再次从这些大块文件中,我想更新列JobDone=Null的值,以便它拾取这些文件并处理它们。非常感谢,这非常有用。但这一点我并没有更改SSIS包。我只需要SQL update语句。类似于设置计数器的内容。最初JobDone将为Null。对于5的其余部分0个文件,我需要将列JobDone标志更改为类似7的内容。因此,当SSIS包运行时,它不会拾取这50个文件。是否有类似于使用update语句设置计数器的内容?我回答中的最后一个语句是on,用于指示特定文件已被处理。我是否误解了您的问题?这是al准备好了吗?我正在ssis包中进行操作。处理完我的文件后,我将更新JobDone=1。您能编辑您的问题以准确定义您需要的帮助吗?我知道我很困惑。非常感谢您,这非常有用。但这一点我并没有更改ssis包。我只需要SQL update语句。我需要一些