在 Trino 中创建表时在外部位置包含文件名和路径

问题描述 投票:0回答:1

我有一个名为

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
的列。

有什么线索我可以实现这一目标吗?

sql amazon-s3 hive create-table trino
1个回答
0
投票

如 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
没有意义,因为它已经作为隐藏列存在。

© www.soinside.com 2019 - 2024. All rights reserved.