前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Doris数据导出全攻略 - 让数据流转自由如风

Doris数据导出全攻略 - 让数据流转自由如风

作者头像
一臻数据
发布2024-12-24 16:17:02
发布2024-12-24 16:17:02
15000
代码可运行
举报
文章被收录于专栏:一臻数据一臻数据
运行总次数:0
代码可运行

各位看官们,你有遇到过这样的场景吗? 深夜里,同事的一条紧急消息:"老板要看季度数据分析报表,能帮我把数据导出一下吗?" 早会上,数仓大佬放出豪言:"我们要打通全链路数据,实现无缝数据流转。" 业务评审中,架构师严肃提醒:"数据迁移方案必须确保零丢失,还得保证性能。" 面对这些看似简单实则暗藏玄机的数据导出需求,你是否也曾手足无措? 别担心,今天我们就来聊聊数据导出这个看似平凡却又充满技术魅力的话题。从同步到异步,从单线程到高并发,一起探索Doris数据流转背后的精妙设计,把数据导出变成一件既有趣又简单的事情!

Doris数据导出功能全景图

在大数据生态体系中,数据导出类似于一座桥梁,连接着不同的数据系统。没有高效便捷的数据导出功能,再强大的数据分析能力也会被局限。Apache Doris对于这座桥梁,设计了三种灵活的数据导出方案,满足不同场景下的数据流转需求。

在数据分析领域,SELECT INTO OUTFILE就像一把精巧的瑞士军刀,灵活强大。它能够将任意SQL查询结果导出,支持复杂的数据计算和过滤。整个过程同步执行,你可以实时掌控导出进度。

EXPORT则像一台工业级流水线,专为大规模数据迁移而生。它以异步方式运行,可以导出整张表或指定分区的数据。即使面对TB级数据量,依然能保持稳定可靠的性能。

MySQL DUMP是一位经验丰富的老前辈,专注于表结构和小规模数据的备份。它完全兼容MySQL生态,让你无缝对接现有工具链。

这三种导出方式各有特色:

SELECT INTO OUTFILE:

  • 同步执行模式
  • 支持任意SQL查询
  • 并发导出能力
  • 适合需要复杂计算的场景

EXPORT:

  • 异步执行模式
  • 支持分区级导出
  • 并发导出能力
  • 适合大规模数据迁移

MySQL DUMP:

  • 同步执行模式
  • 支持表结构导出
  • 单线程执行
  • 适合开发测试环境

在文件格式方面,Doris支持业界主流的列式存储格式Parquet和ORC,以及通用的CSV格式。导出目标可以是HDFS、对象存储或本地文件系统,充分满足各类业务场景需求。

走近Doris三种导出方式的核心特性

SELECT INTO OUTFILE的灵活之道

SELECT INTO OUTFILE最大的亮点在于"灵活"二字。设想一个电商数据分析场景:

代码语言:javascript
代码运行次数:0
复制
SELECT 
  DATE_FORMAT(create_time,'%Y-%m') AS month,
  province,
  COUNT(DISTINCT user_id) AS users,
  SUM(order_amount) AS gmv
FROM orders 
WHERE create_time >= '2024-01-01'
GROUP BY 1,2 
INTO OUTFILE "s3://dw/reports/province_summary_"
FORMAT AS CSV
PROPERTIES(
  "s3.endpoint" = "${endpoint}",
  "s3.region" = "ap-beijing",
  "s3.access_key"= "ak",
  "s3.secret_key" = "sk",
  "column_separator" = ",",
  "line_delimiter" = "\n",
  "max_file_size" = "512MB"
);

这段SQL不仅完成了数据计算,还将结果直接导出到对象存储中。一次性解决分析和导出两大需求。

开启并发导出后,性能提升显著:

  1. 多个BE节点并行导出数据
  2. 每个BE节点处理自己负责的数据分片
  3. 自动合并各节点的导出结果

EXPORT的稳定之道

EXPORT专注于大规模数据的稳定导出。它采用异步设计,提交任务后你可以继续处理其他工作。系统会自动调度任务执行:

代码语言:javascript
代码运行次数:0
复制
EXPORT TABLE retail_db.user_behavior 
PARTITION (dt='2024-01-01') 
TO "hdfs://data/export/user_behavior_"
PROPERTIES(
    "format" = "parquet",
    "max_file_size" = "2048MB",
    "parallelism" = "5"
);

Export 任务的底层是执行SELECT INTO OUTFILE SQL 语句。用户发起一个 Export 任务后,Doris 会根据 Export 要导出的表构造出一个或多个 SELECT INTO OUTFILE 执行计划,随后将这些SELECT INTO OUTFILE 执行计划提交给 Doris 的 Job Schedule 任务调度器,Job Schedule 任务调度器会自动调度这些任务并执行。

导出过程中,你可以通过SHOW EXPORT命令实时监控进度。系统还提供了导出成功标识文件功能,帮助下游系统判断数据是否完整可用。

MySQL DUMP的兼容之道

MySQL DUMP保持了与MySQL生态的深度兼容。它支持导出表结构和数据:

代码语言:javascript
代码运行次数:0
复制
# 导出表结构
mysqldump -h127.0.0.1 -P9030 -uroot --no-tablespaces \
  --databases test --tables orders --no-data

# 导出数据和结构
mysqldump -h127.0.0.1 -P9030 -uroot --no-tablespaces \
  --databases test --tables orders

导出的SQL文件可以直接在MySQL或Doris中执行导入,实现系统间的无缝迁移。

在实际应用中,建议:

  • 计算导出场景 -> SELECT INTO OUTFILE
  • 大数据迁移场景 -> EXPORT
  • 开发测试场景 -> MySQL DUMP

导出最佳实践

高效并发导出配置

代码语言:javascript
代码运行次数:0
复制
-- 开启并发导出
SET enable_parallel_outfile = true;

-- 调整内存限制(默认2GB)
-- 比如一个查询计划,在同一个 BE 上需要扫描的 Tablet 过多,或者 Tablet 的数据版本过多时,可能会导致内存不足。可以调整 session 变量exec_mem_limit来调大内存使用限制。
SET exec_mem_limit = 4294967296; -- 4GB

-- 执行导出命令
SELECT * FROM metrics_table
INTO OUTFILE "hdfs://metrics/export_"
FORMAT AS PARQUET
PROPERTIES(
    "max_file_size" = "1024MB",
    -- 是否删除导出目录下已存在的文件及目录
    "delete_existing_files" = "true" 
);

文件管理策略

代码语言:javascript
代码运行次数:0
复制
-- 添加导出成功标识
SELECT * FROM daily_stats 
INTO OUTFILE "s3://stats/export_"
PROPERTIES(
    "success_file_name" = "SUCCESS",
    "max_file_size" = "512MB"
);

导出文件管理的核心要点:

  • 合理设置单文件大小上限
  • 利用success_file标识导出完成
  • 定期清理历史导出文件
  • 导出前检查目标空间容量

常见陷阱预警

  1. ORDER BY陷阱:含ORDER BY的查询无法并发导出
  2. 内存陷阱:大量分区/版本可能导致内存不足
  3. 超时陷阱:大数据量导出需适当延长超时时间
  4. 并发陷阱:并发度不是越大越好,需要权衡系统资源

数据导出看似简单,实则暗藏玄机。掌握这些优化技巧,才能构建稳定高效的数据管道。

下期,我们将一起探讨Doris其它更有趣有用有价值的内容,敬请期待!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-11-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一臻数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Doris数据导出功能全景图
  • 走近Doris三种导出方式的核心特性
    • SELECT INTO OUTFILE的灵活之道
    • EXPORT的稳定之道
    • MySQL DUMP的兼容之道
  • 导出最佳实践
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档