Eniyileme ve sorgu planları

Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Liam Brannigan

Data Scientist & Polars Contributor

Sorgu eniyilemeye giriş

Satır ve sütunları olan tablo resmi

Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Sorgu eniyilemeye giriş

Satır ve sütunları olan tablo resmi

Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Sorgu eniyilemeye giriş

İşlemlerin seri olarak çalıştırıldığı görüntü

Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Sorgu eniyilemeye giriş

İşlemlerin paralel yürütüldüğü görüntü

Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Sorgu eniyilemeye giriş

Yinelenen işlemlerin iki kez yürütüldüğü ardışık düzen

Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Sorgu eniyilemeye giriş

Yinelenen işlemlerin iki kez yürütüldüğü ardışık düzen

Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Bölüme göre en çok istek türü

department_request_types = (
    requests





)
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Bölüme göre en çok istek türü

department_request_types = (
    requests
    .filter(pl.col("STATUS") == "Completed")




)
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Bölüme göre en çok istek türü

department_request_types = (
    requests
    .filter(pl.col("STATUS") == "Completed")
    .group_by("DEPARTMENT")



)
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Bölüme göre en çok istek türü

department_request_types = (
    requests    
    .filter(pl.col("STATUS") == "Completed")
    .group_by("DEPARTMENT")
    .agg(pl.col("TYPE").n_unique().alias("n_request_types"))


)
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Bölüme göre en çok istek türü

department_request_types = (
    requests
    .filter(pl.col("STATUS") == "Completed")
    .group_by("DEPARTMENT")
    .agg(pl.col("TYPE").n_unique().alias("n_request_types"))
    .sort("n_request_types", descending=True)
    .head(5)
)
  • Naif plan
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Eniyilemesiz plan

print(department_request_types)
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Eniyilemesiz plan

print(department_request_types)







        Csv SCAN [311_Service_Requests.csv]
        PROJECT */39 COLUMNS
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Eniyilemesiz plan

print(department_request_types)





      FILTER [(col("STATUS")) == ("Completed")]
      FROM
        Csv SCAN [311_Service_Requests.csv]
        PROJECT */39 COLUMNS
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Eniyilemesiz plan

print(department_request_types)


    AGGREGATE[maintain_order: false]
      [col("TYPE").n_unique().alias("n_request_types")] BY [col("DEPARTMENT")]
      FROM
      FILTER [(col("STATUS")) == ("Completed")]
      FROM
        Csv SCAN [311_Service_Requests.csv]
        PROJECT */39 COLUMNS
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Eniyilemesiz plan

print(department_request_types)
SLICE[offset: 0, len: 5]
  SORT BY [descending: [true]] [col("n_request_types")]
    AGGREGATE[maintain_order: false]
      [col("TYPE").n_unique().alias("n_request_types")] BY [col("DEPARTMENT")]
      FROM
      FILTER [(col("STATUS")) == ("Completed")]
      FROM
        Csv SCAN [311_Service_Requests.csv]
        PROJECT */39 COLUMNS
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Eniyilenmiş plan

print(department_request_types.explain())
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Eniyilenmiş plan







        Csv SCAN [311_Service_Requests.csv]
        PROJECT 3/39 COLUMNS
        SELECTION: [(col("STATUS")) == ("Completed")]
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Eniyilenmiş plan






      simple pi 2/2 ["TYPE", "DEPARTMENT"]
        Csv SCAN [311_Service_Requests.csv]
        PROJECT 3/39 COLUMNS
        SELECTION: [(col("STATUS")) == ("Completed")]
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Eniyilenmiş plan



    AGGREGATE[maintain_order: false]
      [col("TYPE").n_unique().alias("n_request_types")] BY [col("DEPARTMENT")]
      FROM
      simple pi 2/2 ["TYPE", "DEPARTMENT"]
        Csv SCAN [311_Service_Requests.csv]
        PROJECT 3/39 COLUMNS
        SELECTION: [(col("STATUS")) == ("Completed")]
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Eniyilenmiş plan

SORT BY [slice: (0, 10, ...), descending: [true]] [col("n_request_types")]
  FILTER col("n_request_types").dynamic_predicate() FROM
    AGGREGATE[maintain_order: false]
      [col("TYPE").n_unique().alias("n_request_types")] BY [col("DEPARTMENT")]
      FROM
      simple pi 2/2 ["TYPE", "DEPARTMENT"]
        Csv SCAN [311_Service_Requests.csv]
        PROJECT 3/39 COLUMNS
        SELECTION: [(col("STATUS")) == ("Completed")]
  • n_request_types içinde ilk 10 satırı bul
  • Kalanları filtrele
  • 10 satırı sırala
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Grafik olarak eniyilenmiş plan

print(department_request_types.show_graph())

CSV taramasını ve eniyilemeleri gösteren eniyilenmiş planın grafik görünümü.

Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Ek eniyilemeler

(
    requests








)
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Ek eniyilemeler

(
    requests
    .filter(pl.col("STATUS") == "Completed")
    .filter(pl.col("DEPARTMENT") == "Sanitation")






)
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Ek eniyilemeler

(
    requests
    .filter(pl.col("STATUS") == "Completed")
    .filter(pl.col("DEPARTMENT") == "Sanitation")
    .with_columns(
        pl.col("TYPE").str.to_lowercase().alias("type_lower")
    )
    .with_columns(
        pl.col("STATUS").str.to_lowercase().alias("status_lower")
    )
)
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Ek eniyilemeler



  Csv SCAN [311_Service_Requests.csv]
  PROJECT */39 COLUMNS
  SELECTION: [([(col("DEPARTMENT")) == ("Sanitation")]) & ([(col("STATUS")) == ("Completed")])]
  • Birleşik AND koşulu
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Ek eniyilemeler

 WITH_COLUMNS:
 [col("TYPE").str.to_lowercase().alias("type_lower"), col("STATUS").str.to_lowercase().alias("status_lower")]
  Csv SCAN [311_Service_Requests.csv]
  PROJECT */39 COLUMNS
  SELECTION: [([(col("DEPARTMENT")) == ("Sanitation")]) & ([(col("STATUS")) == ("Completed")])]
  • Birleşik AND koşulu
  • Küme halinde WITH_COLUMNS ifadeleri
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Hadi pratik yapalım!

Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Preparing Video For Download...