SSIS:如何修复来自 ADO NET 源的警告 "the output column is not subsequently used"
SSIS: How to fix warning "the output column is not subsequently used" from ADO NET Source
我正在编写一个 SSIS 包来获取一些文本数据,将其与 SQL 服务器中 table 的字段连接起来,然后将数据插入 table .我正在使用 SQL Server Data Tools 2015 和 SQL Server 2014。
我已经配置了一个连接管理器,它带有到数据库的 ADO NET 连接。在这个特定的数据流组件中,我有一个 ADO NET 源,它突出显示了该数据库中的 table。我获取 table 数据,对其进行排序,然后执行 Merge Join。我只需要来自该 ADO NET 源的 Id 和 Field1。为了方便讨论,假设它也有Field2和Field3。
当我 运行 作业时,我收到 Field2 和 Field3 的以下警告:
[SSIS.Pipeline] Warning: The output column "Field2" (45) on output "ADO >NET Source Output" (42) and component "ADO NET Source" (34) is not subsequently >used in the Data Flow task. Removing this unused output column can increase >Data Flow task performance.
我正在处理大量数据,所以如果可以避免,我不想将这些数据存入内存。我假设要走的路是通过删除输出列将其从 ADO NET 源中删除。但是,当我双击 ADO NET 源和 select 列时,我看到 table 的左侧是外部列,右侧是输出列。当我右键单击这些列映射之一时 none 启用上下文菜单中的选项(剪切、复制、粘贴、删除)
当我进入高级编辑器视图(通过右键单击 ADO NET 源并 select 显示高级编辑器)时,我然后导航到列映射选项卡。我删除了不需要的列的映射,然后 select 确定。当我再次打开高级编辑器时,映射再次出现,就好像它们没有被删除一样。此外,当我转到输入和输出属性和 select "Remove Column" 时,我收到以下错误:
The column cannot be deleted. The component does not allow columns to be >deleted from this input or output.
Pipeline component has returned HRESULT error code 0xC0208018
有谁知道我如何 trim 从 ADO NET 源中获取数据?
您必须删除不需要的列,方法是编写 SQL 而不是 selecting 源中的 table 本身。当您 select table 时,它会将 table 中的所有列显示为 source/input。因此,编写一个 SQL 查询以仅获取您需要的那些列。
所以你在这里没有几个选择:
在Data Source任务中你可以select SQL命令作为数据访问模式并制作SQL命令,它只会select您之后的专栏。您也可以在此处应用排序。
- 在源数据库中创建一个仅包含您在 SSIS 进程中需要的列的视图,并在数据源任务中引用该视图
第二个选项允许您只传递您之后的列,但您仍然需要应用排序。
第一个选项允许您对数据库中的记录进行排序,这是更可取的方式,您也可以在高级编辑器中设置排序选项,这意味着您不需要使用排序任务。但是,您最终会得到必须维护的嵌入式 SQL 。我认为您可以在此步骤中使用存储过程,这样您就可以将维护工作移至数据库,并在需要时重用代码。
我正在编写一个 SSIS 包来获取一些文本数据,将其与 SQL 服务器中 table 的字段连接起来,然后将数据插入 table .我正在使用 SQL Server Data Tools 2015 和 SQL Server 2014。
我已经配置了一个连接管理器,它带有到数据库的 ADO NET 连接。在这个特定的数据流组件中,我有一个 ADO NET 源,它突出显示了该数据库中的 table。我获取 table 数据,对其进行排序,然后执行 Merge Join。我只需要来自该 ADO NET 源的 Id 和 Field1。为了方便讨论,假设它也有Field2和Field3。
当我 运行 作业时,我收到 Field2 和 Field3 的以下警告:
[SSIS.Pipeline] Warning: The output column "Field2" (45) on output "ADO >NET Source Output" (42) and component "ADO NET Source" (34) is not subsequently >used in the Data Flow task. Removing this unused output column can increase >Data Flow task performance.
我正在处理大量数据,所以如果可以避免,我不想将这些数据存入内存。我假设要走的路是通过删除输出列将其从 ADO NET 源中删除。但是,当我双击 ADO NET 源和 select 列时,我看到 table 的左侧是外部列,右侧是输出列。当我右键单击这些列映射之一时 none 启用上下文菜单中的选项(剪切、复制、粘贴、删除)
当我进入高级编辑器视图(通过右键单击 ADO NET 源并 select 显示高级编辑器)时,我然后导航到列映射选项卡。我删除了不需要的列的映射,然后 select 确定。当我再次打开高级编辑器时,映射再次出现,就好像它们没有被删除一样。此外,当我转到输入和输出属性和 select "Remove Column" 时,我收到以下错误:
The column cannot be deleted. The component does not allow columns to be >deleted from this input or output. Pipeline component has returned HRESULT error code 0xC0208018
有谁知道我如何 trim 从 ADO NET 源中获取数据?
您必须删除不需要的列,方法是编写 SQL 而不是 selecting 源中的 table 本身。当您 select table 时,它会将 table 中的所有列显示为 source/input。因此,编写一个 SQL 查询以仅获取您需要的那些列。
所以你在这里没有几个选择:
在Data Source任务中你可以select SQL命令作为数据访问模式并制作SQL命令,它只会select您之后的专栏。您也可以在此处应用排序。
- 在源数据库中创建一个仅包含您在 SSIS 进程中需要的列的视图,并在数据源任务中引用该视图
第二个选项允许您只传递您之后的列,但您仍然需要应用排序。
第一个选项允许您对数据库中的记录进行排序,这是更可取的方式,您也可以在高级编辑器中设置排序选项,这意味着您不需要使用排序任务。但是,您最终会得到必须维护的嵌入式 SQL 。我认为您可以在此步骤中使用存储过程,这样您就可以将维护工作移至数据库,并在需要时重用代码。