【问题标题】:Importing a tab delimited file in SSIS with one field bigger than 255 characters在 SSIS 中导入一个字段大于 255 个字符的制表符分隔文件
【发布时间】:2012-01-13 14:18:44
【问题描述】:

我正在导入制表符分隔的文件并收到此错误。

错误:任务 3 处的 0xC02020A1 - 核心数据、平面文件的数据加载 来源 [14]:数据转换失败。列的数据转换 “第 85 列”返回状态值 4 和状态文本“Text was 截断或一个或多个字符在目标代码中不匹配 页。”。

错误:任务 3 处的 0xC020902A - 核心数据、平面文件的数据加载 来源 [14]:“输出列“列 85”(448)”失败,因为 发生截断,并且“输出”上的截断行处置 列“第 85 列”(448)“指定截断失败。 在指定的指定对象上发生截断错误 零件。错误:任务 3 处的 0xC0202092 - 核心数据的数据加载,平面 文件源 [14]:处理文件时发生错误 数据行 540 上的“C:\Metrics\report-quoteCoreData.csv”。错误: 任务 3 中的 0xC0047038 - 报价核心数据的数据加载,SSIS.Pipeline: SSIS 错误代码 DTS_E_PRIMEOUTPUTFAILED。 PrimeOutput 方法 组件“平面文件源”(14) 返回错误代码 0xC0202092。这 管道引擎调用时组件返回失败代码 素数输出()。故障代码的含义由 组件,但错误是致命的并且管道停止执行。 在此之前可能会发布错误消息更多

当我在它似乎导入的字段之一上设置截断错误忽略时。

不幸的是我得到了

Column A ( customer ) Column B ( Location ) Column C ( should be Y or N )
Jimmy                        New York               ssssss  ( instead of Y ) 

在这一行上,我有一个较早的字段,它超过 255 个字符并导致 SSIS 中出现上述错误。如果我告诉它忽略错误,我会得到为该行插入的错误数据。 “Ssss ....”是超过 255 个字符的字段。

这里有什么解决办法?

【问题讨论】:

  • 我很乐意回答您的问题,但请花点时间查看您的所有其他 7 个 open questions 并将它们标记为已回答或提供反馈.
  • 不知道该怎么做?看了看,但不知道如何查看或将它们作为答案。
  • 对于here 列出的每个问题,请阅读可用答案。如果它们是有用的答案,请单击数字左侧的向上 V 形/箭头。如果可用答案中的某些内容解决了您的问题,请单击复选标记的轮廓,它将将该响应标记为答案。 Concrete example,gbn 和 dems 的回复很有帮助,值得点赞。检查 gbn 的答案,因为它是第一个和详细的。

标签: sql-server-2008 ssis


【解决方案1】:

在平面文件连接管理器中,您需要调整不足以容纳传入值的每一列的 OutputColumnWidth 属性。在您的示例中,Column 85 当前定义为 255 个字符,因此将其提高到一个合理的值。目标是使该值足够大以覆盖传入的数据,但又不会大到浪费内存空间。

一旦您更改了连接管理器,任何使用相同 CM 的数据流都会报告列定义已更改,您需要进入它们,双击并让新的元数据向下流动。

我见过在某些类型的转换后元数据不会自动刷新的情况(Union All I'm looking at you)。作为健全性检查,双击您的目的地(可能是 OLE DB 目的地)之前的连接器。单击元数据选项卡并确保 Column 85 为 500 或您分配的任何值。如果不是,那么您得到 沿着链条往回走,找出卡在哪里。最简单的解决方法通常是删除麻烦的转换并重新添加。

【讨论】:

  • Union 不会更新输出元数据,即使所有输入都已更改。最简单的解决方案是删除联合中的那一行并读取它。
  • 根据您放置数据的位置(以及太大的字段的性质),您可能需要添加功能以将其修剪为表的字段大小或发送到异常如果它太大或更改最终生产表字段的大小。
【解决方案2】:

我在导入包含超过 255 个字符的字段的 CSV 文件时遇到了这个问题,我使用 python 解决了这个问题。

只需在 pandas 数据框中导入 CSV,然后计算每行这些字符串值的长度

然后按降序对数据框进行排序。这将使 SSIS 在扫描前 3 行以分配存储空间时为该字段分配最大空间

df = pd.read_csv(f,sheet_name=0,skiprows = 1)
df = df.drop(df.columns[[0]], axis = 1)
df['length'] = df['Item Description'].str.len()
df.sort_values('length', ascending=False, inplace=True)
writer = ExcelWriter('Clean/Cleaned_'+f[5:])
df.to_excel(writer,sheet_name='Billing',index=False)
writer.save()

【讨论】:

    猜你喜欢
    • 2016-08-25
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    • 2014-10-14
    • 2011-02-01
    • 2012-05-13
    • 2010-10-20
    • 1970-01-01
    相关资源
    最近更新 更多