从结构化来源提取数据

Python 中的 ETL 与 ELT

Jake Roach

Data Engineer

数据源系统

本课程涵盖:

  • CSV 文件
  • Parquet 文件
  • JSON 文件
  • SQL 数据库

数据也来自:

  • API
  • 数据湖
  • 数仓
  • 网页抓取
  • ……以及更多!
Python 中的 ETL 与 ELT

读取 Parquet 文件

Parquet 文件:

  • 开源的列式文件格式,旨在高效存取字段
  • 用法与 CSV 文件相似
import pandas as pd

# Read the parquet file into memory
raw_stock_data = pd.read_parquet("raw_stock_data.parquet", engine="fastparquet")
1 https://www.databricks.com/glossary/what-is-parquet
Python 中的 ETL 与 ELT

连接 SQL 数据库

  • 可将 SQL 数据库中的数据拉取为 pandas 的 DataFrame
  • 需要连接 URI 来构建引擎并连接到数据库
import sqlalchemy
import pandas as pd

# Connection URI: schema_identifier://username:password@host:port/db
connection_uri = "postgresql+psycopg2://repl:password@localhost:5432/market"
db_engine = sqlalchemy.create_engine(connection_uri)
# Query the SQL database
raw_stock_data = pd.read_sql("SELECT * FROM raw_stock_data LIMIT 10", db_engine)
Python 中的 ETL 与 ELT

模块化

将逻辑拆分为函数

  • 提升流水线的可读性
  • 遵循 "don't repeat yourself" 原则
  • 加快排错
def extract_from_sql(connection_uri, query):
    # Create an engine, query data and return DataFrame
    db_engine = sqlalchemy.create_engine(connection_uri)
    return pd.read_sql(query, db_engine)

extract_from_sql("postgresql+psycopg2://.../market", "SELECT ... LIMIT 10;")
Python 中的 ETL 与 ELT

让我们一起练习吧!

Python 中的 ETL 与 ELT

Preparing Video For Download...