【问题标题】:Read from XML into multiple SAS tables从 XML 读取到多个 SAS 表
【发布时间】:2015-07-18 07:39:36
【问题描述】:

我有 XML 格式的电子邮件数据,我正在尝试将其加载到多个 SAS 表中。 XML 的结构不是扁平的,并且在层次结构中有多个级别。从这个 XML 文件中,我想创建几个 SAS 表(例如,发件人、收件人、附件、电子邮件正文和元数据......)。显然,对于一封电子邮件,将有一个发件人,一封电子邮件,但有任意数量的收件人和附件。为此,我目前正在使用 XML Map 文件将数据转换为我需要的表。

我遇到的问题是,通过将 xmlv2 引擎与 MAP 文件一起使用,SAS 似乎为我要创建的每个表读取一次 XML 文件。这会产生一个问题,因为它不能很好地扩展!例如,如果我有 200GB 的 XML 文件并想创建 10 个表,我将读取 2TB 的数据来执行此操作。有没有更好的方法来处理 XML 文件,这样我只需执行一次文件即可将所有数据读入 SAS 数据集?

提前致谢。

【问题讨论】:

  • 如何将 xmlv2 引擎与地图文件一起使用? IE,所以你有一个libname xmlv2 myxmlf "blah.xml";,现在你要做什么来创建你的十个文件?
  • 有没有一种方法可以预处理 XML 文件以将它们全部组合成一个巨大的 XML 文件。这样,每个表只会读取一次文件。仍然不理想但也许可行?
  • 我以前导入 4GB XML,耗时很长。您可以考虑在导入 SAS 之前对数据进行预处理。

标签: xml sas


【解决方案1】:

将目录分配为聚合文件位置,并使用数据步骤在单个数据步骤中依次访问文件。在 sas 帮助中的 filevar 上搜索如何执行此操作的示例。 xml 映射文件将为您提供在 xml 文件中定位内容所需的 xmlpath 详细信息,您可以使用数据步骤代码直接读取。

之前帖子中建议的替代方案也可以使用。如上所述在数据步骤中预处理 n * xml 文件,但写入一次选定的标题内容(开始标签),然后来自每个 xml 文件的数据内容(丢弃每个后续文件的标题内容),然后写入一次结束标签。这个过程非常快。然后您的原始 xml 映射文件将处理一次大型 xml 文件。您可以通过手动编辑两个 xml 文件以将它们合并为一个来快速测试此方法。这将很快告诉您一次需要哪些共同内容

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-20
    • 2014-04-10
    相关资源
    最近更新 更多