【发布时间】:2020-09-18 07:42:44
【问题描述】:
我有一个名为 MovieID_NameID_Roles.txt 的文件,大小为 1,767,605 KB。
我需要遍历它来解析然后填充一个数据库表。
想要处理几个小文件而不是一个巨大的文件,我发现this answer 提出了一个关于如何拆分大文本文件的问题。
根据接受的答案,上面写着:
分成每行 10000 行的文件:split myLargeFile.txt -l 10000
...但是在第二个屏幕截图的底部给出了在我看来是该命令的“更高级”版本,其中包含一些细节:
拆分 MovieID_NameID_Roles.txt MySlice -1 10000 -a 5 -d
所以,我下载并安装了 Git/Bash,并在其中运行:
split MovieID_NameID_Roles.txt MySlice -1 10000 -a 5 -d
但不是像我预期(或至少希望)那样将我非常大的文件拆分为每个 10,000 行的文件,而是生成名为 1000000000 到 1000099999 的文件,每个文件大小只有 1KB;然后拆分停止工作,并显示错误消息“输出文件后缀已用尽。”:
那么 应该使用什么命令将我的文件拆分为每个 10,000 行的较小文件?
【问题讨论】:
-
with an error message that it had run out of extension numbers.请发布完整的错误信息?所以也许如果它的数字用完了,那么也许给它更大的-a?-1到split是什么?你是说-l吗? -
在单个批量操作中将单个大型 CSV/平面文件导入数据库比 1000 个较小的文件更快。所有主要数据库都有批量导入命令,它们不仅以流式方式加载数据,还使用最少的日志记录和批量处理来减少操作的开销。你用的是哪个数据库?哪个命令?
-
我认为你误读了
-l(小写-L)并输入了-1(减一) -
导入到没有其他客户端锁定的临时表中也比直接导入到生产表中要快很多。在批量插入操作期间禁用索引并稍后重建它们会更快。以索引顺序插入数据也更快,从而减少了更新或重建索引所需的工作。这些优化都不适用于几个小文件
-
@B.ClayShannon SQL Server - 那就不要写任何东西了。 SQL Server 有
bcp从命令行导入平面文件,BULK INSERT从 T-SQL 和 SSIS 执行相同操作,以流方式从多个源转换和导入复杂数据。您可以使用partition switching 将所有内容加载到与生产表匹配的表中,并且无需任何延迟地交换暂存表和生产表
标签: split text-files