【问题标题】:Remove Line Feeds and first character from large (2GB) XML file on Windows从 Windows 上的大 (2GB) XML 文件中删除换行符和第一个字符
【发布时间】:2014-06-10 13:44:34
【问题描述】:

我有一个来自第三方的 XML 文件,它被分解为用换行符分隔的非静态长度行。

还有一个奇怪的第一个字符需要从文件中删除。

我相当肯定以上两项会导致使用 SSIS 加载 XML 文件时出现问题。如果我手动删除它们(从较小的样本中),XML 文件可以通过 SSIS 加载。

此时我已尝试同时使用 SSIS 和 Powershell 来尝试修复文件。

SSIS 导致奇怪地添加了分隔符。

我在一小部分数据上使用 Powershell 的尝试更有成效,但我的实际文件通常会超过 2GB,而且我不断收到 System.OutOfMemory 异常。我增加了 Powershell 的“maxmemorypershellmb”(并重新启动了 winrm),但它似乎没有阻止 OutOfMemory 错误。

当前使用小样本文件的 Powershell 尝试:

-join ((Get-Content "C:\Code\input.xml") -replace '^\w$', '') | Set-Content -Path "C:\Code\output-nolinefeed.xml"

-join ((Get-Content "C:\Code\output-nolinefeed.xml").substring(1) | Set-Content -Path "C:\Code\output-nolinefeed-removefirstchar.xml"

如果上述两个命令都在示例文件上运行,它将导入到 SSIS(XML 源 -> 派生列 -> SQL Server 目标)。

在 Notepad++(下)中查看它,看看它是如何在“小于”字符上出现某种类型的黑色污迹的。其他“小于”字符都显示正常。此外,霓虹绿也是我可以选择的某种空间类型。

当我打开文件时,它是 UTF-8。选择 Encoding -> Covert to ASCII 会导致空格和“小于”字符转换为单个问号。

除了奇怪的第一个字符和换行符的原因(假设两者都不能用 SSIS 处理),此时我需要一些命令行编辑器来优雅地处理大文件。

【问题讨论】:

  • 2GB 是 XML ssis 可以处理的最大大小,你会突破极限
  • 嗨 Jayvee,你有这个的来源吗?在此链接上,作者加载了一个大于 2GB 的文件:ideaexcursion.com/2009/01/26/…
  • 阅读这篇文章似乎没有限制,虽然这是指 xml 源组件,但我对 2gb+ xml 文件的(坏)经验与使用 xml 任务的验证有关。 2gb 仍然是 blob sql 服务器的限制,我会更准确地找出在什么情况下这会影响 SSIS。如果将其作为平面文件读取并且不打算将其加载到 sql server,则无论如何您都不会受到 2gb 限制的影响。你的新字符串是拆分成很多还是只是一个大字符串?
  • 我确实打算将 XML 加载到表中。我已经开始在命令行上使用 PS 来去除换行符。
  • @Jayvee - 将其编辑为不需要 SSIS

标签: powershell ssis


【解决方案1】:

我会使用 Foxe 编辑器来处理怪物 XML 文件:

http://www.firstobject.com/dn_editor.htm

就我使用它而言,它速度惊人,而且看起来很可靠。

显然它有一个基于 C++ 的脚本语言,但我没有尝试过。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    • 2011-04-11
    相关资源
    最近更新 更多