总的来说,SSIS 中的百分比抽样转换用于数据建模。此 SSIS 百分比抽样转换从数据源中选择给定百分比的行。接下来,它将这些行传输到选定的输出行选项,其余行将移至未选定的输出行。
例如,如果输入有 1000 行,并且我们将百分比样本指定为十,那么 SSIS 百分比抽样转换将从输入数据中返回大约 10% 的随机记录。
SSIS 中的百分比抽样转换的功能与行抽样转换相同。唯一的区别是SSIS 百分比抽样选择的是行百分比而不是行数(行抽样)。
SSIS 百分比抽样转换示例
步骤 1:将数据流任务从工具箱拖放到设计器中,并将其重命名为“百分比抽样转换”

双击它将打开数据流选项卡。有关更多转换,请点击此处 >> 点击这里。
步骤 2:将 OLE DB 源、百分比抽样转换从工具箱拖放到数据流区域

步骤 3:双击数据流区域中的 OLE DB 源。它将打开连接管理器设置,并提供输入 SQL 语句的空间。

我们使用的 SQL 命令是
SELECT TOP 1000 [FirstName]
,[LastName]
,[BirthDate]
,[Gender]
,[EmailAddress]
,[YearlyIncome]
,[EnglishEducation]
,[Phone]
FROM [AdventureWorksDW2014].[dbo].[DimCustomer]
ORDER BY [YearlyIncome] DESC
目前,我们从 Adventure Works DW 2014 数据库的 DimCustomers 中选择了前 1000 行,并且我们希望将 40% 的行发送到目标表。点击列选项卡进行验证并取消选中不需要的列

步骤 5:点击“确定”并编辑 SSIS 百分比抽样转换。

在本例中,我们将输入行的 40% 选为选定行,其余行将作为剩余行。
提示:如果选中“使用以下随机种子”选项,则每次运行包时,它都会选择相同的行集。否则,SSIS 中的百分比抽样转换会随机选择行。
步骤 6:当我们尝试将百分比抽样连接到 OLE DB 目标时,会弹出一个“输入输出选择”窗口,提供选择输出的选项。首先,选择 40% 的行输出作为 OLE DB 目标的输入。当您将另一个箭头拖到另一个 OLE DB 目标时,它会自动选择剩余行的输出。

步骤 7:现在,我们需要提供目标的服务器、数据库和表详细信息。因此,双击 OLE DB Destination 并提供所需的信息。

在这里,我们选择了 SSIS Tutorials 数据库中的 [Percentage Sampling Selected Rows] 表
步骤 8:点击“映射”选项卡以检查从源列映射到目标列。

单击确定完成 40% 行的 OLE DB 目标的配置。
步骤 9:现在,我们需要配置剩余行的 OLE DB 目标。因此,双击 OLE DB 目标并提供所需信息。

在这里,我们选择了 SSIS Tutorials 数据库中的 [Percentage Sampling Remaining Rows] 表
步骤 10:重复步骤 8

单击确定完成我们在 SSIS 包设计中的百分比抽样转换。让我们运行包。

我们配置了 SSIS 中的百分比抽样转换,以从数据源中选择 40% 的行,即 400 行。从上面的屏幕截图来看,397 行被选中并传输到 [Percentage Sampling Selected Rows] 表,这意味着大约 40% 的行。剩余的 603 条记录被传输到 [Percentage Sampling Remaining Rows] 表
注意:百分比抽样转换不是选择确切百分比的行,而是选择近似百分比的行。此估算值在每次执行时都会有所不同。例如,如果您多次运行上述示例,您可能会得到 397、401、405、395 行等结果。
让我们打开Management Studio并检查两个表的结果。
选定行表
SELECT [FirstName],[LastName],[BirthDate]
,[Gender],[EmailAddress], [YearlyIncome]
,[EnglishEducation],[Phone]
FROM [AdventureWorksDW2014].[dbo].[Row Sampling Remaining Rows]
SELECT COUNT (*) FROM [Percentage Sampling Selected Rows]

剩余行表
SELECT [FirstName],[LastName],[BirthDate]
,[Gender],[EmailAddress], [YearlyIncome]
,[EnglishEducation],[Phone]
FROM [AdventureWorksDW2014].[dbo].[Percentage Sampling Remaining Rows]
SELECT COUNT (*) FROM [Percentage Sampling Remaining Rows]
