使用 DuckLake 和 DuckDB 构建 S3 数据湖实战指南
本文介绍了由 DuckDB 和 DuckLake 组成的轻量级数据湖方案,旨在解决传统数据湖(如Hadoop+Hive)元数据管理复杂、查询性能低及厂商锁定等问题。该方案为中小规模数据湖场景提供了简单、高性能且无厂商锁定的替代选择。
1. 什么是 DuckLake 和 DuckDB?
在现代数据架构中,数据湖(Data Lake) 和 湖仓一体(Lakehouse) 已成为存储和管理大规模结构化与非结构化数据的核心方案。然而,传统的数据湖(如 Hadoop + Hive)往往存在元数据管理复杂、查询性能低、依赖特定厂商等问题。
DuckDB 是一个高性能的嵌入式分析数据库,支持 SQL 查询和向量化执行,特别适合本地和云环境下的数据分析。而 DuckLake 是一个基于 DuckDB 的轻量级表格式,它将元数据存储在 SQL 数据库(如 DuckDB)中,而实际数据则存储在开放格式(如 Parquet)的云存储(如 S3、GCS、Azure Blob Storage)上。
DuckLake 的核心优势:
✅ 简单易用:所有元数据管理通过 SQL 完成,无需复杂配置。
✅ 高性能:元数据操作极快,查询性能优异。
✅ 开放标准:数据存储在 Parquet 格式,元数据可移植。
✅ ACID 事务支持:支持 schema 演进、时间旅行(Time Travel)等高级功能。
2. 环境准备:安装 DuckDB 并加载扩展
首先,确保已安装 DuckDB(官方下载地址)。然后,在 DuckDB 中加载必要的扩展以支持云存储和 DuckLake:
-- 安装并加载 AWS S3 支持
INSTALL aws;
LOAD aws;-- 安装 HTTP 文件系统支持(可选,用于远程数据访问)
INSTALL httpfs;
LOAD httpfs;-- 安装 Parquet 支持(用于读取/写入 Parquet 文件)
INSTALL parquet;
LOAD parquet;-- 安装 DuckLake 扩展
INSTALL ducklake;
LOAD ducklake;
3. 配置 AWS 凭证
DuckDB 支持从环境变量或直接加载 AWS 凭证。推荐使用环境变量方式(更安全):
# 在终端设置 AWS 凭证(Linux/macOS)
export AWS_ACCESS_KEY_ID="your-access-key"
export AWS_SECRET_ACCESS_KEY="your-secret-key"
export AWS_REGION="us-east-1" # 替换为你的 S3 区域
或者在 DuckDB 中直接加载凭证:
-- 直接加载 AWS 凭证(不推荐生产环境使用)
CALL load_aws_credentials();
4. 创建 DuckLake 目录并连接 S3
DuckLake 使用 目录(Catalog) 管理表元数据。我们可以在 S3 上创建一个 DuckLake 目录:
-- 在 S3 上创建 DuckLake 目录
ATTACH 'ducklake:metadata.ducklake' (DATA_PATH 's3://your-bucket/your-prefix/' -- 替换为你的 S3 路径
);
metadata.ducklake
是元数据文件名(DuckDB 会自动管理)。DATA_PATH
指定 S3 存储路径,所有 Parquet 数据将存储在此目录下。
5. 创建表、插入数据、更新和删除
(1) 创建表
-- 在 DuckLake 目录中创建表
CREATE TABLE IF NOT EXISTS metadata.customers (customer_id INTEGER,first_name STRING,last_name STRING,email STRING,city STRING,created_at TIMESTAMP
);
(2) 插入数据
-- 插入示例数据
INSERT INTO metadata.customers VALUES(1, 'Alice', 'Smith', 'alice@example.com', 'New York', CURRENT_TIMESTAMP),(2, 'Bob', 'Johnson', 'bob@example.com', 'San Francisco', CURRENT_TIMESTAMP);
(3) 更新数据
-- 更新 Bob 的城市
UPDATE metadata.customers
SET city = 'Los Angeles'
WHERE customer_id = 2;
(4) 删除数据
-- 删除 Alice 的记录
DELETE FROM metadata.customers
WHERE customer_id = 1;
(5) 查询数据
-- 查询所有客户
SELECT * FROM metadata.customers;
6. 高级功能:ACID 事务 & 时间旅行
DuckLake 支持 ACID 事务,确保数据一致性。例如:
-- 开启事务
BEGIN TRANSACTION;-- 插入新数据
INSERT INTO metadata.customers VALUES(3, 'Charlie', 'Brown', 'charlie@example.com', 'Chicago', CURRENT_TIMESTAMP);-- 更新数据
UPDATE metadata.customers
SET city = 'Seattle'
WHERE customer_id = 2;-- 提交事务
COMMIT;
时间旅行(Time Travel) 允许查询历史数据版本:
-- 查询 1 小时前的数据(假设 DuckLake 支持时间旅行)
SELECT * FROM metadata.customers AT TIMESTAMP '2025-05-28 12:00:00';
注意:时间旅行功能可能需要额外配置,具体取决于 DuckLake 版本。
7. 为什么选择 DuckLake + DuckDB?
特性 | DuckLake + DuckDB | 传统数据湖(Hive/Hadoop) |
---|---|---|
元数据管理 | SQL 管理,简单高效 | 依赖 Hive Metastore,复杂 |
查询性能 | 向量化执行,极快 | 依赖 MapReduce/Spark,较慢 |
数据格式 | Parquet(开放标准) | Parquet/ORC(但依赖特定工具) |
ACID 支持 | 完整支持 | 部分支持(如 Delta Lake) |
厂商锁定 | 无锁定,纯开源 | 可能依赖 Hadoop/Spark 生态 |
8. 总结
DuckLake + DuckDB 提供了一种 轻量级、高性能、开源 的数据湖解决方案,特别适合:
- 本地开发(嵌入式 DuckDB)
- 云原生分析(S3/GCS 存储)
- 需要 ACID 事务的场景
下一步尝试:
- 在 Minio本地环境 上集成 DuckDB
- 使用 DuckDB + Python / R / Java 进行更复杂的数据分析
🚀 立即体验 DuckLake + DuckDB,构建你的下一代数据湖!
相关文章:

使用 DuckLake 和 DuckDB 构建 S3 数据湖实战指南
本文介绍了由 DuckDB 和 DuckLake 组成的轻量级数据湖方案,旨在解决传统数据湖(如HadoopHive)元数据管理复杂、查询性能低及厂商锁定等问题。该方案为中小规模数据湖场景提供了简单、高性能且无厂商锁定的替代选择。 1. 什么是 DuckLake 和 D…...

大语言模型提示词(LLM Prompt)工程系统性学习指南:从理论基础到实战应用的完整体系
文章目录 前言:为什么提示词工程成为AI时代的核心技能一、提示词的本质探源:认知科学与逻辑学的理论基础1.1 认知科学视角下的提示词本质信息处理理论的深层机制图式理论的实际应用认知负荷理论的优化策略 1.2 逻辑学框架下的提示词架构形式逻辑的三段论…...

如何基于Mihomo Party http端口配置git与bash命令行代理
如何基于Mihomo Party http端口配置git与bash命令行代理 1. 确定Mihomo Party http端口配置 点击内核设置后即可查看 默认7892端口,开启允许局域网连接 2. 配置git代理 配置本机代理可以使用 127.0.0.1 配置局域网内其它机代理需要使用本机的非回环地址 IP&am…...
CMake 为 Debug 版本的库或可执行文件添加 d 后缀
在使用 CMake 构建项目时,我们经常需要区分 Debug 和 Release 构建版本。一个常见的做法是为 Debug 版本的库或可执行文件添加后缀(如 d),例如 libmylibd.so 或 myappd.exe。 本文将介绍几种在 CMake 中实现为 Debug 版本自动添加 d 后缀的方法。 方法一:使用 CMAKE_DEBU…...
Linux 特殊权限位详解:SetUID, SetGID, Sticky Bit
Linux 特殊权限位详解:SetUID, SetGID, Sticky Bit 在Linux权限系统中,除了基本的读、写(w)、执行(x)权限外,还有三个特殊权限位:SetUID、SetGID和Sticky Bit。这些权限位提供了更精细的权限控制机制,尤其在需要临时提升权限或管理共享资源时非常有用。 一、SetUID (s位…...

埃文科技智能数据引擎产品入选《中国网络安全细分领域产品名录》
嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》,埃文科技智能数据引擎产品成功入选数据分级分类产品名录。 在数字化转型加速的今天,网络安全已成为企业生存与发展的核心基石,为了解这一蓬勃发展的产业格局,嘶吼安全产业…...
使用VTK还是OpenGL集成到qt程序里哪个好?
在Qt程序中集成VTK与OpenGL:选择哪个更好? 在Qt程序中实现三维可视化时,开发者常常面临一个选择:是使用VTK(Visualization Toolkit)还是OpenGL(Open Graphics Library)。这两种技术…...
Java-IO流之打印流详解
Java-IO流之打印流详解 一、打印流概述1.1 什么是打印流1.2 打印流的特点1.3 打印流的应用场景 二、PrintStream详解2.1 基本概念2.2 构造函数2.3 核心方法2.4 使用示例 三、PrintWriter详解3.1 基本概念3.2 构造函数3.3 核心方法3.4 使用示例 四、PrintStream与PrintWriter的比…...
高效图像处理:使用 Pillow 进行格式转换与优化
高效图像处理:使用 Pillow 进行格式转换与优化 1. 背景引入 在图像处理应用中,格式转换、裁剪、压缩等操作是常见需求。Python 的 Pillow 库基于 PIL(Python Imaging Library),提供 轻量、强大 的图像处理能力,广泛用于 Web 开发、数据分析、机器学习 等领域。 本文将…...
Github 2025-06-06 Java开源项目日报Top10
根据Github Trendings的统计,今日(2025-06-06统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目10TypeScript项目1Java实现的算法集合:使用Gitpod.io进行编辑和贡献 创建周期:2883 天开发语言:Java协议类型:MIT LicenseStar数量…...
使用 Ansible 在 Windows 服务器上安装 SSL 证书
在本教程中,我将向您展示如何使用 Ansible 在 Windows 服务器上安装 SSL 证书。使用 Ansible 自动化 SSL 证书安装过程可以提高 IT 运营的效率、一致性和协作性。我将介绍以下步骤: 将 SSL 证书文件复制到服务器将 PFX 证书导入指定的存储区获取导入的证…...
厂区能源监控系统:网关赋能下的高效能源管理与环保监测
在现代工业生产领域,能源的有效利用与环境保护是企业实现可持续发展的两大关键要素。厂区能源监控系统借助先进的信息技术与自动化控制手段,对厂区内能源消耗及污水处理等核心环节展开实时监控与精细化管理。其中,御控网关作为系统关键枢纽&a…...
CentOS 7 如何安装llvm-project-10.0.0?
CentOS 7 如何安装llvm-project-10.0.0? 需要先升级gcc至7.5版本,详见CentOS 7如何编译安装升级gcc版本?一文 # 备份之前的yum .repo文件至 /tmp/repo_bak 目录 mkdir -p /tmp/repo_bak && cd /etc/yum.repo.d && /bin/mv ./*.repo …...
Cursor 1.0 的核心功能亮点及技术价值分析
Cursor 1.0 的核心功能亮点及技术价值分析 结合官方更新和开发者实测整理: 🛠️ 一、BugBot:智能自动化代码审查 功能亮点:深度集成 GitHub,自动扫描 Pull Request(PR)中的潜在 Bug(…...
软考 系统架构设计师系列知识点之杂项集萃(83)
接前一篇文章:软考 系统架构设计师系列知识点之杂项集萃(82) 第150题 体系结构权衡分析方法(Architecture Tradeoff Analysis Method,ATAM)是一种常见的系统架构评估框架,该框架主要关注系统的…...

NLP学习路线图(二十六):自注意力机制
一、为何需要你?序列建模的困境 在你出现之前,循环神经网络(RNN)及其变种LSTM、GRU是处理序列数据(如文本、语音、时间序列)的主流工具。它们按顺序逐个处理输入元素,将历史信息压缩在一个隐藏…...

Unity3D仿星露谷物语开发60之定制角色其他部位
1、目标 上一篇中定制了角色的衬衫、手臂。 本篇中将定制角色其他部位的图形,包括:裤子、发型、皮肤、帽子等。 2、定制裤子 (1)修改ApplyCharacterCustomisation.cs脚本 我们需要设置一个输入框选择裤子的颜色。 // Select …...
C++动态链接库封装,供C#/C++ 等编程语言使用——C++动态链接库概述(总)
目录: 一、前言及背景1.1需求描述1.2常见编程语言对比1.3应用背景 二、C对外接口2.1C对外封装2.2基于目标平台封装接口形式 三、系列文章汇总 一、前言及背景 1.1需求描述 不同的编程语言,具有不同的编程生态环境,对于项目应用来说ÿ…...

Google机器学习实践指南(机器学习模型泛化能力)
🔥 Google机器学习(14)-机器学习模型泛化能力解析 Google机器学习(14)-机器学习模型泛化原理与优化(约10分钟) 一、泛化问题引入 ▲ 模型表现对比: 假设森林中树木健康状况预测模型: 图1:初始模型表现 …...

MySQL性能调优:Mysql8高频面试题汇总
1,主键和唯一键有什么区别? 主键不能重复,不能为空,唯一键不能重复,可以为空。 建立主键的目的是让外键来引用。 一个表最多只有一个主键,但可以有很多唯一键 2,MySQL常用的存储引擎有哪些&…...
Neo4j 数据建模:原理、技术与实践指南
Neo4j 作为领先的图数据库,其核心优势在于利用图结构直观地表达和高效地查询复杂关系。其数据建模理念与传统关系型数据库截然不同,专注于实体(节点)及其连接(关系)。以下基于官方文档,系统阐述其建模原理、关键技术、实用技巧及最佳实践: 一、 核心原理:以关系为中心…...
【数据结构知识分享】顺序表详解
一、存储结构 物理相邻性: 若元素 a 和 b 逻辑相邻,则它们在内存中的地址也连续(如 &a[i1] &a[i] sizeof(ElemType))。 内存布局x: 基地址 索引 元素大小,通过首地址直接计算任意位置地址。 …...

vue+elementUI+springboot实现文件合并前端展示文件类型
项目场景: element的table上传文件并渲染出文件名称点击所属行可以查看文件,并且可以导出合并文件,此文章是记录合并文档前端展示的帖子 解决方案: 后端定义三个工具类 分别是pdf,doc和word的excle的目前我没整 word的工具类 package com.sc.modules…...

高效绘制业务流程图!专业模板免费下载
在复杂的业务流程管理中,可视化工具已成为提升效能的核心基础设施。为助力开发者、项目经理及业务架构师高效落地流程标准化,本文将为你精选5套开箱即用的专业流程图模板。这些模板覆盖跨部门协作、电商订单、客户服务等高频场景,具备以下核心…...

Spring Boot + Prometheus 实现应用监控(基于 Actuator 和 Micrometer)
文章目录 Spring Boot Prometheus 实现应用监控(基于 Actuator 和 Micrometer)环境准备示例结构启动和验证验证 Spring Boot 应用Prometheus 抓取配置(静态方式)Grafana 面板配置总结 Spring Boot Prometheus 实现应用监控&…...

PowerBI企业运营分析—列互换式中国式报表分析
PowerBI企业运营分析—列互换式中国式报表分析 欢迎来到Powerbi小课堂,在竞争激烈的市场环境中,企业运营分析平台成为提升竞争力的核心工具。 该平台通过高效整合多源数据,并实时监控关键指标,能够迅速揭示业务表现的全貌&#…...

BugKu Web渗透之需要管理员
启动场景,打开网页,显示如下: 一般没有上面头绪的时候,就是两步:右键查看源代码 和 扫描网站目录。 步骤一: 右键查看源代码 和 扫描网站目录。 右键查看源代码没有发现异常。 于是扫描网站目录&…...
Java集合初始化:Lists.newArrayList vs new ArrayList()
文章目录 前言一、核心区别全景图二、代码实现深度对比1. 初始化方式对比2. 容量预分配机制 三、性能与底层原理1. 内存分配策略2. 基准测试数据(JMH) 四、Guava的进阶功能生态1. 集合转换2. 集合分片3. 不可变集合创建 五、最佳实践指南六、源码级实现解…...
VBA清空数据
列数转字母 Function CNtoW(ByVal num As Long) As String CNtoW Replace(Cells(1, num).Address(False, False), "1", "") End Function 字母转列数 Function CWtoN(ByVal AB As String) As Long CWtoN Range("a1:" & AB & &…...
【信息系统项目管理师-选择真题】2025上半年(第二批)综合知识答案和详解(回忆版)
更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 【第1题】【第2题】【第3题】【第4题】【第5题】【第6题】【第7题】【第8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16题】【第17题】【第18题】【第19题】【第20题】【第…...