【问题标题】:Polybase - Error converting data type VARCHAR to DATETIMEPolybase - 将数据类型 VARCHAR 转换为 DATETIME 时出错
【发布时间】:2021-08-14 21:12:19
【问题描述】:

我正在尝试为存储在 Azure 存储中的 CSV 文件创建一个外部表。

CSV 数据如下所示:-

Date Rail Period Calendar Year Calendar Month Calendar Month Name Fiscal Year Fiscal Period Weekday Weekday Number
26/04/2021 2201 2021 4 April 2022 Period 1 Monday 1
27/04/2021 2201 2021 4 April 2022 Period 1 Tuesday 2
28/04/2021 2201 2021 4 April 2022 Period 1 Wednesday 3
29/04/2021 2201 2021 4 April 2022 Period 1 Thursday 4
30/04/2021 2201 2021 4 April 2022 Period 1 Friday 5
01/05/2021 2201 2021 5 May 2022 Period 2 Saturday 6
02/05/2021 2202 2021 5 May 2022 Period 2 Sunday 7
03/05/2021 2202 2021 5 May 2022 Period 2 Monday 1
04/05/2021 2202 2021 5 May 2022 Period 2 Tuesday 2

我使用以下代码创建了外部文件格式

CREATE EXTERNAL FILE FORMAT csvFile
WITH (
    FORMAT_TYPE = DELIMITEDTEXT,
    FORMAT_OPTIONS (
      FIELD_TERMINATOR = ',',
      STRING_DELIMITER = '"',
      FIRST_ROW = 2,
      USE_TYPE_DEFAULT = TRUE,
      ENCODING = 'UTF8' )
);

和外部表如下

CREATE EXTERNAL TABLE ext.DateDimension(
    [Date]                DATE, 
    [Rail Period]         INT, 
    [Calendar Year]       INT, 
    [Calendar Month]      INT,
    [Calendar Month Name] VARCHAR(9),
    [Fiscal Year]         INT, 
    [Fiscal Period]       VARCHAR(9), 
    [Weekday]             VARCHAR(9), 
    [Weekday Number]      INT)
WITH(
    DATA_SOURCE = [tfwpbstore_ADLSG2], 
    LOCATION = '/Generic Datasets/Date Dimension.csv',
    FILE_FORMAT = csvFile);

但是,当我尝试从外部表中进行 SELECT 时,出现以下错误

消息 107090,第 16 级,状态 1,第 1 行 HdfsBridge::recordReaderFillBuffer - 填充记录读取器缓冲区时遇到意外错误:HadoopSqlException:将数据类型 VARCHAR 转换为 DATETIME 时出错。

我不太确定出了什么问题。如果有人可以提供帮助,我将不胜感激。

【问题讨论】:

  • '26/04/2021' 是特定语言的日期格式;具体来说,它可能仅在您的语言设置设置为BRITISH 时才有效。我怀疑 Synapse 或 Polybase 不喜欢它,因为它可能在美国工作 ENGLISH。如果您可以确保您的价值与语言无关,那么您会做得更好。 IE。 yyyyMMddyyyy-MM-dd(后者仅与新的日期和类型数据类型无关)。
  • 在加载 CSV 之前,您可以设置 DATEFORMAT DMY
  • @Larnu @lptr 非常感谢大家 - 我加入了 DATE_FORMAT = 'dd/MM/yyyy' 并且成功了

标签: sql-server azure-synapse polybase


【解决方案1】:

如上面 cmets 所述,我需要定义文件格式语句中使用的日期格式,如下所示:

CREATE EXTERNAL FILE FORMAT csvFile_ddMMyyyy_fr2
WITH (
    FORMAT_TYPE = DELIMITEDTEXT,
    FORMAT_OPTIONS (
      FIELD_TERMINATOR = ',',
      STRING_DELIMITER = '"',
     DATE_FORMAT = 'dd/MM/yyyy',
      FIRST_ROW = 2,
      USE_TYPE_DEFAULT = TRUE,
      ENCODING = 'UTF8' )
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 2020-12-06
    • 1970-01-01
    • 2016-06-22
    • 2011-03-29
    • 2012-06-05
    • 1970-01-01
    相关资源
    最近更新 更多