我们正在尝试通过Powershell导入CSV文件到Access数据库。我的输入文件大小为1GB,很难遍历每一行并使用插入命令。任何快速的建议都是非常感谢的
谢谢! !
由@AlbertD表示。Kallal -使用powershell的原因到底是什么?…我只是做了一个假设,认为你是在寻找一种每天自动运行、无人值守的东西——因为这是一个典型的原因。
如果是这样的话,那么它真的可以分成两部分:
- 在Access中手动导入工作,然后设置该导入在启动/打开Access文件(auto exec)时自动启动。
- 只需使用powershell每天(或任何时候…)启动/打开Access文件。
Access不是设计为全时开放和无人值守运行的。这是在那种模式下使用它的典型方法。
好的,现在已经说明了不需要power-shell,在某些情况下,IT人员和其他人正在使用power-shell来自动化流程。所以它不是"坏的"考虑power-shell——特别是如果它正在被使用。我只是想指出PowerShell在性能方面没有帮助——而且可能会更慢。
如果你已经(不得不)说安排每15分钟导入一次或其他什么?
然后我建议在Access中的标准代码模块中设置VBA例程来进行导入。然后在power shell或windows脚本中启动访问,然后调用该导入例程。因此,第一步是在Access中设置例程-即使使用某种批处理系统来调度导入例程的运行。
所以,你使用windows调度程序。
它将:启动access,运行VBA子程序,关闭access。
使用windows调度器是相当健壮的。因此,我们不需要(也不想)保持access运行,只需要启动它,运行导入,然后关闭访问。
接下来,如果导入过程是"巨大的"或者更大,那么在启动时,可以创建一个临时accDB文件,然后我们将其导入。然后,我们可以获取导入表并将其发送到生产数据表中。(通常列名是不同的等。当然,导入到临时表中也要安全得多,而且更好的是,我们可以在之后删除临时文件,因此我们永远不会遇到文件膨胀或文件大小问题(不需要压缩和修复)。
所以,首先要做的是使用Access UI手动导入csv文件。这也允许你创建和设置一个导入规范,这个导入规范可以记住数据类型(货币,或者通常是日期时间列)。
一旦导入工作并创建了导入规范?
现在我们可以编写代码来执行上述相同的步骤,然后获取导入的表并将该数据放入生产数据表中。
如果你"stage"将导入的csv导入到临时表中,然后将该表处理为实际的生产数据表,但我建议这样做。
(尝试直接导入生产数据太危险)。
您现在也没有共享哪种预处理,或者在导入CSV之后需要哪些额外的代码(但是,我们仍然假设这些导入将被导入到一个新的临时表中)。
那么,我假设步骤是:
我们使用access的内置导入功能导入csv文件
然后将这个数据表发送到生产表,在将这个临时表发送到生产表之前,可能会对每一行进行一些代码处理。
导入完成后,我们将转储并删除用于导入的临时accDB文件,从而消除了巨大的数据膨胀问题。
因此,对于下一次,然后我们为新的导入创建临时文件,因此每次我们都从一个漂亮的空数据库文件开始。
第一个问题,您可以为这个测试创建一个空白的新数据库。您是否可以使用Access导入csv文件?你想这样做,因为这样的进口非常快,速度非常高。即使导入的格式不是您想要的100%,您也需要确认并尝试使用access UI是否可以导入csv文件。如果可以,那么我们可以采用VBA命令来做同样的事情,但是如果不能通过Access UI导入简单的csv,那么编写代码就没有用了。