hive 在特里诺中创建表时,在外部位置包括文件名和路径

llmtgqce  于 2023-10-18  发布在  Hive
关注(0)|答案(1)|浏览(194)

我有一个名为test-bucket的S3 bucket,其结构如下

  1. - test-bucket
  2. - surveys
  3. - abc.json
  4. - def.json
  5. [...]

现在我在特里诺中创建一个表,如下所示

  1. create table hive.qual2.surveys
  2. (
  3. id VARCHAR,
  4. name VARCHAR
  5. )
  6. with (
  7. format = 'JSON',
  8. external_location = 's3://test-bucket/surveys'
  9. );

此表中的select数据工作正常。但是,现在我也需要知道这些信息是从哪里来的。因此,如果数据来自此文件,则需要输入一个值为abc.json的列。
有什么办法可以做到吗?

pw136qt2

pw136qt21#

正如特里诺提供的hive连接器的文档中所描述的那样,我可以只使用$path列来查看信息来自的文件。
要提取没有扩展名的文件名,我简单地使用这个:
split(element_at(split("$path", '/'),-1),'.')[1] as survey_id
所以在我如上所述创建表之后,整个查询看起来像这样。

  1. select
  2. *,
  3. split(element_at(split("$path", '/'),-1),'.')[1] as survey_id
  4. from hive.qual2.surveys;

在创建表定义中包含$path没有意义,因为它已经作为隐藏列存在。

相关问题