科技
Postgres如何访问MotherDuck
MotherDuck 是啥?
关于 MotherDuck[1] 的详细介绍,我也没有找到合适的,偷懒问了下 Bing,得到回答如下,
MotherDuck 是一个基于 DuckDB 的云端分析服务。DuckDB 是一个免费、开源的内嵌式 OLAP 数据库,由 DuckDB 社区和 DuckDB Labs 开发和维护。MotherDuck 是一个与 DuckDB Labs 紧密合作的独立组织,旨在构建一个基于 DuckDB 的云端分析平台。
MotherDuck 的特点包括:
云端数据库存储:在云端管理你的 DuckDB 数据库目录,方便扩展和协作。 SQL 分析引擎:在本地、MotherDuck 或你的数据湖中存储的数据上高效地运行相同的 SQL 查询。 简化的数据库共享:创建一个可共享的数据快照,你的同事可以在 MotherDuck 中轻松地附加。 混合查询执行:利用你的笔记本电脑上的空闲计算能力与云端协同,提高速度和降低成本。 笔记本式的 UI:使用网页浏览数据目录,编写 SQL,过滤和排序结果,分享数据。 强大的 DuckDB 生态系统:与 25+个现代数据栈中的工具进行导入、编排和商业智能。
MotherDuck 适用于不需要 PB 级别的数据仓库,也可以在你的数据湖中查询你的数据。MotherDuck 还可以为数据应用提供一个基于 DuckDB 的后端服务。
准备工作
首先你得有 MotherDuck 账号
注册
目前 MotherDuck 可以免费使用,访问Sign Up[2]页面,
选择一个你喜欢的方式注册个账号,
注册成功了,
取得 Service Token
copy service token,
有 PG,并且安装了 duckdb_fdw
具体可以参考,
连接 MotherDuck
DROP EXTENSION if exists duckdb_fdw CASCADE;
CREATE EXTENSION duckdb_fdw;
CREATE SERVER DuckDB_server FOREIGN DATA WRAPPER duckdb_fdw
OPTIONS (database 'md:?motherduck_token=<motherduck_token>&saas_mode=true');
<motherduck_token>
替换成前面 copy 的 service token
创建个视图,方便查看 motherduck 有哪些数据库和表
SELECT duckdb_execute('duckdb_server','create view tables_duckdb as SELECT * FROM information_schema.tables');
IMPORT FOREIGN SCHEMA public FROM SERVER DuckDB_server INTO public;
SELECT * FROM tables_duckdb;
SELECT duckdb_execute('duckdb_server','set search_path TO ''sample_data,my_db'';');
IMPORT FOREIGN SCHEMA nyc FROM SERVER DuckDB_server INTO public;
IMPORT FOREIGN SCHEMA hn FROM SERVER DuckDB_server INTO public;
IMPORT FOREIGN SCHEMA who FROM SERVER DuckDB_server INTO public;
SELECT * FROM information_schema.tables where table_schema='public'
SELECT
domain,
count(*) AS count
FROM (
SELECT
(regexp_matches(url, 'http[s]?://([^/]+)/'))[1] AS domain
FROM hacker_news
WHERE url IS NOT NULL
) subquery
WHERE domain != ''
GROUP BY domain
ORDER BY count DESC
LIMIT 20;
🎉🎉🎉
访问别人共享给我的 MotherDuck 数据库
第一步,得拿到 share 链接
输入一个 share name(要求全网唯一?),创建 share 链接,
这是创建共享链接给别人用,如果用别人共享给你的,就不需要自己创建了。
另外为了方便测试,在共享数据库里上传了个 iris.parquet,并创建表名为 iris。
第二步,Attach & Import
SELECT duckdb_execute('duckdb_server','ATTACH ''md:_share/my_db/1bdf454b-f2cf-4ea6-b4a3-c83aca07f1ad'' as md_share ;');
SELECT duckdb_execute('duckdb_server','set search_path TO ''md_share,sample_data,my_db'';');
IMPORT FOREIGN SCHEMA public LIMIT TO(iris) FROM SERVER DuckDB_server INTO public;
上面共享链接真实可用,有兴趣的可以自己测试下。
第三步,测试
SELECT * FROM iris LIMIT 3
参考资料
MotherDuck: https://www.motherduck.com
[2]Sign Up: https://app.motherduck.com/?auth_flow=signup