DataStore compile les opérations de style pandas en SQL optimisé. Ce guide aide les utilisateurs de pandas à comprendre le SQL généré par leurs opérations.
Affichage du SQL généré
Querypython
from pathlib import PathPath("sales.csv").write_text("""\region,product,category,amount,quantity,price,date,order_idEast,Widget,Electronics,5200,10,120,2024-01-15,1001West,Gadget,Electronics,800,5,160,2024-02-20,1002East,Gizmo,Home,6500,3,100,2024-03-10,1003North,Widget,Electronics,4500,6,150,2024-06-18,1004West,Gadget,Electronics,2000,8,250,2024-09-14,1005""")from chdb import datastore as pdds = pd.read_csv("sales.csv")query = (ds .filter(ds['amount'] > 1000) .groupby('region') .agg({'amount': ['sum', 'mean']}) .sort('sum', ascending=False) .head(10))# View the SQLprint(query.to_sql())
# pandasdf.groupby('city').agg({ 'sales': ['sum', 'mean'], 'quantity': 'sum'})# SQLSELECT city, SUM(sales) AS sales_sum, AVG(sales) AS sales_mean, SUM(quantity) AS quantity_sumFROM dataGROUP BY city
Clause HAVING
# pandas styledf.groupby('city')['sales'].sum().query('sales > 10000')# DataStore styleds.groupby('city').agg({'sales': 'sum'}).having(ds['sum'] > 10000)# SQLSELECT city, SUM(sales) AS sumFROM dataGROUP BY cityHAVING sum > 10000
Jointures
pandas
SQL
pd.merge(df1, df2, on='id')
JOIN df2 ON df1.id = df2.id
pd.merge(df1, df2, on='id', how='left')
LEFT JOIN df2 ON ...
pd.merge(df1, df2, on='id', how='right')
RIGHT JOIN df2 ON ...
pd.merge(df1, df2, on='id', how='outer')
FULL OUTER JOIN df2 ON ...
pd.merge(df1, df2, left_on='a', right_on='b')
JOIN df2 ON df1.a = df2.b
Exemple de jointure
# pandasresult = pd.merge(employees, departments, on='dept_id', how='left')# SQL equivalentSELECT *FROM employees eLEFT JOIN departments d ON e.dept_id = d.dept_id