Databricks非流DLT中如何仅用SQL读取带表头配置的CSV文件
Delta Live Table非流式场景纯SQL读取CSV方案
结论
可以实现。不需要调用Auto Loader、不需要编写Python代码,仅使用SQL即可在非流式DLT场景下读取配置了表头及其他自定义参数的CSV文件。
核心规则
- 只要在定义DLT数据集时不使用
STREAM()函数包裹数据源,就会运行在批处理(非流式)模式,不会触发Auto Loader的流式加载逻辑 - 所有CSV解析参数(表头、分隔符、转义规则、坏数据处理模式、字符集等)都可以直接在SQL语法的配置项中传入,和其他API读取CSV时的参数能力完全一致
可直接复用的SQL示例
写法1:使用read_files函数(推荐,参数配置更直观)
-- 创建非流式DLT物化视图,读取指定路径下的CSV文件 CREATE OR REFRESH MATERIALIZED VIEW biz_csv_table AS SELECT * FROM read_files( '/mnt/your_storage_path/csv_data/*.csv', -- 替换为实际CSV文件路径 format => 'csv', header => true, -- 启用表头识别 delimiter => ',', -- 配置分隔符,可根据实际场景改为\t、|等 mode => 'PERMISSIVE', -- 配置坏数据处理模式,支持PERMISSIVE/DROPMALFORMED/FAILFAST inferSchema => true, -- 自动推断字段类型,也可手动指定schema encoding => 'UTF-8' -- 其余自定义参数按需追加即可 )
写法2:传统Spark SQL数据源语法
CREATE OR REFRESH MATERIALIZED VIEW biz_csv_table USING CSV OPTIONS ( path '/mnt/your_storage_path/csv_data/*.csv', header 'true', delimiter ',', mode 'PERMISSIVE', inferSchema 'true', encoding 'UTF-8' )
以上两种写法均为纯SQL实现,无Python代码依赖,运行在非流批处理模式,不会调用Auto Loader组件。
内容的提问来源于stack exchange,提问作者OMAR BEN YEDIR
相关产品推荐
相关产品推荐

