【问题标题】:How can I create native Sybase BCP file?如何创建本机 Sybase BCP 文件?
【发布时间】:2020-07-20 23:43:53
【问题描述】:

我的程序内存中有数据,需要导入数据库。

出于性能原因,我想通过 Sybase BCP 来实现,特别是使用本机文件格式。

挑战:我需要知道原生 Sybase BCP 文件格式是什么,而且它似乎没有在任何地方记录。

有没有很好的文档?创建逻辑的示例?

(我知道我可以轻松地创建字符 BCP 文件,但这比原生格式要慢)

【问题讨论】:

  • 如果您的程序可以连接到 Sybase ASE,然后检查您的程序(通过它的连接库)是否可以支持 ASE 的批量插入 API(这将比插入快得多 - 有或没有准备好的陈述);另一方面,如果您确实需要创建要提供给 bcp 的数据文件(稍后),您最简单的选择是将数据写入分隔文件
  • bcp 使用的是批量插入 API 吗?如果不是,他们如何比较速度? @markp-fuso
  • bcp 和 ASE 是从同一个 SDK 构建的,所以是的,bcp 和批量插入 API 将具有可比性

标签: sybase bcp sybase-ase15


【解决方案1】:

本机格式是一种二进制格式,它不能与文本相互转换,它是通过使用带有 -n 而不是 -c 的 BCP 创建的。除此之外,执行此操作的方法是相同的,并且分隔符和其他选项对于字符和本机的工作方式相同。它没有记录,因为它是他们拥有的专有格式。

如果您有一个现有的字符文件,您需要加载,尽管您必须使用字符格式来加载文件 - 您不能将您的字符文件转换为本机格式或再次转换回来。唯一的解决方法是将其作为 char 加载到 Sybase 数据库中,BCP 以本机方式输出,然后 BCP 再次以本机方式加载,这比刚开始使用 char 格式要慢。

如果您在目标表上删除索引,加载 BCP 文件的速度也会大大加快,但之后您必须重新创建它们(并在必要时更新索引统计信息)。您还需要在数据库上设置“选择进入/批量复制”选项,以允许这种快速的 BCP 方法,因为它是一个最少记录的操作。

【讨论】:

    【解决方案2】:

    如果程序内存中的数据太大 您可以对 Sybase IQ 使用/尝试 Load table 命令(仅限 Sybase IQ,不适用于 Sybase ASE)。也比 bcp 更快地加载表命令

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-27
      • 1970-01-01
      • 1970-01-01
      • 2015-03-05
      • 2013-08-08
      • 1970-01-01
      • 2018-09-29
      • 2015-09-20
      相关资源
      最近更新 更多