Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获得;将数据类型VARCHAR转换为DATETIM时出错;E通过Polybase将数据从Azure blob复制到Azure DW时_Azure_Azure Data Factory_Polybase - Fatal编程技术网

获得;将数据类型VARCHAR转换为DATETIM时出错;E通过Polybase将数据从Azure blob复制到Azure DW时

获得;将数据类型VARCHAR转换为DATETIM时出错;E通过Polybase将数据从Azure blob复制到Azure DW时,azure,azure-data-factory,polybase,Azure,Azure Data Factory,Polybase,我是Azure环境的新手,在尝试将Azure blob存储上CSV文件中的数据复制到Azure data warehouse中的表中时,我正在使用data factory,该存储有三列(id、年龄、出生日期)。出生日期的格式为“MM/dd/yyyy”,我正在使用polybase将数据从blob复制到azure DW中的我的表中。表的列定义为(int、int、datetime) 如果我在data factory中使用“大容量插入”选项,我可以复制数据,但当我选择Polybase副本时,它会给我一个

我是Azure环境的新手,在尝试将Azure blob存储上CSV文件中的数据复制到Azure data warehouse中的表中时,我正在使用data factory,该存储有三列(id、年龄、出生日期)。出生日期的格式为“MM/dd/yyyy”,我正在使用polybase将数据从blob复制到azure DW中的我的表中。表的列定义为(int、int、datetime)

如果我在data factory中使用“大容量插入”选项,我可以复制数据,但当我选择Polybase副本时,它会给我一个错误。同样,在pipleine中更改dateformat也没有任何好处。 如果我将文件中的日期格式更改为“yyyy/MM/dd”,则Polybase复制成功


是否有一种方法可以将数据从blob复制到表中,而不必将源文件中的日期格式更改为“yyyy/MM/dd”。

我假设您已经创建了一个外部文件格式,并在外部表中引用该格式

CREATE EXTERNAL FILEFORMAT
有一个定义日期表示方式的选项:
date\u FORMAT
,您可以将其设置为源数据表示日期时间的方式

比如说:

CREATE EXTERNAL FILE FORMAT your-format  
WITH 
(  
  FORMAT_TYPE = DELIMITEDTEXT,  
  FORMAT_OPTIONS (  
      FIELD_TERMINATOR = '|',  
      DATE_FORMAT = 'MM/dd/yyyy' ) 
);  

您可以在以下网址找到更多信息:

此错误似乎已解决。我给出的日期格式是“MM/dd/yyyy”,而数据工厂希望它只是MM/dd/yyyy,没有任何引号

因此,根据我的理解,我将总结我在使用“MM/dd/yyy”日期格式将数据从Azure blob复制到Azure SQL data Warehouse时学到的知识,这里有几点:

1) 如果您使用azure portal使用数据工厂复制选项将数据从blob复制到azure sql数据仓库

  • 使用数据工厂创建复制数据管线
  • 指定输入数据源和目标数据存储
  • 在“字段映射”下,在包含 日期,单击其右侧的小图标以显示自定义日期 格式字段,并输入不带引号的日期格式,例如。 与我的情况相同,年月日
  • 运行pipleline,它应该会成功完成
2) 您可以通过以下方式直接使用polybase:

  • 正在创建外部数据源,该数据源指定 在我的案例中,blob存储上的输入文件,例如csv文件
  • 一种外部文件格式,用于指定分隔符和自定义日期格式,例如,文件中的MM/dd/yyyy 输入文件
  • 定义源中所有列的外部表 文件,并使用您需要的外部数据存储和文件格式 定义见上文
  • 然后,您可以使用外部 表(CTAS)。尼尔斯在上面的回答中提到的东西。我用了 用于此过程的Microsoft SQL Server Management Studio

谢谢尼尔斯。我在工作中没有使用外部表格。我使用azure web门户创建了一个blob存储,然后在blob内的容器中上载了一个CSV文件。我在数据仓库中创建了一个表,作为我希望复制数据的目标数据。为了复制数据,我使用data Factory创建了一条pipleline(全部来自azure web门户)。为了通过该管线复制数据,我选择了polybase copy选项。但由于CSV文件中的数据(格式为MM/dd/yyyy)与DW表中的日期格式不匹配,因此出现上述错误。啊,好的-我对data Factory不太了解,但我假设您可以在ADF中创建数据管道时定义日期格式?感谢Niels的帮助。我能够使用外部表将数据从blob复制到数据仓库,其格式与您在此处共享的格式类似。此外,我还可以使用data factory从azure门户复制数据,只需输入我的日期格式,而无需输入qutoes。删除引号对我起了作用。