我有一个名为
test-bucket
的 S3 存储桶,其结构如下
- test-bucket
- surveys
- abc.json
- def.json
[...]
现在我在 Trino 中创建一个像这样的表
create table hive.qual2.surveys
(
id VARCHAR,
name VARCHAR
)
with (
format = 'JSON',
external_location = 's3://test-bucket/surveys'
);
select
此表中的数据工作正常。然而,现在我还需要知道这些信息是从哪里来的。因此,如果数据来自此文件,我需要输入一个包含值 abc.json
的列。
有什么线索我可以实现这一目标吗?
如 trino 提供的 hive 连接器的 docs 中所述,我可以使用
$path
列来查看信息来自的文件。
要提取没有扩展名的文件名,我只需使用这个:
split(element_at(split("$path", '/'),-1),'.')[1] as survey_id
因此,在我按照上述方式创建表后,整个查询看起来像这样。
select
*,
split(element_at(split("$path", '/'),-1),'.')[1] as survey_id
from hive.qual2.surveys;
在创建表定义中包含
$path
没有意义,因为它已经作为隐藏列存在。