BIML:有关 varchar > 255 的 ODBC 源列上数据类型处理的问题

BIML: Issues about Datatype-Handling on ODBC-Source Columns with varchar > 255

我刚刚接触 BIML 并编写了一些脚本来创建一些 DTSX 包。一般来说,大多数事情都在起作用。但是有一件事让我抓狂。

我有一个 ODBC 源 (PostgreSQL)。从那里我使用 ODBC 源从 table 中获取数据。 table 有一个文本列(列的名称是“描述”)。我在 ODBC-Source 的查询中将此列转换为 varchar(4000)(我知道会有截断,但没关系)。如果我在 Visual Studio 中手动执行此操作,则 ODBC 源的高级编辑器将显示“Unicode 字符串 [DT_WSTR]”,外部列和输出列的长度均为 4000。所以一切都很好。但是,如果我用 BIML 做同样的事情并生成 SSIS 包,外部列仍会显示长度为 4000 的“Unicode 字符串 [DT_WSTR]”,但输出列会显示“Unicode 文本流[DT_NTEXT]”。因此,BIML 完成的映射不同于 SSIS(手动)完成的映射。这导致了两件事(警告):

  1. 元数据已更改且应同步的警告
  2. 以及源使用 LOB-Columns 并通过 Row-Fetch 设置为 Row 的警告..

两个警告都不酷。但是第二个也会导致性能急剧下降!如果我将转换设置为 varchar(255),则映射很好(外部列和输出列然后是“Unicode 字符串 [DT_WSTR]”,长度为 255)。但是一旦我走得更高,就像 varchar(256) 它在输出中再次被视为 [DT_NTEXT]。

我能做些什么吗?我在 BIML 评估中投入了数天时间,发现生活质量有很多提高,但这个问题正在扼杀它。如果我必须在每次构建后手动更正 BIML 的错误,这就违背了 BIML 的目的。

有谁知道我该如何解决这个问题?外部列和输出列之间正确的自动映射会很棒,但至少可以选择自己定义映射。

感谢任何帮助!

问候 马可

编辑 根据要求提供一个最小示例以便更好地理解:

在我从另一个方向得到答案之前的评论中提到:

您必须在 BIML 的 ODBC-Source 中使用 DataflowOverrides。对于我的示例,您必须执行以下操作:

`<OdbcSource Name="mySource" Connection="mySourceConnection">
  <DirectInput>SELECT description::varchar(4000) from mySourceTable</DirectInput>
  <DataflowOverrides>
    <OutputPath OutputPathName="Output">
      <Columns>
        <Column ColumnName="description" SsisDataTypeOverride="DT_WSTR" DataType="String" Length="4000" />
      </Columns>
    </OutputPath>
    <OutputPath OutputPathName="Error">
      <Columns>
        <Column ColumnName="description" SsisDataTypeOverride="DT_WSTR" DataType="String" Length="4000" />
      </Columns>
    </OutputPath>
  </DataflowOverrides>
</OdbcSource>`

您不必对所有列进行覆盖,只需对 mapping-Issues 具有的列进行覆盖。

希望这个解决方案可以帮助路过的人。

干杯