motherduck
MotherDuckは、DuckDBを基盤としたサーバーレス分析基盤で、クラウド上のデータに対してSQL分析を実行したり、データセットを共有したり、ローカルとクラウドを組み合わせたデータパイプラインを構築したりするのを支援するSkill。
📜 元の英語説明(参考)
Expert guidance for MotherDuck, the serverless analytics platform built on DuckDB that combines local and cloud query execution. Helps developers run SQL analytics on cloud-hosted data, share datasets, and build hybrid local-cloud data pipelines using DuckDB's familiar interface.
🇯🇵 日本人クリエイター向け解説
MotherDuckは、DuckDBを基盤としたサーバーレス分析基盤で、クラウド上のデータに対してSQL分析を実行したり、データセットを共有したり、ローカルとクラウドを組み合わせたデータパイプラインを構築したりするのを支援するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o motherduck.zip https://jpskill.com/download/15143.zip && unzip -o motherduck.zip && rm motherduck.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/15143.zip -OutFile "$d\motherduck.zip"; Expand-Archive "$d\motherduck.zip" -DestinationPath $d -Force; ri "$d\motherduck.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
motherduck.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
motherduckフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
MotherDuck — クラウド上のサーバーレス DuckDB
概要
MotherDuck は、ローカルとクラウドのクエリ実行を組み合わせた、DuckDB上に構築されたサーバーレスな分析プラットフォームです。開発者がクラウドでホストされているデータに対して SQL 分析を実行し、データセットを共有し、DuckDB の使い慣れたインターフェースを使用してハイブリッドなローカル-クラウドデータパイプラインを構築するのに役立ちます。
手順
接続とセットアップ
# Python から MotherDuck に接続
import duckdb
# 認証 (初回認証時はブラウザが開きます)
conn = duckdb.connect("md:")
# または明示的なトークンを使用
conn = duckdb.connect("md:?motherduck_token=your_token_here")
# クラウドデータベースを作成
conn.sql("CREATE DATABASE IF NOT EXISTS analytics")
conn.sql("USE analytics")
# クラウドデータベースは永続化され、どのマシンからでもアクセス可能
ハイブリッドクエリ (ローカル + クラウド)
# ローカルファイルとクラウドテーブルを組み合わせたクエリ
import duckdb
conn = duckdb.connect("md:analytics")
# ローカルの Parquet ファイルを MotherDuck にアップロード
conn.sql("""
CREATE OR REPLACE TABLE events AS
SELECT * FROM read_parquet('local_data/events_2026_q1.parquet')
""")
# クラウドデータとローカルファイルを並行してクエリ
result = conn.sql("""
SELECT
e.event_type,
COUNT(*) AS event_count,
AVG(e.duration_ms) AS avg_duration,
u.plan AS user_plan
FROM analytics.events e -- クラウドテーブル
JOIN read_parquet('local_data/users.parquet') u -- ローカルファイル
ON e.user_id = u.id
WHERE e.created_at >= '2026-01-01'
GROUP BY 1, 4
ORDER BY 2 DESC
""").df()
print(result)
データロード
# さまざまなソースから MotherDuck にデータをロード
conn = duckdb.connect("md:analytics")
# CSV ファイルから (ローカルまたは URL)
conn.sql("""
CREATE OR REPLACE TABLE sales AS
SELECT * FROM read_csv('https://data.example.com/sales_2026.csv',
header=true, auto_detect=true)
""")
# S3 上の Parquet ファイルから
conn.sql("""
CREATE OR REPLACE TABLE events AS
SELECT * FROM read_parquet('s3://my-bucket/events/*.parquet',
hive_partitioning=true)
""")
# JSON ファイルから
conn.sql("""
CREATE OR REPLACE TABLE logs AS
SELECT * FROM read_json_auto('logs/*.json')
""")
# インクリメンタルロード — 新しいデータを追加
conn.sql("""
INSERT INTO events
SELECT * FROM read_parquet('s3://my-bucket/events/2026-03/*.parquet')
WHERE event_id NOT IN (SELECT event_id FROM events)
""")
データベースの共有
# データベースをチームメンバーと共有
conn = duckdb.connect("md:")
# 共有データベースを作成
conn.sql("CREATE DATABASE team_analytics")
conn.sql("USE team_analytics")
# データをロード
conn.sql("""
CREATE TABLE monthly_metrics AS
SELECT
date_trunc('month', created_at) AS month,
COUNT(DISTINCT user_id) AS mau,
SUM(revenue) AS total_revenue,
COUNT(*) AS total_events
FROM analytics.events
GROUP BY 1
ORDER BY 1
""")
# 特定のユーザーと共有 (MotherDuck UI または SQL 経由)
conn.sql("GRANT SELECT ON DATABASE team_analytics TO 'colleague@company.com'")
# 受信者はすぐに接続してクエリを実行できます:
# conn = duckdb.connect("md:team_analytics")
# conn.sql("SELECT * FROM monthly_metrics").df()
Node.js / TypeScript 統合
// src/analytics/motherduck.ts — Node.js アプリケーションでの MotherDuck
import duckdb from "duckdb-async";
const db = await duckdb.Database.create("md:analytics", {
motherduck_token: process.env.MOTHERDUCK_TOKEN!,
});
// API から分析クエリを実行
async function getMonthlyRevenue(months: number = 12) {
const result = await db.all(`
SELECT
date_trunc('month', created_at) AS month,
SUM(amount) AS revenue,
COUNT(DISTINCT user_id) AS paying_users
FROM orders
WHERE created_at >= current_date - interval '${months} months'
AND status = 'completed'
GROUP BY 1
ORDER BY 1
`);
return result;
}
// API エンドポイントで使用
app.get("/api/analytics/revenue", async (req, res) => {
const data = await getMonthlyRevenue(parseInt(req.query.months) || 12);
res.json(data);
});
定期的な変換
# scripts/daily_transform.py — マテリアライズドテーブルを更新するために cron ジョブとして実行
import duckdb
conn = duckdb.connect("md:analytics")
# 毎日の集計 — サマリーテーブルを再構築
conn.sql("""
CREATE OR REPLACE TABLE daily_kpis AS
SELECT
DATE(created_at) AS date,
COUNT(DISTINCT user_id) AS dau,
COUNT(DISTINCT CASE WHEN event_type = 'signup' THEN user_id END) AS signups,
COUNT(DISTINCT CASE WHEN event_type = 'purchase' THEN user_id END) AS purchasers,
SUM(CASE WHEN event_type = 'purchase' THEN amount ELSE 0 END) AS revenue,
COUNT(*) AS total_events
FROM events
WHERE created_at >= current_date - interval '90 days'
GROUP BY 1
ORDER BY 1
""")
# コホート分析テーブル
conn.sql("""
CREATE OR REPLACE TABLE cohort_retention AS
WITH first_seen AS (
SELECT user_id, MIN(DATE(created_at)) AS cohort_date
FROM events
GROUP BY 1
)
SELECT
f.cohort_date,
DATE_DIFF('week', f.cohort_date, DATE(e.created_at)) AS week_number,
COUNT(DISTINCT e.user_id) AS active_users
FROM events e
JOIN first_seen f ON e.user_id = f.user_id
WHERE f.cohort_date >= current_date - interval '12 weeks'
GROUP BY 1, 2
""")
print("✅ 毎日の変換が完了しました")
インストール
# Python
pip install duckdb
# Node.js
npm install duckdb-async
# CLI (MotherDuck をサポートする DuckDB CLI)
# https://motherduck.com/docs/getting-started/ からダウンロード
例
例 1: RAG アプリケーションの評価パイプラインのセットアップ
ユーザーリクエスト:
ドキュメントからの質問に答える RAG チャットボットがあります。 Motherduck をセットアップして回答の品質を評価してください。
エージェントは、適切なメトリクス (faithfulness、relevance、answer correctness) を使用して評価スイートを作成し、実際のユーザーの質問からテストデータセットを構成し、ベースライン評価を実行し、プロンプトまたは検索の変更ごとに評価が実行されるように CI 統合を設定します。
例 2: プロンプト間のモデルパフォーマンスの比較
ユーザーリクエスト:
(原文はここで切り詰められています) 📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
MotherDuck — Serverless DuckDB in the Cloud
Overview
MotherDuck, the serverless analytics platform built on DuckDB that combines local and cloud query execution. Helps developers run SQL analytics on cloud-hosted data, share datasets, and build hybrid local-cloud data pipelines using DuckDB's familiar interface.
Instructions
Connection and Setup
# Connect to MotherDuck from Python
import duckdb
# Authenticate (opens browser for first-time auth)
conn = duckdb.connect("md:")
# Or with explicit token
conn = duckdb.connect("md:?motherduck_token=your_token_here")
# Create a cloud database
conn.sql("CREATE DATABASE IF NOT EXISTS analytics")
conn.sql("USE analytics")
# Cloud databases persist — accessible from any machine
Hybrid Queries (Local + Cloud)
# Query that combines local files with cloud tables
import duckdb
conn = duckdb.connect("md:analytics")
# Upload a local Parquet file to MotherDuck
conn.sql("""
CREATE OR REPLACE TABLE events AS
SELECT * FROM read_parquet('local_data/events_2026_q1.parquet')
""")
# Query cloud data alongside local files
result = conn.sql("""
SELECT
e.event_type,
COUNT(*) AS event_count,
AVG(e.duration_ms) AS avg_duration,
u.plan AS user_plan
FROM analytics.events e -- Cloud table
JOIN read_parquet('local_data/users.parquet') u -- Local file
ON e.user_id = u.id
WHERE e.created_at >= '2026-01-01'
GROUP BY 1, 4
ORDER BY 2 DESC
""").df()
print(result)
Data Loading
# Load data from various sources into MotherDuck
conn = duckdb.connect("md:analytics")
# From CSV files (local or URL)
conn.sql("""
CREATE OR REPLACE TABLE sales AS
SELECT * FROM read_csv('https://data.example.com/sales_2026.csv',
header=true, auto_detect=true)
""")
# From Parquet files on S3
conn.sql("""
CREATE OR REPLACE TABLE events AS
SELECT * FROM read_parquet('s3://my-bucket/events/*.parquet',
hive_partitioning=true)
""")
# From JSON files
conn.sql("""
CREATE OR REPLACE TABLE logs AS
SELECT * FROM read_json_auto('logs/*.json')
""")
# Incremental loading — append new data
conn.sql("""
INSERT INTO events
SELECT * FROM read_parquet('s3://my-bucket/events/2026-03/*.parquet')
WHERE event_id NOT IN (SELECT event_id FROM events)
""")
Sharing Databases
# Share a database with team members
conn = duckdb.connect("md:")
# Create a shared database
conn.sql("CREATE DATABASE team_analytics")
conn.sql("USE team_analytics")
# Load data
conn.sql("""
CREATE TABLE monthly_metrics AS
SELECT
date_trunc('month', created_at) AS month,
COUNT(DISTINCT user_id) AS mau,
SUM(revenue) AS total_revenue,
COUNT(*) AS total_events
FROM analytics.events
GROUP BY 1
ORDER BY 1
""")
# Share with specific users (via MotherDuck UI or SQL)
conn.sql("GRANT SELECT ON DATABASE team_analytics TO 'colleague@company.com'")
# Recipients connect and query immediately:
# conn = duckdb.connect("md:team_analytics")
# conn.sql("SELECT * FROM monthly_metrics").df()
Node.js / TypeScript Integration
// src/analytics/motherduck.ts — MotherDuck in a Node.js application
import duckdb from "duckdb-async";
const db = await duckdb.Database.create("md:analytics", {
motherduck_token: process.env.MOTHERDUCK_TOKEN!,
});
// Run analytics queries from your API
async function getMonthlyRevenue(months: number = 12) {
const result = await db.all(`
SELECT
date_trunc('month', created_at) AS month,
SUM(amount) AS revenue,
COUNT(DISTINCT user_id) AS paying_users
FROM orders
WHERE created_at >= current_date - interval '${months} months'
AND status = 'completed'
GROUP BY 1
ORDER BY 1
`);
return result;
}
// Use in an API endpoint
app.get("/api/analytics/revenue", async (req, res) => {
const data = await getMonthlyRevenue(parseInt(req.query.months) || 12);
res.json(data);
});
Scheduled Transformations
# scripts/daily_transform.py — Run as a cron job to update materialized tables
import duckdb
conn = duckdb.connect("md:analytics")
# Daily aggregation — rebuild summary tables
conn.sql("""
CREATE OR REPLACE TABLE daily_kpis AS
SELECT
DATE(created_at) AS date,
COUNT(DISTINCT user_id) AS dau,
COUNT(DISTINCT CASE WHEN event_type = 'signup' THEN user_id END) AS signups,
COUNT(DISTINCT CASE WHEN event_type = 'purchase' THEN user_id END) AS purchasers,
SUM(CASE WHEN event_type = 'purchase' THEN amount ELSE 0 END) AS revenue,
COUNT(*) AS total_events
FROM events
WHERE created_at >= current_date - interval '90 days'
GROUP BY 1
ORDER BY 1
""")
# Cohort analysis table
conn.sql("""
CREATE OR REPLACE TABLE cohort_retention AS
WITH first_seen AS (
SELECT user_id, MIN(DATE(created_at)) AS cohort_date
FROM events
GROUP BY 1
)
SELECT
f.cohort_date,
DATE_DIFF('week', f.cohort_date, DATE(e.created_at)) AS week_number,
COUNT(DISTINCT e.user_id) AS active_users
FROM events e
JOIN first_seen f ON e.user_id = f.user_id
WHERE f.cohort_date >= current_date - interval '12 weeks'
GROUP BY 1, 2
""")
print("✅ Daily transformations complete")
Installation
# Python
pip install duckdb
# Node.js
npm install duckdb-async
# CLI (DuckDB CLI with MotherDuck support)
# Download from https://motherduck.com/docs/getting-started/
Examples
Example 1: Setting up an evaluation pipeline for a RAG application
User request:
I have a RAG chatbot that answers questions from our docs. Set up Motherduck to evaluate answer quality.
The agent creates an evaluation suite with appropriate metrics (faithfulness, relevance, answer correctness), configures test datasets from real user questions, runs baseline evaluations, and sets up CI integration so evaluations run on every prompt or retrieval change.
Example 2: Comparing model performance across prompts
User request:
We're testing GPT-4o vs Claude on our customer support prompts. Set up a comparison with Motherduck.
The agent creates a structured experiment with the existing prompt set, configures both model providers, defines scoring criteria specific to customer support (accuracy, tone, completeness), runs the comparison, and generates a summary report with statistical significance indicators.
Guidelines
- Hybrid execution — MotherDuck pushes queries to the cloud OR runs locally depending on where data lives; leverage both
- Parquet for everything — Store raw data as Parquet files on S3; query them directly without loading into tables
- Materialized tables for dashboards — Pre-compute daily/weekly aggregates; don't recalculate on every dashboard load
- Share databases, not exports — Instead of emailing CSVs, share a MotherDuck database; recipients get live, queryable data
- Use DuckDB locally for development — Write and test queries locally with DuckDB; deploy the same SQL to MotherDuck
- Token management — Store
MOTHERDUCK_TOKENin environment variables; never commit tokens to code - Incremental loads — For large datasets, append new data with
INSERT INTO ... WHERE NOT IN; avoid full reloads - Cost awareness — MotherDuck charges by query compute; pre-aggregate expensive queries into summary tables