查看原文
科技

Postgres如何访问MotherDuck

alitrack alitrack 2023-12-18

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;

假设现在我想导入数据库sample_data里所有Schema的表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]?://([^/]+)/'))[1AS domain
  FROM hacker_news
  WHERE url IS NOT NULL
) subquery
WHERE domain != ''
GROUP BY domain
ORDER BY count DESC
LIMIT 20;

⚠️Postgres 没有 regexp_extract 函数,需要用regexp_matches替代。

🎉🎉🎉

访问别人共享给我的 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

本文建议和DuckDB 中 Catalog 与 Schema 在 duckdb_fdw 有啥用?效果更佳!

 

 

参考资料

[1]

MotherDuck: https://www.motherduck.com

[2]

Sign Up: https://app.motherduck.com/?auth_flow=signup


继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存