Airtable与Python:轻量级ETL数据管道实战
引言
Airtable 不仅提供灵活的类似电子表格的界面,用于数据存储和分析,还提供了 API 以支持编程式交互。换句话说,你可以将它与外部工具和技术(例如 Python)连接起来,构建数据管道或处理流程,并将结果返回 Airtable 数据库(在 Airtable 术语中称为 "base")。
本文演示如何利用 Airtable Python API 创建一个简易的、类似 ETL 的数据管道。我们将坚持使用免费版本,以确保该方法在不依赖付费功能的情况下也能正常运行。
Airtable 数据集设置
本文所构建的管道可以轻松适配不同数据集。对于尚不熟悉 Airtable 的新用户,如果需要一个 Airtable 项目及示例数据集作为起点,我们建议你先参考最新的 Airtable 入门教程,并创建一个名为 “Customers” 的表格数据集,包含 200 行以及以下列(见图):
- CustomerID
- Gender
- Age
- Annual Income (k$)
- Spending Score (1-100)
- Income Class
Airtable-Python 数据管道
在 Airtable 中,点击界面左下角的头像图标,选择 “Builder Hub”。进入新页面后,点击 “Personal access tokens” → “Create token”。设置一个名称,并确保至少包含以下 2 个权限范围:
data.records:read
data.records:write
在 “Access” 部分中选择你的 Customers 表所在的 base,以便令牌可以访问指定数据集。
生成令牌后,请将其复制并安全保存,因为它只会显示一次。该令牌以 pat
开头,后跟一长串字母数字组合。
另一个关键参数是 Base ID。在 Airtable 网页版中,打开你的 base,浏览器 URL 大致为:
https://airtable.com/app[xxxxxx]/xxxx/xxxx
其中 app[xxxx]
即为我们需要的 Base ID。
假设你已在 base 中创建并填充了 "Customers" 表,现在我们即可开始编写 Python 程序。以下示例使用 Jupyter Notebook 演示,若使用 IDE,可将环境变量写入 .env
文件读取。
首先安装必要依赖:
!pip install pyairtable python-dotenv
设置环境变量与建立连接
import os
from dotenv import load_dotenv # 若使用 .env 文件需启用
from pyairtable import Api, Table
import pandas as pdPAT = "pat-xxx" # 替换为你的个人访问令牌
BASE_ID = "app-xxx" # 替换为你的 Base ID
TABLE_NAME = "Customers"api = Api(PAT)
table = Table(PAT, BASE_ID, TABLE_NAME)
此时我们已成功实例化 Python Airtable API 并连接到 Customers 表。
读取数据至 Pandas
rows = []
for rec in table.all(): # 自动处理速率限制,出错重试fields = rec.get("fields", {})rows.append({"id": rec["id"],"CustomerID": fields.get("CustomerID"),"Gender": fields.get("Gender"),"Age": fields.get("Age"),"Annual Income (k$)": fields.get("Annual Income (k$)"),"Spending Score (1-100)": fields.get("Spending Score (1-100)"),"Income class": fields.get("Income Class"),})df = pd.DataFrame(rows)
数据转换:标记高价值客户
我们只进行一个简单的转换:根据收入和消费评分生成二元标签属性 “Is High Value”,标识高价值客户。
def high_value(row):try:return (row["Spending Score (1-100)"] >= 70) and (row["Annual Income (k$)"] >= 70)except TypeError:return Falsedf["Is High Value"] = df.apply(high_value, axis=1)
df.head()
写回 Airtable
在写入新数据之前,需在 Airtable 的 Customers 表中新建一个名为 “High Value” 的复选框字段,作为二元属性存储。
updates = []
for _, r in df.iterrows():if pd.isna(r["id"]):continueupdates.append({"id": r["id"],"fields": {"High Value": bool(r["Is High Value"])}})if updates:table.batch_update(updates)
执行后回到 Airtable,你会看到 Customers 表新增了 “High Value” 标签,有部分客户被标记为高价值(复选框打勾)。
总结
本文展示了如何借助 Airtable Python API 构建一个轻量级 ETL 管道:
- 从 Airtable 读取数据
- 使用 Pandas 进行简单转换
- 将新数据反写回 Airtable
这一流程完全在 Airtable 免费版本的限制内实现,凸显了 Airtable 作为云端数据平台的灵活性与易用性。