You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Databricks中将文件名、文件大小及读取时间写入另一张表

Databricks写入文件元数据到指定表操作方案

核心逻辑不需要改动你现有文件校验的核心代码,只需要在逐个处理文件的环节中新增元数据采集、写入逻辑即可,具体操作步骤如下:

1. 确认目标表schema匹配

提前保证你已经创建的目标表包含对应字段,以下是参考schema(已建表且字段符合要求可直接跳过):

CREATE TABLE IF NOT EXISTS file_process_log (
  file_name STRING COMMENT '读取的文件路径/名称',
  file_size BIGINT COMMENT '文件大小,单位为字节',
  read_time TIMESTAMP COMMENT '文件读取执行时间'
) USING DELTA;

如果目标表还有其他自定义字段,只要对应字段允许为空、或设置了默认值,不会影响后续写入逻辑。

2. 嵌入元数据采集写入逻辑

在你现有逐个处理文件的循环中新增以下代码,Python示例如下:

from pyspark.sql.functions import lit
from datetime import datetime

# 替换为你现有逻辑中获取的待处理文件列表
file_list = ["abfss://xxx@xxx.dfs.core.windows.net/path/file1.csv", "dbfs:/mnt/xxx/file2.parquet"]

for file_path in file_list:
    # --------------------------
    # 此处保留你原有文件读取、校验、执行预设操作的全部代码,不需要改动
    # 示例:df = spark.read.format("csv").load(file_path) + 你自己的校验逻辑
    # --------------------------

    # 新增:采集所需的三个元数据字段
    file_info = dbutils.fs.ls(file_path)[0] # Databricks内置工具直接获取文件信息,无需额外安装依赖
    file_size = file_info.size
    read_time = datetime.now()

    # 生成单行元数据DataFrame,字段顺序、类型和目标表保持一致
    log_df = spark.createDataFrame([(file_path, file_size, read_time)], 
                                   schema=["file_name", "file_size", "read_time"])

    # 追加写入到已创建的目标表
    log_df.write.mode("append").saveAsTable("file_process_log")

3. 大文件量批量写入优化(可选)

如果单次处理的文件数量超过100个,推荐先把所有元数据攒成列表,全部文件处理完成后统一写入,减少IO开销:

log_list = []
for file_path in file_list:
    # 原有文件处理逻辑不变
    # 元数据采集后追加到列表
    log_list.append((file_path, file_size, read_time))

# 全部文件处理完成后统一写入目标表
log_df = spark.createDataFrame(log_list, schema=["file_name", "file_size", "read_time"])
log_df.write.mode("append").saveAsTable("file_process_log")

如果你用Scala开发,逻辑完全一致,仅需调整对应语法即可。

内容的提问来源于stack exchange,提问作者harshith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 05:24:04