Azure Synapse CSV 解析意外令牌

问题描述 投票:0回答:1

我正在使用 Azure 数据工厂、Azure Data Lake 和 Azure Synapse Analytics 开发端到端数据工程解决方案。我有一个 CSV 文件“empl.csv”,它是存储在 ADLS 中的本地 SQL 服务器表的副本。我正在尝试在 Synapse 无服务器 SQL 池中创建此 CSV 的视图,但是当我尝试使用 OPENROWSET 读取 CSV 时,出现以下错误:

解析数据时遇到错误:[字节:60]处出现“意外标记”。需要标记 ','、' ' 或 '"'。'。底层数据描述:文件 'https://********/empl.csv'。

我的查询如下所示:

SELECT
    TOP 5 *
FROM
    OPENROWSET(
        BULK 'https://*******/empl.csv',
        FORMAT = 'CSV',
        PARSER_VERSION = '2.0',
        ESCAPECHAR = '\\'
    ) AS data

我尝试过使用“\”作为转义字符和“\”作为转义字符,以及将转义字符完全留空。我每次都会遇到同样的错误。

CSV 看起来像这样:

empl_code,name,u_version
123,"JOE SMITH", "!"
124,"DAVE SMITH", "M"
125,"BRIAN SMITH", "\""

我期待它像这样解析:

员工代码 名字 u_版本
123 乔·史密斯
124 戴夫·史密斯 M
125 布莱恩·史密斯

错误中的意外标记似乎是一个空字符串 - 我不确定这怎么可能。我怎样才能让它正确解释转义字符并将双引号作为字符串传递?

长期读者,第一次提问。预先感谢您的帮助。

parsing azure-data-factory azure-synapse
1个回答
0
投票

我尝试读取你的csv文件,但得到了同样的错误。此问题可能与无服务器中的数据或突触读取有关。您可以将数据中的

\
修改为
"
,以便 synapse serverless 可以读取它。使用 Synapse 管道复制活动来执行此操作。

使用您的文件创建源分隔文本数据集并提供以下配置。

enter image description here

使用以下配置创建接收器数据集。

enter image description here

将这些数据集提供给突触管道中的复制活动,文件将如下所示生成。

empl_code,name,u_version
"123","JOE SMITH","!"
"124","DAVE SMITH","M"
"125","BRIAN SMITH",""""

现在,使用下面的 SQL 脚本,将

"
作为突触无服务器中的引号和转义字符,这将给出预期的结果。

SELECT
    TOP 100 *
FROM
    OPENROWSET(
        BULK 'https://****/targetdelimiter.csv',
        FORMAT = 'CSV',
        FIELDTERMINATOR = ',',
        ESCAPECHAR = '"',
        FIELDQUOTE = '"',
        FIRSTROW = 2
    ) 
    WITH (
        [empl_code] int,
        [name] VARCHAR(100),
        [u_version] varchar(32)
    )
    AS [result];

结果:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.