0

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

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

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

4

2 回答 2

1

我假设您已经创建了您在外部表中引用的外部文件格式?

CREATE EXTERNAL FILEFORMAT一个选项来定义日期的表示方式:DATE_FORMAT,并将其设置为源数据表示日期时间的方式。

所以像这样:

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

您可以在以下位置找到更多相关信息:https ://docs.microsoft.com/en-us/sql/t-sql/statements/create-external-file-format-transact-sql?view=sql-server-ver15

于 2020-02-07T14:30:36.360 回答
0

似乎这个错误现在已经解决了。我将日期格式指定为“MM/dd/yyyy”,而数据工厂预计它只是 MM/dd/yyyy,没有任何引号。

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

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

  • 使用数据工厂创建复制数据管道。
  • 指定输入数据源和目标数据存储。
  • 在归档映射下,在包含日期的列中选择日期时间,单击其右侧的小图标以显示自定义日期格式字段并输入不带引号的日期格式,例如 MM/dd/yyyy,在我的情况下。
  • 运行您的管道,它应该成功完成。

2)您可以通过以下方式直接使用polybase:

  • 在我的情况下,创建指定输入文件位置的外部数据源,例如 blob 存储上的 csv 文件。
  • 在输入文件中指定分隔符和自定义日期格式的外部文件格式,例如 MM/dd/yyyy。
  • 定义源文件中存在的所有列并使用您在上面定义的外部数据存储和文件格式的外部表。
  • 然后,您可以使用外部表(CTAS)创建自定义表作为选择。尼尔斯在上面的回答中说明了这一点。我在这个过程中使用了 Microsoft SQL Server Management Studio。
于 2020-02-24T12:30:58.780 回答