开启multiLine:如何在Databricks中按文件读取.flib到Delta表
解决方案
方法1:分组拼接文件内容
基于你现有的查询逻辑,通过按文件名分组,将同一文件的所有行内容拼接成完整文本。用collect_list收集当前文件的所有行数据,再通过concat_ws以换行符分隔拼接,还原文件原始结构:
USE CATALOG "data-beta"; USE data_beta_dev; DROP TABLE IF EXISTS data_beta; CREATE TABLE data_beta USING delta AS SELECT REVERSE(SUBSTRING_INDEX(REVERSE(_metadata.file_path), '/', 1)) as FileName, concat_ws('\n', collect_list(value)) AS FileData FROM read_files("wasbs://<redacted>@<redacted>.blob.core.windows.net/some/path/to/flibs/*.flib", format => 'text') GROUP BY REVERSE(SUBSTRING_INDEX(REVERSE(_metadata.file_path), '/', 1)); SELECT * FROM data_beta;
方法2:以二进制文件格式读取(更高效)
直接使用binaryFile格式读取文件,每个文件会被作为单条记录返回,再将二进制内容转换为字符串即可得到完整文件内容:
USE CATALOG "data-beta"; USE data_beta_dev; DROP TABLE IF EXISTS data_beta; CREATE TABLE data_beta USING delta AS SELECT REVERSE(SUBSTRING_INDEX(REVERSE(_metadata.file_path), '/', 1)) as FileName, CAST(content AS STRING) AS FileData FROM read_files("wasbs://<redacted>@<redacted>.blob.core.windows.net/some/path/to/flibs/*.flib", format => 'binaryFile'); SELECT * FROM data_beta;
补充说明
- 方法1适合需要严格保留原文件换行结构的场景,
concat_ws('\n', ...)会确保行分隔符与原文件一致。 - 方法2性能更优,无需分组聚合操作,直接读取整个文件内容。如果你的.flib文件使用非UTF-8编码,可添加
encoding参数指定(例如encoding => 'GBK')。
内容的提问来源于stack exchange,提问作者hotmeatballsoup
相关产品推荐
相关产品推荐

