# 1. Dictionary 支持 local/file/executable/HTTP/MySQL/ClickHouse/MongoDB/Redis 等源 A 字典只能从本地文件加载数据 B 字典数据是实时随查询动态获取的 C 字典不支持 ClickHouse 自身作为数据源 D 字典支持 local/file/executable/HTTP/MySQL/ClickHouse/MongoDB/Redis 等多种源,把外部数据加载到内存供查询加速 ✓ 正确答案
# 2. 字典布局(flat/hashed/range)的内存与查询性能差异及 hierarchical 字典 A flat 布局适合大规模不连续 key 的哈希查找 B 所有布局都基于哈希表 C range 布局不支持区间键 D flat 用数组按 key 存储适合连续小 key,hashed 用哈希表适合大数据量,range 支持区间映射,hierarchical 表达层级 ✓ 正确答案
# 3. 字典查询未命中与 NULL 键如何处理?dictGet 与 dictGetOrDefault 的默认值语义与 JOIN 语义的差异是什么? A dictGet 未命中时返回 NULL,等价于外连接 B dictGet 未命中返回类型默认值,dictGetOrDefault 返回自定义默认值;与 JOIN 相比字典无法区分未命中与默认值,JOIN 支持内/外连接语义 ✓ 正确答案 C 字典查询不会影响结果行 D dictGet 与 JOIN 语义完全一致
# 4. CREATE DICTIONARY 的声明与生命周期,字典定义如何刷新?SYSTEM RELOAD DICTIONARY 的触发时机与 DDL 变更的影响是什么? A DDL 变更不影响字典查询 B 字典一旦创建,数据永不刷新 C SYSTEM RELOAD 只能减少刷新频率 D LIFETIME 定义自动刷新周期,SYSTEM RELOAD DICTIONARY 可手动立即刷新,DDL 变更需在重建后生效 ✓ 正确答案
# 5. External Data Sources 通过 MySQL/PostgreSQL 表引擎对接外部关系库 A 它把数据复制到 ClickHouse 本地存储 B 它只能读不能写 C 它支持 ClickHouse 的本地索引与分区 D 它创建映射表实时访问外部库,支持 SELECT 与 INSERT 转发,但不存储数据 ✓ 正确答案
# 6. ODBC/JDBC Bridge 在 ClickHouse 中支持通过 ODBC 接入外部库 A 它是 ClickHouse 内置的原生引擎,无需额外进程 B 它只能连接 MySQL C 它是一个独立辅助进程,通过 ODBC/JDBC 连接 ClickHouse 不原生支持的数据库,经 odbc()/jdbc() 表函数访问 ✓ 正确答案 D 它比原生引擎性能更高
# 7. Dictionary 通过 dictGet/dictGetOrDefault 在查询中按 key 取值 A dictGet 只能用于 WHERE 子句 B dictGet 按 key 取属性值,dictGetOrDefault 指定默认值,另有 dictHas 判断键是否存在 ✓ 正确答案 C dictGet 未命中时返回 NULL D dictGet 会返回多行结果
# 8. ClickHouse Dictionary 的加载模式(lazy/eager/periodic)与更新策略,字典更新失败或阻塞时查询如何降级? A 刷新失败时字典会被清空 B lazy 立即加载,eager 首次查询时加载 C lazy 懒加载、eager 立即加载、periodic 周期刷新;刷新失败时默认保留旧数据保证查询可用 ✓ 正确答案 D 所有模式都在创建时加载
# 9. Dictionary 与 JOIN 的取舍,小维表用字典、大维表用 JOIN 的边界,字典命中率如何提升? A 所有维表都应优先用字典 B 字典命中率与查询性能无关 C JOIN 比字典快,任何情况都应选 JOIN D 小维表用字典(内存补列快),大维表或需完整连接语义用 JOIN;提升命中率需保证 key 类型一致、处理未命中 ✓ 正确答案
# 10. ClickHouse 字典的类型,flat/hashed/range 等 layout 的适用场景? A 所有 layout 都需全量加载到内存 B range 只适合整数 key C direct 是性能最好的布局 D flat 适合连续小 key,hashed 适合大数据量随机 key,range 支持区间映射,cache 缓存部分 key 适合稀疏访问 ✓ 正确答案
# 11. 字典的更新策略,lazy/eager/periodic 与字典失效处理? A eager 在首次访问时加载 B lazy 懒加载、eager 立即加载、periodic 周期刷新;失效时保留旧数据并可用 SYSTEM RELOAD 手动重刷 ✓ 正确答案 C periodic 只能刷新一次 D 字典失效后不可恢复
# 12. 外部表引擎(MySQL/PostgreSQL)的查询下推(WHERE/连接条件下推)与性能边界 A 它完全支持外部库的所有 SQL 优化 B 它会把所有数据拉取到 ClickHouse 再过滤 C WHERE 等条件尽量下推到外部库执行减少传输,但性能受限于外部库与网络,适合小数据量 ✓ 正确答案 D 外推表支持 ClickHouse 本地索引
# 13. ClickHouse 字典的 local 与 global 模式,分布式查询下字典在节点本地加载与全局广播的差异与一致性风险? A 两种模式完全一致 B local 模式保证强一致 C global 模式各节点字典独立 D local 各节点独立加载本地字典,性能好但可能不一致;global 全局广播保证一致但开销大 ✓ 正确答案
# 14. ClickHouse 字典的复杂键(complex_key_hashed)与分层字典(hierarchical)如何建模父子维度关系?dictGet 的缓存与命中率如何提升? A complex_key_hashed 支持复合键,hierarchical 通过父键列表达父子层级并可配合层级函数上卷聚合 ✓ 正确答案 B dictGet 无法命中复杂键 C hierarchical 字典只能用于单层 D 命中率与缓存无关
# 15. MySQL 引擎表如何把写入转发到外部库?批量插入与事务边界在跨库写入时的行为与风险是什么? A 写入是原子的,支持跨库事务 B 写入只发生在 ClickHouse 本地 C INSERT 会实时转发到外部 MySQL,但无跨库事务保障,中途失败可能造成部分写入或重复 ✓ 正确答案 D 批量插入自动保证原子性
# 16. 外部数据源引擎表 vs 字典,实时性与查询性能的差异? A 外部引擎表实时访问但慢,字典内存加载快但数据非实时,需按实时性与性能取舍 ✓ 正确答案 B 两者性能相同 C 字典查询实时性更差 D 外部引擎表比字典快
# 17. ClickHouse 字典的内存占用与容量规划,flat/hashed 布局在亿级 key 时的内存估算? A flat 按 key 范围分配数组,key 稀疏时浪费;hashed 随 key 数线性增长且有固定开销,亿级 key 需提前规划内存 ✓ 正确答案 B 字典内存与 key 数无关 C hashed 布局内存比 flat 更省 D 亿级 key 字典无需内存规划
# 18. 自定义字典源(executable/HTTP)的工程实现与超时处理 A executable 源调用外部程序生成字典,HTTP 源拉取接口数据,均需处理超时与失败降级 ✓ 正确答案 B HTTP 源不支持 JSON 格式 C executable 源只能从本地文件读取 D 自定义源无需处理超时
# 19. 外部数据源(MySQL 引擎表与 HTTP 字典)的连接凭据如何安全配置?明文密码与网络安全(TLS、白名单)如何治理? A 应避免明文密码,用密钥管理/环境变量注入,启用 TLS 加密传输,用最小权限账号与白名单治理 ✓ 正确答案 B 不需要轮换凭据 C 白名单会降低安全性 D 凭据明文写在 DDL 中是安全的