gpt4 book ai didi

c# - 如何获取 BIML 脚本中的输出列列表 - 基于列的生成

转载 作者:太空宇宙 更新时间:2023-11-03 14:38:41 24 4
gpt4 key购买 nike

我正在将现有的SSIS包生成框架迁移到BIML,面临迁移以下逻辑的任务。
该框架(用 C# 编写)基于元数据创建一个 OLE DB 源。然后,在实例化数据源之后,它会查看输出列。如果存在某些列 - 框架会注入(inject)特定的转换,例如 Lookup 等。

Example of that logic - OLE DB Source uses query select quantity, salesdate, prcode as productid from salesfact. Then code looks up for productid column and checks whether it has int data type. If this is the case - adds Lookup, which is defined by the lookup column ProductID, has fixed lookup query/cache and provides new column DimProductID.

该方法非常动态,因为 OLE DB 源 可以从变量或参数中获取 SQL Select 语句。它运行正确,执行 OLE DB 源Instantiate() 调用提供转换元数据中的必要列。
问题 - 这种动态方法可以在 BIML 中实现吗?如果是 - 任何见解或例子都会很棒。目前 BIML 似乎完全是声明性的(即所有元数据都必须在 BIML 脚本运行之前在某处定义)。

最佳答案

经过一些研究,我得出结论,BIML 的工作方式与我们的通用方法不同。
生成 SSIS 包的 BIML 操作可分为两个阶段:

  • BIML 生成阶段 - 当所有 C# 代码位修改模板 BIML 时。它被命名为 BIML Expansion,采用带有 C#/VB n​​ugets 的 BIML 并生成纯 BIML 文本。注意 - 如果您有静态 BIML(这毫无意义),则可以不存在此阶段。
  • 基于 BIML 的 SSIS 包生成。 BIML 文本在这里是固定的,没有动态,都是在第一阶段工作的。

请注意,BIML 扩展是离线完成的,即您可能没有连接到 SSIS 包中使用的数据库。基于 BIML 生成 SSIS 包需要数据库连接,或者您必须使用 BIML 离线架构

相反,用MS SSIS API生成SSIS是完全在线的。添加每个任务或转换实例化此类对象,联系数据库。对于 OLE DB 源 - 建立到 DB 的连接,并检索列名称及其格式的列表。 “在线” 工作允许您即时检索列列表(即元数据),并且在元数据上非常简单和灵活。
BIML 规定您应该在 BIML 生成阶段 以某种方式了解所有元数据,此时您可以控制进入 BIML 代码/包的内容。

回到最初的问题——我们决定限制灵 active 。元数据描述了用于获取带有可选参数的数据的 SQL 查询。添加了一个 C# 模块,该模块连接到数据库并获取列及其格式的列表,其中一个接收逻辑和条件 BIML 所需的元数据。

关于c# - 如何获取 BIML 脚本中的输出列列表 - 基于列的生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58798077/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com