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

如何在Databricks外部表的SQL查询中获取文件内的行号?

在Databricks中获取CSV外部表记录的文件内行号

针对指向单个CSV文件或CSV目录的外部表,你可以结合Databricks内置函数与窗口函数实现需求,具体方案如下:

实现思路

用input_file_name()函数定位每条记录所属的源文件,借助Databricks自动生成的隐藏列__FILE_POSITION__(记录在文件内的字节偏移位置)保证排序与文件行顺序一致,最后通过ROW_NUMBER()窗口函数按文件分区计算行号。

具体SQL语句

SELECT 
  name,
  type,
  ROW_NUMBER() OVER (PARTITION BY input_file_name() ORDER BY __FILE_POSITION__) AS row_number
FROM animals_csv

关键说明

  • input_file_name():返回当前记录对应的源文件完整路径,用于按文件分区,确保每个文件内的行号独立计算。
  • __FILE_POSITION__:代表记录在源文件中的字节偏移量,以此排序能严格匹配文件内的原生行顺序。
  • 单个CSV文件场景下,PARTITION BY input_file_name()仅生成一个分区,行号从1开始连续递增;多文件目录场景下,每个文件内的行号都会从1重新计数。

示例验证

针对你提供的CSV内容:

lion,mammal
shark,fish
lizard,reptile

执行上述SQL后,将得到预期结果:

lion    mammal    1
shark   fish      2
lizard  reptile   3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 16:10:55