批量复制 - sybase

database sqlbulkcopy sybase

我需要有选择地(行和列)从一个表导出大约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。是否有可以使用的替代快速方法?如果可以在<4小时内完成,我会很高兴。

感谢您阅读。

热门答案

我想你的意思是:

WHERE PK > start_value AND PK < end_value

没有充分的理由在同一台服务器上的两个表中复制数据,因此希望这些表位于不同的服务器上。如果您正在“存档”,那么请注意,这是错误的做法;相反,提高表速度。请参阅这篇文章

  1. INSERT-SELECT将终止事务日志,这会对您的运行速度逐渐降低,并阻止其他用户使用该数据库。如果你分成1000行的批次,它会更快,更善于交际。

如果可以在<4小时内完成,我会很高兴

  1. 应该没有问题。取决于您的硬件和磁盘布局。我可以在运行ASE 15.5的小型演示盒上以13.2秒的速度加载1600万行。

  2. bcp会自动运行两种模式,具体取决于以下条件:

    • 快速。这需要设置SELECT_INTO / BULK_COPY sp_dboption,这允许bcp不记录INSERTS,只允许分配。还需要删除表上的索引(可以在bcp完成后创建它们)。

    • 慢。上述任何一种情况都未得到满足。记录所有INSERTS。确保在转储它的日志上有一个阈值(它将填充)。

  3. 完全没有问题,out_data_file或Table_2是Table_1的列的子集。在Table_1服务器上创建Table_2的视图。 Bcp-out视图。您还可以在视图中放置WHERE子句,进行转换等。

  4. 您可以并行执行bcp(最多为主机系统上的CPU /内核)。将提取物分成不平行的流(例如,在8核机器上,exec 8并行提取作业)。使用-F和-L参数指定Table_1的八分之一。如果您有o / s,则使用“&”,如果没有,则使用8 x BAT文件。

  5. 您还可以并行运行(例如)8 x INSERT-SELECT作业。按PK值拆分,而不是行号。



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因