如何用Databricks COPY INTO批量导入Azure Blob文件夹CSV至Delta表
解决Databricks COPY INTO批量导入文件夹下分片CSV的问题
修改后的COPY INTO代码
直接将FROM子句中的单个文件路径替换为文件夹路径即可,COPY INTO会自动读取该文件夹下所有符合格式的CSV文件,无需遍历文件列表:
f"""COPY INTO {schema_name}.{table_name} FROM (SELECT {', '.join([f"_c{i}::{column[1]} {column[0]}" for i, column in enumerate(columns)])} FROM '{blob_url}/{csv_folder_path}') FILEFORMAT = CSV FORMAT_OPTIONS ('sep' = '|', 'header' = 'false') -- 可选:如果需要递归读取子文件夹中的文件,添加以下配置 COPY_OPTIONS ('recursive' = 'true');"""
关键说明
- 路径规则:无需在路径末尾加
*,直接指定存放所有分片CSV的文件夹路径即可,COPY INTO默认会扫描该文件夹下所有非隐藏的CSV文件 - 递归读取:如果分片文件存放在子文件夹中,添加
COPY_OPTIONS ('recursive' = 'true')即可递归读取所有层级的文件 - 结构一致性:确保所有分片CSV的列顺序、分隔符等格式完全一致,否则会导致数据解析错误
- 原有映射逻辑保留:因为所有分片结构相同,原有的
_c{i}::{column[1]} {column[0]}列映射逻辑无需修改,依然可以正确将每个文件的列转换为目标Delta表的字段
验证方式
执行命令后,可以通过以下语句验证导入的数据量是否符合预期:
SELECT COUNT(*) FROM {schema_name}.{table_name};
内容的提问来源于stack exchange,提问作者manucorujo
相关产品推荐
相关产品推荐

