Azure Databricks中Spark SQL COPY INTO无法加载CSV数据问题求助
问题原因
- COPY INTO默认具备幂等性机制,会将所有已成功加载的文件记录存在表对应的元数据目录中,重复执行时自动跳过这些文件。你此前成功加载过该DimAccount.csv文件,系统已将其标记为已处理,所以再次执行返回0行,这是核心诱因。
- 当前语句的配置和你可正常运行的Python读取逻辑不对齐:缺少
enforceSchema参数,且SELECT子句未包含目标表中的corrupt列,可能导致列匹配校验不通过,数据被静默过滤。
解决方法
使用下方调整后的SQL语句即可,核心新增了强制加载参数,对齐了所有配置项:
use work_db; truncate table dim_account; copy into dim_account from ( select AccountKey, ParentAccountKey, AccountCodeAlternateKey, ParentAccountCodeAlternateKey, AccountDescription, AccountType, Operator, CustomMembers, ValueType, CustomMemberOptions, corrupt from 'dbfs:/mnt/csv_source' ) FILEFORMAT = csv FILES = ('DimAccount.csv') FORMAT_OPTIONS( 'header'='true', 'columnNameOfCorruptRecord'='corrupt', 'enforceSchema'='true', 'sep'=',' ) COPY_OPTIONS('force'='true') ; -- 验证加载结果 select count(*) as total_rows, count(corrupt) as corrupt_rows from dim_account;
注意事项
- 日常增量加载新文件时不需要加
force参数,即可自动跳过已加载的旧文件,完全符合你批量加载的业务需求。 - 如果需要清空COPY INTO的加载历史,重建目标表即可。
- 如果查询结果中
corrupt_rows大于0,说明存在格式不符合要求的行,直接查询corrupt字段即可排查具体异常。
内容的提问来源于stack exchange,提问作者kindaran
相关产品推荐
相关产品推荐

