การทำงานกับฐานข้อมูล

การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

Liam Brannigan

Data Scientist & Polars Contributor

การ query ฐานข้อมูลจาก Polars

แผนภาพแสดง Polars ส่ง SQL query และ uri ไปยังฐานข้อมูล

การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

การ query ฐานข้อมูลจาก Polars

แผนภาพแสดง Polars ส่ง SQL query ไปยังฐานข้อมูลและรับตารางผลลัพธ์กลับผ่าน database engine

การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

ฐานข้อมูลที่ Polars query ได้

ฐานข้อมูลที่ Polars รองรับ

  • Embedded → รันในเครื่อง ไม่ต้องใช้เซิร์ฟเวอร์
  • DuckDB → ฐานข้อมูลเชิง วิเคราะห์
การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

ตาราง building permits

SELECT *
FROM building_permits
LIMIT 5
shape: (5, 5)
| issue_date | permit_type | review_type | street_name  | work_description             |
| ---        | ---         | ---         | ---          | ---                          |
| date       | str         | str         | str          | str                          |
|------------|-------------|-------------|--------------|------------------------------|
| 2026-04-30 | Signs       | SIGN PERMIT | CLARK ST     | Wall sign install            |
| 2026-04-28 | Renovation  | SELF CERT   | OAKLEY AVE   | Add dormer to 8-unit roof    |
| 2026-03-21 | Easy Permit | EASY PERMIT | SEMINARY AVE | Parapet masonry repair       |
| 2026-03-11 | Easy Permit | EASY PERMIT | RHODES AVE   | Rebuild south chimney side   |
| 2026-03-03 | Easy Permit | EASY PERMIT | GIDDINGS ST  | Porch lintel + tuckpointing  |
การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

Connection URI

import polars as pl

uri = "postgresql://analyst:[email protected]:5432/buildings"
  • postgresql:// โปรโตคอล
  • analyst:secret ชื่อผู้ใช้และรหัสผ่าน
  • data.chicago.org:5432 โฮสต์และพอร์ต
  • buildings ชื่อฐานข้อมูล
การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

การ query ฐานข้อมูล

query = """
    SELECT issue_date, permit_type
    FROM building_permits
    WHERE issue_date >= DATE '2026-01-01'
"""







การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

การ query ฐานข้อมูล

query = """
    SELECT issue_date, permit_type
    FROM building_permits
    WHERE issue_date >= DATE '2026-01-01'
"""

permit_counts = (
    pl.read_database_uri(query=query, uri=uri)



)
การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

การ query ฐานข้อมูล

query = """
    SELECT issue_date, permit_type
    FROM building_permits
    WHERE issue_date >= DATE '2026-01-01'
"""

permit_counts = (
    pl.read_database_uri(query=query, uri=uri)
    .group_by("permit_type")
    .len()
    .sort("len", descending=True)
)
การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

ผลการนับ permit แบบจัดกลุ่ม

permit_counts
shape: (3, 2)
| permit_type                     | len |
| ---                             | --- |
| str                             | u32 |
|---------------------------------|-----|
| Easy Permit                     | 58  |
| New Construction                | 14  |
| Renovation                      | 11  |
การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

เลือก engine ที่ต้องการ

pl.read_database_uri(
    query=query,
    uri=uri,
    engine="connectorx",
)
  • รองรับฐานข้อมูลได้มากกว่า
pl.read_database_uri(
    query=query,
    uri=uri,
    engine="adbc",
)
  • เร็วกว่าสำหรับฐานข้อมูลที่รองรับ
1 https://arrow.apache.org/adbc/current/driver/status.html
การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

การเขียนข้อมูลกลับไปยังฐานข้อมูล

permit_counts.write_database(



)
การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

การเขียนข้อมูลกลับไปยังฐานข้อมูล

permit_counts.write_database(
    table_name="permit_type_summary",
    connection=uri,

)
การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

การเขียนข้อมูลกลับไปยังฐานข้อมูล

permit_counts.write_database(
    table_name="permit_type_summary",
    connection=uri,
    if_table_exists="replace",
)
  • append
  • fail
การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

การผสาน DuckDB

import duckdb

db = duckdb.connect("permits.duckdb")


$$

  • DuckDB → เอาต์พุต Polars แบบ built-in
การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

การผสาน DuckDB

import duckdb

db = duckdb.connect("permits.duckdb")

result = db.sql("SELECT * FROM permit_type_summary").pl()
shape: (3, 2)
| permit_type                     | len |
| ---                             | --- |
| str                             | u32 |
|---------------------------------|-----|
| Easy Permit                     | 58  |
| New Construction                | 14  |
| Renovation                      | 11  |
การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

มาฝึกกันเถอะ!

การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

Preparing Video For Download...