Crate.io 复制自 0 行受影响
Crate.io Copy From 0 rows affected
我有一个 Crate.io 数据库,运行 CrateDB 版本 3.2.7,在 Windows Server 2012 下。(我知道这不是最好的,目前仅用于测试目的并且不会是最终设置。)
我已经创建了 table dbo.snapshots
我通过 BCP 命令将数据从 SQL 服务器导出到 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 命令末尾指定 "RETURN SUMMARY" 子句。我用一个较小的文件对其进行了测试。
然后,我收到一条错误消息,指出主键不能为 NULL。我知道它在我提取的数据中不是 NULL,所以我将不得不找出为什么它说我的主键是 NULL。
所以我将 BCP 分隔符更改为逗号,因为 CrateDB 的 CSV 文件必须以逗号分隔,并且我手动编辑文件以添加列 headers 因为 CrateDB 要求 header.
我还在 Notepadd++ 中编辑了文件以将其保存为 UTF-8 编码,以确保它是正确的编码。
但即使如此,我仍然收到主键值不能为 NULL 的错误。
好的,所以我成功了。如果您尝试将数据从 SQL 或另一个 dbms 导出到 CrateDB,则需要检查以下内容:
- 文件编码为 UTF-8
- 逗号分隔文件
- 第一行必须是 header,所有列 注意,名称区分大小写,因此如果列在 SQL 服务器中是 "MyColumn",但是 "mycolumn" 在 CrateDB 中,在 header 中必须小写,否则 CrateDb 无法正确找到它
- 如果您有 DateTime 类型,它必须在文件中的“”之间(例如:1,0,”2019-05-10T16:40:00”,0,0)
- 如果你有 DateTime 类型,请注意你需要在日期和时间部分之间有 T。所以“2019-05-10T16:40:00”而不是“2019-05-1016:40:00”
检查完所有这些后,我就可以在我的 CrateDB 数据库中导入示例数据了。
我有一个 Crate.io 数据库,运行 CrateDB 版本 3.2.7,在 Windows Server 2012 下。(我知道这不是最好的,目前仅用于测试目的并且不会是最终设置。)
我已经创建了 table dbo.snapshots
我通过 BCP 命令将数据从 SQL 服务器导出到 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 命令末尾指定 "RETURN SUMMARY" 子句。我用一个较小的文件对其进行了测试。
然后,我收到一条错误消息,指出主键不能为 NULL。我知道它在我提取的数据中不是 NULL,所以我将不得不找出为什么它说我的主键是 NULL。
所以我将 BCP 分隔符更改为逗号,因为 CrateDB 的 CSV 文件必须以逗号分隔,并且我手动编辑文件以添加列 headers 因为 CrateDB 要求 header.
我还在 Notepadd++ 中编辑了文件以将其保存为 UTF-8 编码,以确保它是正确的编码。
但即使如此,我仍然收到主键值不能为 NULL 的错误。
好的,所以我成功了。如果您尝试将数据从 SQL 或另一个 dbms 导出到 CrateDB,则需要检查以下内容:
- 文件编码为 UTF-8
- 逗号分隔文件
- 第一行必须是 header,所有列 注意,名称区分大小写,因此如果列在 SQL 服务器中是 "MyColumn",但是 "mycolumn" 在 CrateDB 中,在 header 中必须小写,否则 CrateDb 无法正确找到它
- 如果您有 DateTime 类型,它必须在文件中的“”之间(例如:1,0,”2019-05-10T16:40:00”,0,0)
- 如果你有 DateTime 类型,请注意你需要在日期和时间部分之间有 T。所以“2019-05-10T16:40:00”而不是“2019-05-1016:40:00”
检查完所有这些后,我就可以在我的 CrateDB 数据库中导入示例数据了。