大数据 SQL 查询与预处理引擎。当数据文件较大(>10MB)、涉及多文件联合查询、 Parquet 格式处理、或需要复杂 SQL(窗口函数/CTE/子查询)时,优先使用此 Skill。 常与 pandas-analysis 配合:先用 DuckDB 做 SQL 预筛选和聚合,再交给 pandas 做可视化。
通过 python_executor 使用 DuckDB Python API 执行 SQL 查询,可直接分析 CSV、Parquet、JSON 文件,无需预先加载到数据库中。
使用 python_executor 执行 DuckDB Python 代码。基本模板:
import duckdb
result = duckdb.sql("YOUR SQL HERE")
print(result)
import duckdb
# CSV 文件
print(duckdb.sql("SELECT * FROM 'data.csv' LIMIT 10"))
# Parquet 文件
print(duckdb.sql("SELECT * FROM 'data.parquet'"))
# 多文件通配符
print(duckdb.sql("SELECT * FROM read_parquet('logs/*.parquet')"))
# JSON 文件
print(duckdb.sql("SELECT * FROM read_json_auto('data.json')"))
import duckdb
# 查看列名和类型
print(duckdb.sql("DESCRIBE SELECT * FROM 'data.csv'"))
# 查看前几行
print(duckdb.sql("SELECT * FROM 'data.csv' LIMIT 5"))
# 统计行数
print(duckdb.sql("SELECT COUNT(*) as total_rows FROM 'data.csv'"))
import duckdb
print(duckdb.sql("""
SELECT
COUNT(*) as count,
AVG(amount) as average,
MIN(amount) as min_val,
MAX(amount) as max_val,
SUM(amount) as total
FROM 'transactions.csv'
"""))
import duckdb
print(duckdb.sql("""
SELECT
category,
COUNT(*) as count,
SUM(amount) as total,
AVG(amount) as avg_amount
FROM 'data.csv'
GROUP BY category
ORDER BY total DESC
"""))
import duckdb
print(duckdb.sql("""
SELECT a.*, b.name
FROM 'orders.csv' a
JOIN 'customers.csv' b ON a.customer_id = b.id
"""))
import duckdb
print(duckdb.sql("""
SELECT
strftime(date, '%Y-%m') as month,
SUM(revenue) as monthly_revenue
FROM 'sales.csv'
GROUP BY month
ORDER BY month
"""))
import duckdb
print(duckdb.sql("""
SELECT *,
SUM(amount) OVER (PARTITION BY category ORDER BY date) as running_total,
ROW_NUMBER() OVER (PARTITION BY category ORDER BY amount DESC) as rank
FROM 'data.csv'
"""))
import duckdb
duckdb.sql("COPY (SELECT * FROM 'input.csv') TO 'output/output.parquet' (FORMAT PARQUET)")
print("转换完成: output/output.parquet")
import duckdb
duckdb.sql("COPY (SELECT * FROM 'input.parquet') TO 'output/output.csv' (HEADER, DELIMITER ',')")
print("转换完成: output/output.csv")
import duckdb
duckdb.sql("""
COPY (
SELECT * FROM 'data.csv' WHERE amount > 1000
) TO 'output/filtered.parquet' (FORMAT PARQUET)
""")
print("带过滤导出完成")
import duckdb
duckdb.sql("COPY (SELECT * FROM 'data.csv') TO 'output/output.json' (FORMAT JSON, ARRAY true)")
print("导出 JSON 完成")
DuckDB 的 print() 默认输出 ASCII 表格。也可以通过 fetchdf() 转为 pandas DataFrame:
import duckdb
# 默认表格输出
print(duckdb.sql("SELECT * FROM 'data.csv' LIMIT 10"))
# 转为 pandas DataFrame(更多格式控制)
df = duckdb.sql("SELECT * FROM 'data.csv'").fetchdf()
print(df.to_string())
# 输出为 Markdown 表格
print(df.to_markdown())
import duckdb
# 创建/打开数据库文件
conn = duckdb.connect('output/my_analysis.duckdb')
# 从 CSV 创建表
conn.sql("CREATE TABLE IF NOT EXISTS sales AS SELECT * FROM 'sales.csv'")
# 后续查询
print(conn.sql("SELECT COUNT(*) FROM sales"))
# 追加数据
conn.sql("INSERT INTO sales SELECT * FROM 'sales_2025.csv'")
conn.close()
LIMIT 预览:SELECT * FROM 'big.csv' LIMIT 10DESCRIBE 查看结构而非读取全部数据read_csv_auto / read_json_auto 自动推断列类型import duckdb 使用e:\myclaw\backend)output/ 目录Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer