我想按表内分区下的一个文件/一组文件进行查询。 我发现当我使用“ $ path”字段时,Athena会扫描整个分区,而不是我想要的文件
是否有一种方法可以使这种查询更加有效,并且仅扫描给定的文件?类似于文件的分区修剪...
这是一个示例查询:
SELECT *
FROM my_table
WHERE day = '2019-01-01'
AND "$path" = 's3://my-bucket/my-table/day=2019-01-01/my_file'
答案 0 :(得分:0)
不。不能通过使用$path
或我所知道的任何其他方法来使Athena仅扫描所需文件,而又不对表进行不同的分区。
如果这是一种常见的操作,我建议您缩小分区并更好地匹配文件,但是如果只是偶尔执行一下操作,则不必担心太多。
如果您有多种访问模式,但这不是主要的访问模式,但仍然很常见,您可以使用org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat
输入格式创建一个单独的表,并使用以下方式创建1:1的分区结构:指向原始表文件的symlink.txt
个文件。您可以在this StackOverflow answer(下半部分)中了解有关创建表的这种方式的更多信息-但我认为这是解决该问题的非常复杂的方式。