跳过 BIML SSIS 脚本中的列
Skip columns in BIML SSIS Script
我使用以下 BIML 脚本根据源数据库创建每个 table 列的列表。我还添加了列 dwh_timestamp。我使用此脚本创建目标 tables,添加元数据列。
<Columns>
<# foreach (var column in table.Columns) { #>
<#=column.GetBiml()#>
<# } #>
<Column Name="dwh_timestamp" DataType="DateTime" IsNullable="true"/>
</Columns>
我使用以下代码创建将从源导入数据的 SSIS 包。
<DirectInput>SELECT <#=table.GetColumnList()#> FROM <#=table.GetTag("SourceSchemaQualifiedName")#></DirectInput>
然而,这会导致错误,因为源 table 不包含 dwh_timestamp 列。
我如何过滤 table.GetColumnList() 以便它跳过带有 "dwh_" 前缀的列?
在 Biml 中有几种过滤列列表的方法。
您可以过滤列名或部分列名:
<#=table.GetColumnList(c => c.Name != "dwh_timestamp")#>
<#=table.GetColumnList(c => c.Name.StartsWith("dwh_"))#>
一个更可重用的解决方案是在列上创建注释并在注释上进行过滤:
<Columns>
<# foreach (var column in table.Columns) { #>
<#=column.GetBiml()#>
<# } #>
<Column Name="dwh_timestamp" DataType="DateTime" IsNullable="true">
<Annotations>
<Annotation AnnotationType="Tag" Tag="IsDWHColumn">Yes</Annotation>
</Annotations>
</Column>
</Columns>
<#=table.GetColumnList(c => c.GetTag("IsDWHColumn") != "Yes")#>
当然,您可以选择自己的注释策略。您可能希望使用 "true" 和 "false" 而不是 "Yes" 和 "No",或者反转注释逻辑以指定哪些列是源列而不是 DWH 列。
我使用以下 BIML 脚本根据源数据库创建每个 table 列的列表。我还添加了列 dwh_timestamp。我使用此脚本创建目标 tables,添加元数据列。
<Columns>
<# foreach (var column in table.Columns) { #>
<#=column.GetBiml()#>
<# } #>
<Column Name="dwh_timestamp" DataType="DateTime" IsNullable="true"/>
</Columns>
我使用以下代码创建将从源导入数据的 SSIS 包。
<DirectInput>SELECT <#=table.GetColumnList()#> FROM <#=table.GetTag("SourceSchemaQualifiedName")#></DirectInput>
然而,这会导致错误,因为源 table 不包含 dwh_timestamp 列。
我如何过滤 table.GetColumnList() 以便它跳过带有 "dwh_" 前缀的列?
在 Biml 中有几种过滤列列表的方法。
您可以过滤列名或部分列名:
<#=table.GetColumnList(c => c.Name != "dwh_timestamp")#>
<#=table.GetColumnList(c => c.Name.StartsWith("dwh_"))#>
一个更可重用的解决方案是在列上创建注释并在注释上进行过滤:
<Columns>
<# foreach (var column in table.Columns) { #>
<#=column.GetBiml()#>
<# } #>
<Column Name="dwh_timestamp" DataType="DateTime" IsNullable="true">
<Annotations>
<Annotation AnnotationType="Tag" Tag="IsDWHColumn">Yes</Annotation>
</Annotations>
</Column>
</Columns>
<#=table.GetColumnList(c => c.GetTag("IsDWHColumn") != "Yes")#>
当然,您可以选择自己的注释策略。您可能希望使用 "true" 和 "false" 而不是 "Yes" 和 "No",或者反转注释逻辑以指定哪些列是源列而不是 DWH 列。