创建字典权限被拒绝

时间:2021-07-07 08:18:57

标签: clickhouse

我在访问新创建的字典时遇到权限错误需要帮助。

我的字典源文件如下:

$ ls -l /root/organization.csv
-rwxrwxrwx 1 clickhouse clickhouse 154 Jul  7 14:56 /root/organization.csv

$ cat /root/organization.csv
1,"a0001","研发部"
2,"a0002","产品部"
3,"a0003","数据部"
4,"a0004","测试部"
5,"a0005","运维部"
6,"a0006","规划部"
7,"a0007","市场部"

我按如下方式创建字典:

CREATE DICTIONARY test_flat_dict
(
    id UInt64,
    code String,
    name String
)
PRIMARY KEY id
SOURCE(FILE(PATH '/root/organization.csv' FORMAT CSV))
LAYOUT(HASHED())
LIFETIME(0);

然后我尝试通过一个简单的 SQL 查询来测试字典:

SELECT * FROM test_flat_dict

但我得到了例外:

Received exception from server (version 21.6.3):
Code: 156. DB::Exception: Received from localhost:9000. DB::Exception: Failed to load dictionary 'eeedf011-4a41-4337-aeed-f0114a414337': std::exception. Code: 1001, type: std::__1::__fs::filesystem::filesystem_error, e.what() = filesystem error: in canonical: Permission denied [/root/organization.csv] [""],

我的字典可能有什么问题?

1 个答案:

答案 0 :(得分:0)

正如 ClickHouse documentation 上所述:

When dictionary with source FILE is created via DDL command (CREATE 
DICTIONARY ...), the source file needs to be located in user_files
directory, to prevent DB users accessing arbitrary file on ClickHouse
node.

我怀疑 ClickHouse 是否能够从根主文件夹中检索文件,即使您的文件具有 777 模式。

所以我建议您将数据文件放在 ./user_files 文件夹下(它位于 ClickHouse 数据文件夹的根目录中)。