SSIS 自定义列 属性
SSIS Custom Column Property
我有一个一般性问题,希望有人可以回答有关创建用于数据流组件的自定义属性的问题。
是否可以创建在列级别使用的自定义属性?我可以在组件级别创建自定义属性,没问题,但这对我没有好处。
我想向输入列元数据添加两个属性(加密和解密)。
假设我有一个输入列 col1、col2、col3 的集合。作为一名开发人员,我想将 col3 的 Encrypt 值设置为 true,这样,在 运行 时间,col3 在加载到数据库之前被加密。
我已经使用自定义组件成功加密和解密。尽管如此,我还是在 Description 列中使用了值“e”和“d”,然后在 PreExecute 期间评估了该 Description。我根据 Description 的值设置了一个状态对象,并将其添加到一个在 ProcessInput 期间处理的集合中。我不认为使用 Description 是一件好事,这就是自定义属性的需要。
SSIS 列是否具有自定义属性?
答案是肯定的。 SSIS 列是继承IDTSColumn130
接口的对象。如 SSIS documentation 中所述,此接口包含一个名为 CustomPropertyCollection
的 属性,其中包含组件添加到输入的 IDTSCustomProperty100
个对象的集合。
某些组件向 SSIS 列添加一些自定义 属性,例如 派生列转换 。据我所知,一个名为 FriendlyExpression
的自定义组件用于以纯文本形式存储表达式。但是,无法在 Integration Services 包设计器中添加自定义属性 (Visual Studio)。
如何添加自定义属性?
我认为唯一的方法是以编程方式创建包并编辑这些值,或者开发一个在运行时添加这些属性的自定义 SSIS 组件。
这是一个使用 C# 读取 派生列转换 的自定义属性的示例。 (Reference)
foreach (IDTSInputColumn localIColumn in localInput.InputColumnCollection)
{
if (localIColumn.CustomPropertyCollection.Count == 2)
{
repository.AddAttribute(componentRepositoryID, localInput.Name + " [" + localIColumn.Name + "] [ID: " + localIColumn.ID.ToString() + "]", "From [" + localIColumn.UpstreamComponentName + "] " + FormatColumnDescription(localIColumn.Name, localIColumn.DataType, localIColumn.Length, localIColumn.Precision, localIColumn.Scale) + " Expression " +
localIColumn.CustomPropertyCollection["FriendlyExpression"].Value != null ? localIColumn.CustomPropertyCollection["FriendlyExpression"].Value.ToString() : "Not Available"
);
}
else
{
repository.AddAttribute(componentRepositoryID, localInput.Name + " [" + localIColumn.Name + "] [ID: " + localIColumn.ID.ToString() + "]", "From [" + localIColumn.UpstreamComponentName + "] " + FormatColumnDescription(localIColumn.Name, localIColumn.DataType, localIColumn.Length, localIColumn.Precision, localIColumn.Scale) + " Expression (See Ouput Column)");
}
//repository.AddObject(localIColumn.Name, "", ColumnEnumerator.ObjectTypes.Column, componentRepositoryID);
}
备选方案
您可以将列元数据存储在外部数据源中(SQL、XML、...)并在运行时加载它。或者您可以使用您在问题中提到的 Description
属性。
我有一个一般性问题,希望有人可以回答有关创建用于数据流组件的自定义属性的问题。
是否可以创建在列级别使用的自定义属性?我可以在组件级别创建自定义属性,没问题,但这对我没有好处。
我想向输入列元数据添加两个属性(加密和解密)。
假设我有一个输入列 col1、col2、col3 的集合。作为一名开发人员,我想将 col3 的 Encrypt 值设置为 true,这样,在 运行 时间,col3 在加载到数据库之前被加密。
我已经使用自定义组件成功加密和解密。尽管如此,我还是在 Description 列中使用了值“e”和“d”,然后在 PreExecute 期间评估了该 Description。我根据 Description 的值设置了一个状态对象,并将其添加到一个在 ProcessInput 期间处理的集合中。我不认为使用 Description 是一件好事,这就是自定义属性的需要。
SSIS 列是否具有自定义属性?
答案是肯定的。 SSIS 列是继承IDTSColumn130
接口的对象。如 SSIS documentation 中所述,此接口包含一个名为 CustomPropertyCollection
的 属性,其中包含组件添加到输入的 IDTSCustomProperty100
个对象的集合。
某些组件向 SSIS 列添加一些自定义 属性,例如 派生列转换 。据我所知,一个名为 FriendlyExpression
的自定义组件用于以纯文本形式存储表达式。但是,无法在 Integration Services 包设计器中添加自定义属性 (Visual Studio)。
如何添加自定义属性?
我认为唯一的方法是以编程方式创建包并编辑这些值,或者开发一个在运行时添加这些属性的自定义 SSIS 组件。
这是一个使用 C# 读取 派生列转换 的自定义属性的示例。 (Reference)
foreach (IDTSInputColumn localIColumn in localInput.InputColumnCollection)
{
if (localIColumn.CustomPropertyCollection.Count == 2)
{
repository.AddAttribute(componentRepositoryID, localInput.Name + " [" + localIColumn.Name + "] [ID: " + localIColumn.ID.ToString() + "]", "From [" + localIColumn.UpstreamComponentName + "] " + FormatColumnDescription(localIColumn.Name, localIColumn.DataType, localIColumn.Length, localIColumn.Precision, localIColumn.Scale) + " Expression " +
localIColumn.CustomPropertyCollection["FriendlyExpression"].Value != null ? localIColumn.CustomPropertyCollection["FriendlyExpression"].Value.ToString() : "Not Available"
);
}
else
{
repository.AddAttribute(componentRepositoryID, localInput.Name + " [" + localIColumn.Name + "] [ID: " + localIColumn.ID.ToString() + "]", "From [" + localIColumn.UpstreamComponentName + "] " + FormatColumnDescription(localIColumn.Name, localIColumn.DataType, localIColumn.Length, localIColumn.Precision, localIColumn.Scale) + " Expression (See Ouput Column)");
}
//repository.AddObject(localIColumn.Name, "", ColumnEnumerator.ObjectTypes.Column, componentRepositoryID);
}
备选方案
您可以将列元数据存储在外部数据源中(SQL、XML、...)并在运行时加载它。或者您可以使用您在问题中提到的 Description
属性。