首页 > 解决方案 > Crate.io Copy From 0 行受影响

问题描述

我有一个 Crate.io 数据库,在 Windows Server 2012 下运行 CrateDB 版本 3.2.7。(我知道它不是最好的,它现在仅用于测试目的,不会是最终设置。)

我已经创建了表 dbo.snapshots 在此处输入图像描述

我通过 BCP 命令将数据从 SQL Server 导出到 CSV 文件。

bcp DatabaseName.dbo.Snapshots out F:\Path\dbo_OldSnapshots.dat -S ServerName -U UserName -P Password -a65535 -c -C 65001 -t ,

然后我尝试使用“COPY FROM”命令将数据导入 CrateDb。

COPY dbo.snapshots FROM 'file:///F:/Path/dbo_OldSnapshots.dat';

该文件大约 11go 大。我知道它找到了文件,因为我可以在任务管理器中看到驱动器上的 I/O。

它运行了大约 13 分钟,然后说“0 行受影响”。我不知道为什么它不起作用,我没有收到任何错误。

在此处输入图像描述 知道我能做些什么来让它工作吗?

************************************ 已编辑添加的附加信息 ************* ******************
好的,所以我发现您可以在 COPY 命令的末尾指定“返回摘要”子句。我用一个较小的文件对其进行了测试。

有了这个,我得到一个错误,说主键不能为 NULL。我知道在我提取的数据中它不是 NULL,所以我必须找出为什么它说我的主键是 NULL。

所以我将 BCP 分隔符更改为逗号,因为 CrateDB 的 CSV 文件必须用逗号分隔,并且我手动编辑文件以添加列标题,因为 CrateDB 要求提供标题。

我还在 Notepadd++ 中编辑了该文件以将其保存为 UTF-8 编码,以确保它是正确的编码。

但即便如此,我仍然收到错误说主键值不能为 NULL。

在此处输入图像描述

标签: cratecratedb

解决方案


好的,所以我设法使它工作。如果您尝试将数据从 SQL 或其他 dbms 导出到 CrateDB,则需要检查以下内容:

- UTF-8 中的文件编码

- 逗号分隔的文件

- 第一行需要是所有列的标题,请小心,名称区分大小写,因此如果列在 SQL Server 中为“MyColumn”,但在 CrateDB 中为“mycolumn”,则标题中必须为小写,否则 CrateDb 将无法正确找到它

- 如果您有 DateTime 类型,它必须在文件中的 "" 之间(例如:1,0,"2019-05-10T16:40:00",0,0)

- 如果您有 DateTime 类型,请注意日期之间需要有 T和时间部分。所以“2019-05-10T16:40:00”而不是“2019-05-10 16:40:00”

通过所有这些检查,我能够在我的 CrateDB 数据库中导入示例数据。


推荐阅读