我有一个名为test-bucket
的S3 bucket,其结构如下
- test-bucket
- surveys
- abc.json
- def.json
[...]
现在我在特里诺中创建一个表,如下所示
create table hive.qual2.surveys
(
id VARCHAR,
name VARCHAR
)
with (
format = 'JSON',
external_location = 's3://test-bucket/surveys'
);
此表中的select
数据工作正常。但是,现在我也需要知道这些信息是从哪里来的。因此,如果数据来自此文件,则需要输入一个值为abc.json
的列。
有什么办法可以做到吗?
1条答案
按热度按时间pw136qt21#
正如特里诺提供的hive连接器的文档中所描述的那样,我可以只使用
$path
列来查看信息来自的文件。要提取没有扩展名的文件名,我简单地使用这个:
split(element_at(split("$path", '/'),-1),'.')[1] as survey_id
所以在我如上所述创建表之后,整个查询看起来像这样。
在创建表定义中包含
$path
没有意义,因为它已经作为隐藏列存在。