使用DateTime2列到SQL Server的SSIS数据流CSV

亚当·温格

我正在尝试通过SSIS数据流任务将平面文件加载到SQL Server中。至于文件,我得到的是这种形状的列20140311115000,如果我将Fast Parse: False其更改为,我可以将其导入2014-03-11 11:50:00尽管这不是最佳选择,因为我无法控制获得的上游文件,因此我不想解析每个列/行/表。在文件连接中,我将列定义为:DT_DBTIMESTAMP2在压缩格式中,出现以下错误:

[ADO NET Destination [2]] Error: System.ArgumentOutOfRangeException:
Year, Month, and Day parameters describe an un-representable DateTime.
at System.DateTime.DateToTicks(Int32 year, Int32 month, Int32 day)...`

有没有办法使较短的列格式(20140311115000)正确导入?

培根片

扩大我的评论,因为这似乎是可以接受的答案:

我将在SSIS中使用派生列进行处理。它具有几个主要优点:首先,它使用与其余导入过程相同的解析方法,因此您不必担心解析字段。其次,它们都在内存中完成,因此您不必两次将数据写入磁盘。第三,它是由SSIS进行转换的,而不是SQL Server引擎,因此它不会遭受资源争用(特别是如果您的SSIS在另一台服务器上);第四,派生列使用同步流处理,这与它获得的速度差不多。

我这样做的方法是将CSV文件中的字段定义为长度为14的字符串(DT_STR)。我倾向于将CSV输入列重命名为“ {SourceColumn} _STR”或“ {SourceColumn} _RAW”,因为您需要具有唯一的输入和输出列名称,这让我以后使用“ {SourceColumn}”作为“派生列”的名称。IMO,这使得映射目标变得容易一些。如果您不更改数据类型,则可以替换列,但如果您更改数据类型,则还必须为其赋予新的列名称AFAIK。

因此,接下来,您将在数据流任务中正常创建平面文件数据源。接下来,添加“派生列”转换。编辑转换,将新列的名称命名为“ {SourceColumn}”,将其配置为“添加为新列”,然后格式化字符串并使用如下表达式进行类型转换:

(DT_DBTIMESTAMP2, 2)(SUBSTRING(MyDateColumn,1,4) + "-" + SUBSTRING(MyDateColumn,5,2) + "-" + SUBSTRING(MyDateColumn,7,2) + " " + SUBSTRING(MyDateColumn,9,2) + ":" + SUBSTRING(MyDateColumn,11,2) + ":" + SUBSTRING(MyDateColumn,13,2))

我倾向于将TechNet Wiki页面中的格式用于SSIS表达式,而将SSIS文档中的格式用于Casting,这仅仅是因为SSIS数据类型与SQL Server数据类型不同,即使它们映射得很干净。例如,DT_GUID需要花括号,而UNIQUEIDENTIFIER不需要。

以我的经验来看,这执行得很好。我目前使用此方法的唯一导入操作是在相当中等的硬件上运行的相当小的数据。它仅导入大约12,000条记录,但是每个记录大约4KB,具有约240个字段,并且正在转换其中的六个或七个。他们中的大多数人通过添加破折号和花括号将字符串转换为DT_GUID,但是其中之一正在纠正与此类似的格式错误的日期。包括数据写入在内的整个过程需要1-2秒。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从 MySQL 到 SQL Server unicode 和非 unicdoe 的 SSIS 数据流

SSIS:从SQL到数据流任务的变量

SSIS 数据流文件到表加载非常缓慢

SSIS动态表和数据流中的列数

SSIS 2005数据流如何从查询中获取列

SSIS数据流中的变量使用问题

通过带有数据源中参数的过程从带有SQL Server 2008 SSIS数据流的SQL Server 2005中检索数据

使用数据流清理 CSV 文件中的数据

ssis控制流执行sql vs数据流sql命令

使用 CSV 和数据流的时间不够长

如何在源的数据流脚本组件中使用 SSIS 数据集?

使用DATETIME2作为SQL Server表的主键

最佳SSIS数据流设置以加载到Azure SQL DW中的登台表

将 SQL SELECT 语句转换为 SSIS 数据流任务

如何在SSIS数据流中捕获多个错误列

如何添加额外的列以处理SSIS数据流中的错误消息?

如何在数据流任务SSIS 2008 R2中传递变量

如何使用具有不同日期值的相同 SSIS 数据流?

如何使用用户定义的参数/变量触发SSIS包的数据流元素?

如何在SSIS数据流任务中使用格式化文件?

SQL Server版本错误(datetime2)

SSIS 如何使用在 SQL 任务中创建的表作为以下数据流任务中的目标

SSIS数据流中的Oracle目标失败,并显示错误-ORA-01405:提取的列值为NULL

如何使用新的SQL Server Native Client将datetime迁移到datetime2

HTTP获取/发布到数据流

数据流GCS到BQ问题

python列表到字典的数据流

从BigQuery到BigQuery的数据流

从Reducer到容器的Redux数据流