ducklake是duckdb1.3.0提供的新功能,功能类似于apache iceberg以及snowflake产品。
具体介绍可以查看
ducklake 简介
以duckdb的ducklake extension形式提供。
主要包括两部分,元数据和数据(catalog和data)
catalog以关系型数据库提供,现在支持存储在duckdb,sqlite,postgres,mysql中
数据以parquet格式存储,支持放在本地目录,网络目录以及oss(blob storage)中(S3)
具体帮助可以查看官方文档
ducklake帮助
下面测试是将catalog放到postgresql中,数据放到minio中
1. 下载minio,启动后在控制台中创建名字为testbucket的bucket. 并在该桶中创建data_folder的目录,用来存储数据。具体操作不在此详细说明,可以查看minio的帮助文档
2. 在控制台中创建 Access Key
3. duckdb中安装postgres,httpfs,ducklake并加载
4. 在postgresql中创建一个名字为duckdb_catalog的数据库
4. duckdb中创建s3的secret用来链接minio
D CREATE SECRET (TYPE s3,KEY_ID '2bdJFd2NxgUT7sHk',SECRET 'bexDKzaOA3Y6Yh17LA6FD9ADwTMzANtm',ENDPOINT '192.168.100.138:9000');
┌─────────┐
│ Success │
│ boolean │
├─────────┤
│ true │
└─────────┘
D set s3_url_style='path';
5. duckdb中创建ducklake
attach 'ducklake:postgres:dbname=ducklake_catalog port=15432 user=postgres' as my_ducklake (data_path 's3://testbucket/data_folder');
6. 创建成功后,在postgresql 的ducklake_catalog库中创建了很多ducklake相关的catalog表,这些表就是用来管理后台数据存储中的数据,每个表具体什么作用可以查看
catalog表介绍
7. duckdb中也可以查看到该库的内容
以及现有的所有数据库
my_ducklake就是用户库,__ducklake_metadata_my_ducklake库用来存放catalog表
8. 测试
没有建表的时候,minio中是没有parquet文件的。
通过外部的文件创建一张表,如下
删除一部分记录
原始数据文件并不变,但是会增加一个文件,记录了那些记录被删除了,所以ducklake属于append only类型的数据库
再删除一部分记录
又增加了一个删除文件,但是新增的删除文件中的记录包括了上一次删除的记录,这主要是为了支持删除snapshot的功能,在此不在介绍。
更新一部分记录
新增加了一个包含更新内容的parquet和一个删除文件,也就是update操作转换成append only就是先 删除数据(增加删除文件),再增加数据(数据文件)