【发布时间】: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。yyyyMMdd或yyyy-MM-dd(后者仅与新的日期和类型数据类型无关)。 -
在加载 CSV 之前,您可以设置 DATEFORMAT DMY
-
@Larnu @lptr 非常感谢大家 - 我加入了
DATE_FORMAT = 'dd/MM/yyyy'并且成功了
标签: sql-server azure-synapse polybase