10分钟上手Apache Doris数据湖加速:零迁移查询Hive/Iceberg实战指南

10分钟上手Apache Doris数据湖加速:零迁移查询Hive/Iceberg实战指南

【免费下载链接】doris Apache Doris is an easy-to-use, high performance and unified analytics database. 【免费下载链接】doris 项目地址: https://gitcode.com/gh_mirrors/dori/doris

你是否还在为数据湖查询速度慢而烦恼?是否因数据迁移成本高而却步?本文将带你一文掌握Apache Doris数据湖查询实战技巧,无需迁移数据即可直接加速Hive、Iceberg等数据湖表查询,让数据分析效率提升10倍!

读完本文你将学会:

  • 3步完成Doris与数据湖集成配置
  • 使用Docker快速搭建测试环境
  • 实现Paimon表秒级查询的具体操作
  • 通过分区裁剪和原生读取优化查询性能

为什么选择Apache Doris数据湖查询

Apache Doris作为高性能统一分析数据库,其数据湖查询功能通过原生扫描器直接读取数据湖文件,避免了传统ETL数据迁移过程。相比直接查询Hive或Iceberg,Doris带来三大核心优势:

  1. 性能提升:通过向量化执行引擎和分区裁剪技术,查询速度提升5-10倍
  2. 架构简化:无需数据迁移,直接查询数据湖原始数据
  3. 实时性增强:支持数据湖表的实时更新和删除操作

核心技术实现位于fe/be-java-extensions/目录,包含Hudi、Iceberg、Paimon等多种数据湖的扫描器实现。

快速部署:Docker一键启动完整环境

Doris提供了便捷的Docker Compose配置,可快速搭建包含Doris、Iceberg、Paimon、Flink和Spark的完整数据湖查询环境。

环境准备

# 确保系统参数正确
sysctl -w vm.max_map_count=2000000

# 启动所有服务
bash samples/datalake/iceberg_and_paimon/start_all.sh

上述脚本会启动以下服务组件:

  • Apache Doris集群(FE + BE)
  • Iceberg元数据服务
  • Paimon目录服务
  • Flink集群(用于数据湖表写入)
  • Spark客户端(用于数据湖表管理)
  • MinIO(S3兼容对象存储)

完整的Docker Compose配置文件位于samples/datalake/iceberg_and_paimon/docker-compose.yml

配置数据湖Catalog

Doris通过Catalog机制连接外部数据湖,只需简单配置即可直接访问Iceberg和Paimon表。

创建Iceberg Catalog

CREATE CATALOG `iceberg` PROPERTIES (
    "type" = "iceberg",
    "iceberg.catalog.type" = "rest",
    "uri"="http://rest:8181",
    "warehouse" = "s3://warehouse/",
    "s3.endpoint"="http://minio:9000",
    "s3.access_key"="admin",
    "s3.secret_key"="password",
    "s3.region"="us-east-1"
);

创建Paimon Catalog

CREATE CATALOG `paimon` PROPERTIES (
    "type" = "paimon",
    "warehouse" = "s3://warehouse/wh/",
    "s3.endpoint"="http://minio:9000",
    "s3.access_key"="admin",
    "s3.secret_key"="password",
    "s3.region"="us-east-1"
);

完整的初始化SQL脚本可参考samples/datalake/iceberg_and_paimon/sql/init_doris.sql

Paimon表查询实战

让我们通过一个实际案例演示如何使用Doris查询Paimon表并享受性能加速。

1. 进入Doris客户端

bash samples/datalake/iceberg_and_paimon/start_doris_client.sh

2. 访问Paimon表

-- 切换到Paimon数据库
USE paimon.db_paimon;

-- 查看表列表
SHOW TABLES;

-- 查询表数据
SELECT * FROM customer ORDER BY c_custkey LIMIT 4;

查询结果如下:

+-----------+--------------------+---------------------------------------+-------------+-----------------+-----------+--------------+--------------------------------------------------------------------------------------------------------+
| c_custkey | c_name             | c_address                             | c_nationkey | c_phone         | c_acctbal | c_mktsegment | c_comment                                                                                              |
+-----------+--------------------+---------------------------------------+-------------+-----------------+-----------+--------------+--------------------------------------------------------------------------------------------------------+
|         1 | Customer#000000001 | IVhzIApeRb ot,c,E                     |          15 | 25-989-741-2988 |    711.56 | BUILDING     | to the even, regular platelets. regular, ironic epitaphs nag e                                         |
|         2 | Customer#000000002 | XSTf4,NCwDVaWNe6tEgvwfmRchLXak        |          13 | 23-768-687-3665 |    121.65 | AUTOMOBILE   | l accounts. blithely ironic theodolites integrate boldly: caref                                        |
|         3 | Customer#000000003 | MG9kdTD2WBHm                          |           1 | 11-719-748-3364 |   7498.12 | AUTOMOBILE   |  deposits eat slyly ironic, even instructions. express foxes detect slyly. blithely even accounts abov |
|        32 | Customer#000000032 | jD2xZzi UmId,DCtNBLXKj9q0Tlp2iQ6ZcO3J |          15 | 25-430-914-2194 |   3471.53 | BUILDING     | cial ideas. final, furious requests across the e                                                       |
+-----------+--------------------+---------------------------------------+-------------+-----------------+-----------+--------------+--------------------------------------------------------------------------------------------------------+

查询性能优化:分区裁剪与原生读取

Doris对数据湖查询提供了多种优化技术,包括分区裁剪、谓词下推和原生文件读取。

查看查询计划

通过EXPLAIN VERBOSE命令可以查看Doris如何优化数据湖查询:

EXPLAIN VERBOSE SELECT * FROM customer WHERE c_nationkey < 3;

计划输出显示Doris仅读取符合条件的分区文件:

0:VPAIMON_SCAN_NODE(68)
   table: customer
   predicates: (c_nationkey[#3] < 3)
   inputSplitNum=3, totalFileSize=193823, scanRanges=3
   partition=3/0
   backends:
     10002
       s3://warehouse/wh/db_paimon.db/customer/c_nationkey=1/bucket-0/data-15cee5b7-1bd7-42ca-9314-56d92c62c03b-0.orc start: 0 length: 66600
       s3://warehouse/wh/db_paimon.db/customer/c_nationkey=2/bucket-0/data-e98fb7ef-ec2b-4ad5-a496-713cb9481d56-0.orc start: 0 length: 64059
       s3://warehouse/wh/db_paimon.db/customer/c_nationkey=0/bucket-0/data-431be05d-50fa-401f-9680-d646757d0f95-0.orc start: 0 length: 63164
   paimonNativeReadSplits=3/3
   PaimonSplitStats:
     SplitStat [type=NATIVE, rowCount=771, rawFileConvertable=true, hasDeletionVector=false]
     SplitStat [type=NATIVE, rowCount=750, rawFileConvertable=true, hasDeletionVector=false]
     SplitStat [type=NATIVE, rowCount=750, rawFileConvertable=true, hasDeletionVector=false]

可以看到Doris:

  1. 只读取c_nationkey < 3的3个分区
  2. 使用原生ORC读取器直接解析文件
  3. 准确预估每个文件的行数

支持数据湖表更新操作

Doris完全支持数据湖表的更新和删除操作,包括Paimon的Deletion Vector特性。

通过Flink更新数据

-- 在Flink SQL客户端执行
UPDATE customer SET c_address='c_address_update' WHERE c_nationkey = 1;

在Doris中查看更新结果

SELECT * FROM customer WHERE c_nationkey=1 LIMIT 2;

结果显示Doris正确读取了更新后的数据:

+-----------+--------------------+-----------------+-------------+-----------------+-----------+--------------+--------------------------------------------------------------------------------------------------------+
| c_custkey | c_name             | c_address       | c_nationkey | c_phone         | c_acctbal | c_mktsegment | c_comment                                                                                              |
+-----------+--------------------+-----------------+-------------+-----------------+-----------+--------------+--------------------------------------------------------------------------------------------------------+
|         3 | Customer#000000003 | c_address_update |           1 | 11-719-748-3364 |   7498.12 | AUTOMOBILE   |  deposits eat slyly ironic, even instructions. express foxes detect slyly. blithely even accounts abov |
|       513 | Customer#000000513 | c_address_update |           1 | 11-861-303-6887 |    955.37 | HOUSEHOLD    | press along the quickly regular instructions. regular requests against the carefully ironic s          |
+-----------+--------------------+-----------------+-------------+-----------------+-----------+--------------+--------------------------------------------------------------------------------------------------------+

总结与扩展

通过Apache Doris的数据湖查询功能,用户可以直接查询Hive、Iceberg和Paimon等数据湖表,无需数据迁移即可享受高性能分析。本文演示的Paimon集成方案同样适用于Iceberg和Hive表,只需修改相应的Catalog配置。

更多数据湖集成示例可参考:

官方文档:docs/ 项目教程:README.md

掌握Doris数据湖查询,让你的数据分析架构更灵活、更高效!

【免费下载链接】doris Apache Doris is an easy-to-use, high performance and unified analytics database. 【免费下载链接】doris 项目地址: https://gitcode.com/gh_mirrors/dori/doris

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值