我正在使用 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 | 布莱恩·史密斯 | ” |
错误中的意外标记似乎是一个空字符串 - 我不确定这怎么可能。我怎样才能让它正确解释转义字符并将双引号作为字符串传递?
长期读者,第一次提问。预先感谢您的帮助。
我尝试读取你的csv文件,但得到了同样的错误。此问题可能与无服务器中的数据或突触读取有关。您可以将数据中的
\
修改为 "
,以便 synapse serverless 可以读取它。使用 Synapse 管道复制活动来执行此操作。
使用您的文件创建源分隔文本数据集并提供以下配置。
使用以下配置创建接收器数据集。
将这些数据集提供给突触管道中的复制活动,文件将如下所示生成。
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];
结果: