我需要有选择地(行和列)从一个表到另一个表导出大约2000万行。这就是我试过的:
--Run this in batch:
INSERT INTO Table 2
Select A, B from Table1
where A > a and B < b
---Table1 have columns A, B....Z and got around 50 million records.
完成大约需要12个小时。我不认为sybase允许bcp输出Table1中的选择性列和行以及表2中的bcp。有没有可以使用的替代快速方法?如果可以做到,我会很高兴&lt; 4个小时。
感谢您阅读。
答案 0 :(得分:1)
我认为你的意思是:
WHERE PK > start_value AND PK < end_value
没有充分的理由在同一台服务器上的两个表中复制数据,因此希望这些表位于不同的服务器上。如果您正在“存档”,那么请注意,这是错误的做法;相反,提高表速度。请参阅this post。
如果可以做到,我会很高兴&lt; <4小时
应该没问题。取决于您的硬件和磁盘布局。我可以在运行ASE 15.5的小型演示盒上以13.2秒的速度加载1600万行。
bcp会自动运行两种模式,具体取决于以下条件:
FAST。这需要设置SELECT_INTO / BULK_COPY sp_dboption,这允许bcp不记录INSERTS,只允许分配。还需要删除表上的索引(可以在bcp完成后创建它们)。
SLOW。上述任何一种情况都未得到满足。记录所有INSERTS。确保转储日志的阈值(它将填充)。
out_data_file或Table_2都不是Table_1的列的子集。在Table_1服务器上创建Table_2的视图。 Bcp-out视图。您还可以在视图中放置WHERE子句,进行转换等。
您可以并行执行bcp(最多为主机系统上的CPU /内核)。将提取物分成不平行的流(例如,在8核机器上,exec 8并行提取作业)。使用-F和-L参数指定Table_1的八分之一。使用“&amp;”如果你有o / s和8 x BAT文件,如果你没有。
您还可以并行运行(例如)8个INSERT-SELECT作业。按PK值拆分,而不是行号。