从实时分析到数据归档:Apache Druid Parquet/CSV格式导出全指南

从实时分析到数据归档:Apache Druid Parquet/CSV格式导出全指南

【免费下载链接】druid Apache Druid: a high performance real-time analytics database. 【免费下载链接】druid 项目地址: https://gitcode.com/gh_mirrors/druid6/druid

你是否还在为Apache Druid(德鲁伊)的数据导出发愁?报表系统需要CSV格式的历史数据?数据湖要求Parquet格式的批量导入?本文将带你通过3个实用场景,掌握从Druid导出Parquet/CSV文件的完整流程,解决实时分析数据落地的最后一公里问题。读完本文,你将获得:Parquet/CSV两种格式的导出方案、嵌套数据处理技巧、性能优化参数配置,以及完整的操作示例。

导出方案概览

Apache Druid作为高性能实时分析数据库,原生支持多种数据导入格式,但数据导出功能需要通过查询结果落地实现。目前主流的导出方案有两种:通过SQL查询接口导出CSV格式,或使用Multi-Stage Query(MSQ)任务生成Parquet文件。两种方案的对比数据如下:

格式适用场景工具依赖最大文件大小嵌套数据支持
CSV小批量报表导出内置SQL接口依赖查询超时设置需手动扁平化
Parquet大数据量归档MSQ扩展支持TB级数据分片原生支持

官方文档:数据格式说明

CSV格式导出实操

基础SQL导出

通过Druid的SQL接口执行SELECT查询,添加FORMAT参数指定CSV输出格式:

SELECT timestamp, page, added, deleted 
FROM "wikipedia" 
WHERE "__time" BETWEEN TIMESTAMP '2023-01-01' AND TIMESTAMP '2023-01-02'
FORMAT CSV

执行该查询后,可通过HTTP响应直接获取CSV文件。对于包含表头的需求,可添加HEADER选项:

SELECT timestamp, page, added, deleted 
FROM "wikipedia" 
FORMAT CSV HEADER

处理嵌套JSON数据

当导出包含嵌套字段的数据时,需使用JSON_VALUE函数提取嵌套属性。例如,导出包含用户地理位置信息的CSV:

SELECT 
  timestamp, 
  page,
  JSON_VALUE(geo, '$.country') AS country,
  JSON_VALUE(geo, '$.city') AS city,
  added, 
  deleted
FROM "wikipedia"
FORMAT CSV HEADER

导出结果示例:

timestamp,page,country,city,added,deleted
2023-01-01T00:00:00Z,"首页","中国","北京",156,23

Parquet格式导出方案

启用MSQ扩展

Parquet导出依赖Druid的Multi-Stage Query功能,需先在common.runtime.properties中启用扩展:

druid.extensions.loadList=["druid-multi-stage-query", "druid-parquet-extensions"]

扩展模块路径:extensions-core/multi-stage-query/extensions-core/parquet-extensions/

创建Parquet导出任务

使用MSQ任务将数据导出到Deep Storage(深度存储),支持S3、HDFS或本地文件系统。以下是导出Parquet文件的任务示例:

{
  "type": "query",
  "query": {
    "sql": "COPY (SELECT timestamp, page, language, added, deleted FROM wikipedia WHERE __time BETWEEN '2023-01-01' AND '2023-01-02') TO 'deepstorage://bucket/druid-exports/wikipedia-2023-01' FORMAT PARQUET WITH (compression='SNAPPY')"
  }
}

提交任务:通过Druid控制台提交或使用curl命令:

curl -X POST -H "Content-Type: application/json" -d @export-parquet.json http://localhost:8081/druid/v2/sql/task

任务状态监控可通过Overlord节点查看:http://localhost:8090/console.html

高级配置与优化

嵌套数据处理

Parquet格式原生支持嵌套结构,通过flattenSpec配置可保留数据层次。例如处理包含用户信息的嵌套JSON:

"flattenSpec": {
  "useFieldDiscovery": true,
  "fields": [
    {
      "type": "path",
      "name": "user_info",
      "expr": "$.user"
    }
  ]
}

配置示例来源:docs/ingestion/data-formats.md

性能优化参数

参数说明建议值
maxRowsPerFile单个文件最大行数1000000
compression压缩算法SNAPPY(Parquet),GZIP(CSV)
partitionSpec分区字段按__time分桶

常见问题解决

导出任务失败

若任务报"ParquetWriter not found"错误,检查是否加载parquet扩展:

druid.extensions.loadList=["druid-parquet-extensions"]

扩展配置文档:docs/configuration/extensions.md

时间格式处理

导出时指定时间格式,避免默认时间戳格式:

SELECT TIME_FORMAT(timestamp, 'yyyy-MM-dd HH:mm:ss') AS dt, page FROM wikipedia

总结与展望

本文介绍了Apache Druid导出Parquet/CSV格式的两种方案:SQL接口适合小批量CSV导出,MSQ任务适合大规模Parquet归档。随着Druid 27.0版本发布,官方计划推出更完善的EXPORT语法,简化数据导出流程。建议收藏本文,关注docs/ingestion/data-formats.md获取最新更新。

点赞+收藏+关注,不错过 Druid 数据处理技巧!下期预告:《Druid与Apache Iceberg数据湖集成方案》。

【免费下载链接】druid Apache Druid: a high performance real-time analytics database. 【免费下载链接】druid 项目地址: https://gitcode.com/gh_mirrors/druid6/druid

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

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

抵扣说明:

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

余额充值