我有一个Crate.io数据库,在Windows Server 2012下运行CrateDB版本3.2.7。(我知道它不是最好的,它仅用于测试目的,并且不是最终设置。)
我通过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命令的末尾指定“ RETURN Summary”子句。我用一个较小的文件进行了测试。
这样,我得到一个错误,指出主键不能为NULL。我知道在提取的数据中它不是NULL,所以我将不得不找出为什么它说我的主键是NULL。
因此,我将BCP分隔符更改为逗号,因为CrateDB的CSV文件必须用逗号分隔,并且由于CrateDB要求输入标题,因此我手动编辑了该文件以添加列标题。
我也在Notepadd ++中编辑了文件以将其保存为UTF-8编码,以确保它是正确的编码。
尽管如此,我仍然收到错误消息,指出主键值一定不能为NULL。
答案 0 :(得分:0)
好,所以我设法使它起作用。如果您尝试将数据从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数据库中导入示例数据。