是否有一种方法可以使用PS dba工具将具有适当数据类型的<>csv文件导入MSSQL表?
我在下面的命令中使用这个命令,但我得到的只是一个表,所有的列都是nvarchar(max):
Import-DbaCsv -Path C:\user.csv -SqlInstance $server -Database $DB -AutoCreateTable我知道我可以通过SSIS实现这一点,但这对我来说不是最好的选择,因为一些CSV结构一直在变化,+/-列。
发布于 2022-08-30 13:53:11
用例中的根本问题是,批量加载程序无法正确猜测列大小,甚至无法猜测数据类型。您可以看到,在大多数ETL实现中,列类型和长度都是预先指定的。加载器可以信任数据要么适合目标,要么将其归类为已损坏的数据。
装载机不知道,比如说,501行的产品描述中有1500个字符的长字符串,而所有其他行都只有几十个字母。如果猜测列较短,则行501将无法正确加载。如果它安全,并使所有的nvarchar(max),数据适合,但效率低,没有类型检查是做的。
现在,加载程序可以读取整个文件,并对每个列的最大长度和数据类型进行计数。然后根据这些规范创建一个表。然后它将再次读取整个文件,并执行插入操作。这将需要读取文件两次,这是低效的,通常不需要,因为ETL进程依赖于预先商定的文件格式。有些工具(例如的导入向导)可以这样做。它从文件中读取前200行,并根据该数据进行猜测。这就是为什么我认为错误匹配的数据位于501行,离取样器组件太远了。
有些工具,如csvkit,可以从CSV文件创建表结构。不管有什么好处,我都没有经验。
https://dba.stackexchange.com/questions/316219
复制相似问题