Apache Drill查询文件提示不存在但show files能找到的问题求助
Apache Drill查询TSV文件提示不存在但show files能找到的解决办法
问题场景
执行查询语句时提示文件不存在:
apache drill> select * from dfs.`/home/fabrice/WORK/test_parquet/test_parquet.tsv`; Error: VALIDATION ERROR: From line 1, column 15 to line 1, column 76: Object '/home/fabrice/WORK/test_parquet/test_parquet.tsv' not found within 'dfs'
但执行show files命令却能正常获取文件信息:
apache drill> show files from dfs.`/home/fabrice/WORK/test_parquet/test_parquet.tsv`; +------------------+-------------+--------+--------+---------+---------+-------------+-------------------------+-------------------------+ | name | isDirectory | isFile | length | owner | group | permissions |accessTime | modificationTime | +------------------+-------------+--------+--------+---------+---------+-------------+-------------------------+-------------------------+ | test_parquet.tsv | false | true | 48 | fabrice | fabrice | rwxrwxrwx | 2025-04-07 10:47:56.004 | 2025-04-04 15:17:22.657 | +------------------+-------------+--------+--------+---------+---------+-------------+-------------------------+-------------------------+ 1 row selected (0.084 seconds)
可能的解决方法
调整DFS存储插件的根路径
Drill的dfs存储插件默认可能仅映射到特定目录(比如/tmp),而非整个文件系统。可以临时修改会话级根路径:ALTER SESSION SET `dfs`.`root` = '/';或者通过Drill Web UI(默认端口8047)进入Storage页面,找到
dfs插件,修改其配置中的root参数为/或目标文件所在的父目录,保存后重启会话。使用正确的路径写法
如果dfs的根不是/,需使用相对路径查询。比如假设dfs根为/home/fabrice,查询语句应改为:select * from dfs.`WORK/test_parquet/test_parquet.tsv`;还可以强制指定文件类型,帮助Drill识别:
select * from dfs.`/home/fabrice/WORK/test_parquet/test_parquet.tsv` (type => 'tsv');刷新目录元数据
可能是Drill的元数据缓存过期,执行以下命令刷新目标目录的元数据:REFRESH TABLE dfs.`/home/fabrice/WORK/test_parquet/`;之后再尝试查询。
验证Drill运行用户权限
虽然文件权限显示为rwxrwxrwx,仍需确认Drill进程的运行用户是否能实际读取该文件。可以切换到Drill运行用户,尝试cat /home/fabrice/WORK/test_parquet/test_parquet.tsv验证。
内容的提问来源于stack exchange,提问作者Fabrice
相关产品推荐
相关产品推荐

