Azure Synapse无服务器SQL Pool使用OPENROWSET无法识别CSV表头
解决Azure Synapse无服务器SQL Pool读取CSV表头识别问题
问题根源
你之前的尝试未启用表头识别参数,导致解析器默认将CSV第一行视为数据行,列名自动生成C1/C2;指定FIRSTROW=2仅跳过了表头行,但仍未自定义列名。
解决方法
方法1:启用HEADER_ROW参数(推荐)
添加HEADER_ROW = TRUE参数,让解析器自动识别CSV第一行为列名,并跳过该行读取实际数据:
SELECT TOP 100 * FROM OPENROWSET( BULK 'https://xxxx.dfs.core.windows.net/xx/xx/Test.csv', FORMAT = 'CSV', PARSER_VERSION = '2.0', HEADER_ROW = TRUE ) AS [result]
执行后将返回预期结果:
test_col1,test_col2 A,B
方法2:显式定义列结构(更灵活)
如果需要指定数据类型,或表头包含特殊字符导致识别异常,可通过WITH子句直接定义列名和类型,同时用FIRSTROW=2跳过表头行:
SELECT TOP 100 * FROM OPENROWSET( BULK 'https://xxxx.dfs.core.windows.net/xx/xx/Test.csv', FORMAT = 'CSV', PARSER_VERSION = '2.0', FIRSTROW = 2 ) WITH ( test_col1 VARCHAR(50), test_col2 VARCHAR(50) ) AS [result]
此方法可精准控制列属性,避免自动识别的不确定性。
额外注意
HEADER_ROW参数仅在PARSER_VERSION='2.0'及以上版本支持,请确保解析器版本符合要求。- 若CSV存在编码问题(如UTF-8带BOM),可额外添加
CODEPAGE='65001'参数解决表头乱码问题。
内容的提问来源于stack exchange,提问作者el_pazzu
相关产品推荐
相关产品推荐

