如何在AWS Athena外部表中将输入文件名作为列

Raj*_*eev 27 sql amazon-s3 amazon-web-services presto amazon-athena

我在AWS Athena中创建了外部表来查询S3数据,但是,位置路径有1000多个文件.所以我需要将记录的相应文件名显示为表中的列.

select file_name , col1 from table where file_name = "test20170516"
Run Code Online (Sandbox Code Playgroud)

简而言之,我需要知道AWS Athena Presto中的INPUT__FILE__NAME(hive)等效或任何其他方法来实现相同的目标.

jen*_*ter 60

您可以使用$ path伪列执行此操作.

select "$path" from table
Run Code Online (Sandbox Code Playgroud)

  • 再次感谢.您是否知道有这样的其他伪列? (5认同)
  • 我通过以下github问题找到了它。https://github.com/prestodb/presto/issues/5486 (3认同)
  • 另请参阅官方 AWS 文档的答案:“如何查看 Athena 表中一行的 Amazon S3 源文件”:https://aws.amazon.com/en/premiumsupport/knowledge-center/find-s3-source -文件-athena-表-行/ (3认同)

cam*_*son 16

如果只需要文件名,可以使用regeexp_extract().

要在Athena中使用它,"$path"您可以执行以下操作:

SELECT regexp_extract("$path", '[^/]+$') AS filename from table;
Run Code Online (Sandbox Code Playgroud)

如果您需要没有扩展名的文件名,您可以执行以下操作:

SELECT regexp_extract("$path", '[ \w-]+?(?=\.)') AS filename_without_extension from table;
Run Code Online (Sandbox Code Playgroud)

这是关于Presto正则表达式函数的文档

  • 我使用split_part("$ PATH",'/',7)来获取文件名,但是你的文件更通用.谢谢. (2认同)