Cursor 是一款 AI 优先的代码编辑器(基于 VS Code 分支),具有深度的 AI 集成。它支持多种模型,并包含 Composer(多文件编辑)和 Agent 模式等独特功能。
定价(2025 年 12 月核实):
Hobby:免费(受限)
Pro:$20/月 — 500 次高级 AI 请求,无限基础补全
Business:$40/用户/月 — 更多高级请求,团队功能
3.2 实战案例:dbt 模型生成
我在 Cursor Chat 中输入的:
Create a dbt model that calculates daily revenue by product category with7-day moving average
Cursor 输出:
{{ config( materialized='incremental', unique_key=['date','category'], on_schema_change='sync_all_columns') }}
WITH daily_revenue AS(
SELECTDATE(order_timestamp)ASdate, product_category AS category,
SUM(order_total)AS daily_revenue
FROM {{ ref('fct_orders') }}
{%if is_incremental()%} WHEREDATE(order_timestamp)>=(SELECTMAX(date)FROM {{ this }}) {% endif %}
GROUPBY1,2),
moving_average AS(
SELECTdate, category, daily_revenue,AVG(daily_revenue)OVER(PARTITIONBY category ORDERBYdateROWSBETWEEN6PRECEDINGANDCURRENTROW)AS revenue_7day_ma
FROM daily_revenue
)
SELECT*FROM moving_average
质量:优秀 —— 包含增量逻辑的完整 dbt 模型。
准确性:窗口函数正确。
上下文感知:使用了 dbt 特定语法(ref, config, is_incremental)。
3.3 Cursor Composer(多文件编辑)
我输入的:
Refactor this ETL pipeline to separate extraction, transformation, and loading into different files with proper error handling
结果: Cursor 创建了 3 个文件:
extract.py - API 提取逻辑
transform.py - Pandas 转换
load.py - 数据库加载
所有文件共享错误处理和日志记录
这是 Cursor 的杀手级功能 —— 它能结合上下文同时修改多个文件。
3.4 实战案例:Spark 优化
Cursor 建议(通过 Chat):
from pyspark.sql import functions as F
from pyspark.sql.window import Window
# 1. Partition pruning - filter BEFORE reading
df = spark.read.parquet("orders/*.parquet") \
.filter(F.col("order_date">="2024-01-01") \
.select("customer_id","order_total","order_date")
# Project early# 2. Cache if reused
df_cached = df.cache()
# 3. Use broadcast join if one side is small
result = df_cached \
.groupBy("customer_id") \
.agg(F.sum("order_total").alias("total"))
# Explanation:# - Select only needed columns early (projection pushdown)# - Filter during read (partition pruning)# - Cache if result used multiple times
需要切换编辑器:必须离开 VS Code/PyCharm。更贵:$20/月 vs Copilot 的 $10/月。高级请求限制:每月 500 次在复杂项目中可能不够用。稳定性稍差:偶尔有 Bug 或崩溃(正在改进)。
最适合:
构建复杂、多文件项目的数据工程师。
愿意切换编辑器的团队。
需要大量重构的项目。
预算允许每人 $20/月的团队。
团队成本(5 人):
Pro:$100/月
Business:$200/月
4、工具 #3:Claude (via API / Cursor / Cline)
4.1 概览
Claude (Anthropic) 不是独立的 IDE 工具,但可以通过以下方式访问:
Claude.ai 网页界面
Cursor (集成)
Cline (VS Code 插件)
直接 API
Claude 3.5 Sonnet 在理解复杂代码和解释推理方面表现异常出色。
定价(API,2025 年 12 月核实):
输入:$3 / 百万 token
输出:$15 / 百万 token
Claude Pro:$20/月(网页版)
4.2 实战案例:复杂数据验证
给 Claude 的提示词:
Write a Python functionto validate a DataFrame containing orders data. Check: 1.No negative amounts 2. Valid order dates (not future) 3. Customer IDs exist in customers table4.No duplicate order IDs Return detailed validation report
Claude 输出:
from typing importDict, List, Tupleimport pandas as pd
from datetime import datetime
defvalidate_orders_dataframe(
orders_df: pd.DataFrame,
customers_df: pd.DataFrame
)-> Tuple[bool, Dict[str, List[str]]]:
""" Comprehensive validation of orders DataFrame ... """
errors ={'negative_amounts':[],'future_dates':[],'invalid_customers':[],'duplicate_orders':[]}
# Check negative amounts
negative_mask = orders_df['amount']<0if negative_mask.any():
errors['negative_amounts']= orders_df[negative_mask]['order_id'].tolist()
# Check future dates
current_date = datetime.now().date()
orders_df['order_date_parsed']= pd.to_datetime(orders_df['order_date']).dt.date
future_mask = orders_df['order_date_parsed']> current_date
if future_mask.any():
errors['future_dates']= orders_df[future_mask]['order_id'].tolist()
# ... (更多验证逻辑)# Determine if valid
is_valid =all(len(v)==0for v in errors.values())
# Clean up errors dict (remove empty lists)
errors ={k: v for k, v in errors.items()if v}
return is_valid, errors
质量:✅ 优秀 —— 生产级代码。
准确性:✅ 所有验证规则正确实现。
上下文感知:✅ 添加了有用的使用示例。
文档:✅ 清晰的文档字符串和类型提示。
4.3 实战案例:SQL 调试
提示词:
This query is slow on Snowflake.Optimize it: SELECT c.customer_id, c.customer_name,COUNT(o.order_id)as order_count FROM customers c LEFTJOIN orders o ON c.customer_id = o.customer_id WHERE o.order_date >='2024-01-01'GROUPBY c.customer_id, c.customer_name
Claude 回复:
-- Optimized version:SELECT c.customer_id, c.customer_name,COUNT(o.order_id)as order_count
FROM customers c LEFTJOIN(
SELECT customer_id, order_id FROM orders WHERE order_date >='2024-01-01'
) o ON c.customer_id = o.customer_id
GROUPBY c.customer_id, c.customer_name;
-- Better: If you only want customers with orders, use INNER JOIN:SELECT c.customer_id, c.customer_name,COUNT(o.order_id)as order_count
FROM customers c INNERJOIN orders o ON c.customer_id = o.customer_id WHERE o.order_date >='2024-01-01'
GROUPBY c.customer_id, c.customer_name;
-- Additional optimizations for Snowflake:-- 1. Cluster orders table by order_date-- 2. Use search optimization service on customers.customer_id-- 3. Consider materialized view if query runs frequently
非 IDE 原生:需要复制粘贴或插件。无自动补全:必须显式提问。API 成本可变:重度使用可能很贵。响应时间:比行内补全慢。
最适合:
调试复杂问题。
学习数据工程模式。
代码审查和优化。
理解陌生的代码库。
5、工具 #4:ChatGPT (GPT-4)
5.1 概览
ChatGPT 是通用的 AI 助手,GPT-4(特别是 o1)在复杂问题推理方面很强。
定价(2025 年 12 月核实):
Free:GPT-3.5
Plus:$20/月 — GPT-4,更高限额
Team:$25/用户/月
5.2 实战案例:ETL 管道设计
提示词:
Design a Python ETL pipeline for ingesting daily CSV files from S3, validating data, transforming with pandas, and loading to Snowflake. Include error handling and logging.