数仓工具对比
问题
常用的数仓工具有哪些?如何选型?
答案
主流工具概览
| 工具 | 类型 | 适用场景 | 特点 |
|---|---|---|---|
| Hive | 批处理引擎 | 离线数仓 | 稳定、生态好、SQL on Hadoop |
| Spark SQL | 批处理引擎 | 大规模计算 | 内存计算、比 Hive 快 10x |
| Flink SQL | 流处理引擎 | 实时数仓 | 真流式、低延迟 |
| ClickHouse | OLAP 引擎 | 实时查询 | 列式存储、极速聚合 |
| Doris/StarRocks | OLAP 引擎 | 实时分析 | 简单运维、兼容 MySQL |
| dbt | 数据转换工具 | ELT 模式 | SQL 模板、文档自动化 |
| Presto/Trino | 查询引擎 | 交互式查询 | 跨数据源联邦查询 |
按场景选型
现代数据栈(Modern Data Stack)
| 环节 | 传统方案 | 现代方案 |
|---|---|---|
| 数据采集 | Sqoop / Flume | Airbyte / Fivetran |
| 存储 | HDFS + Hive | Snowflake / BigQuery / Databricks |
| 转换 | Hive SQL + 调度 | dbt |
| 调度 | Crontab / Azkaban | Airflow / Dagster |
| BI | 自研 | Metabase / Looker |
dbt 的核心价值
- SQL 即代码:所有转换逻辑用 SQL 编写,版本控制(Git)
- 自动文档:生成数据血缘图和表文档
- 测试:内置数据质量测试(not_null、unique、ref integrity)
- 复用:Jinja 模板 + Macro 实现 SQL 复用
常见面试问题
Q1: Hive 和 Spark SQL 有什么区别?
答案:
| 对比 | Hive | Spark SQL |
|---|---|---|
| 执行引擎 | MapReduce(默认) | Spark 内存计算 |
| 速度 | 较慢 | 快 10~100 倍 |
| 资源 | 磁盘 IO | 需要大内存 |
| 小文件 | 不友好 | 可合并 |
| 适用 | 超大规模、稳定性优先 | 性能优先 |
现在 Hive 也可以用 Spark/Tez 作为执行引擎。
Q2: ClickHouse 和 Doris 怎么选?
答案:
| 对比 | ClickHouse | Doris/StarRocks |
|---|---|---|
| 写入 | 批量写入好,实时写入一般 | 实时写入好 |
| 运维 | 需要手动管理 | 简单(自动分片) |
| JOIN | 大表 JOIN 性能差 | 支持更复杂 JOIN |
| 协议 | HTTP / Native | 兼容 MySQL 协议 |
| 生态 | 成熟、社区大 | 快速发展中 |
Q3: 什么是 dbt?为什么越来越火?
答案:
- dbt(data build tool)是数据转换工具,核心理念是 ELT(先 Load 后 Transform)
- 和 ETL 工具的区别:dbt 只做 T(Transform),不做 E(Extract)和 L(Load)
- 火的原因:
- SQL 工程师也能做数据建模(不需要 Java/Python)
- Git 版本控制 + 代码审查
- 自动生成文档和血缘
- 与云数仓(Snowflake、BigQuery)完美配合