如何为Trino关联S3的外部表添加源文件名标识列?
在Trino Hive外部表中添加源文件名列的实现方案
针对你的需求,Trino(原Presto)的Hive连接器提供了两种简洁的方式来获取数据对应的源文件名:
方法一:查询时直接获取文件名
无需修改表结构,使用Trino内置的filename()函数即可返回当前行所属的源文件名称(如abc.json)。示例查询语句:
SELECT id, name, filename() AS source_filename FROM hive.qual2.surveys;
如果需要完整的S3文件路径(如s3://test-bucket/surveys/abc.json),可以替换为$path变量:
SELECT id, name, $path AS source_file_path FROM hive.qual2.surveys;
方法二:修改表结构,添加虚拟列
如果希望每次查询都默认包含文件名列,可以通过ALTER TABLE给现有表添加一个基于filename()的虚拟列:
ALTER TABLE hive.qual2.surveys ADD COLUMN source_filename VARCHAR AS filename();
若重新创建表,也可以直接在表定义中包含该虚拟列:
CREATE TABLE hive.qual2.surveys ( id VARCHAR, name VARCHAR, source_filename VARCHAR AS filename() ) WITH ( format = 'JSON', external_location = 's3://test-bucket/surveys' );
虚拟列不会实际存储数据,而是在查询时动态计算,因此不会增加存储开销。
内容的提问来源于stack exchange,提问作者jan-seins
相关产品推荐
相关产品推荐

