DataStore compila las operaciones al estilo de pandas en SQL optimizado. Esta guía ayuda a los usuarios de pandas a entender el SQL que hay detrás de sus operaciones.
Ver el SQL generado
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))# Ver el 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
Cláusula HAVING
# estilo pandasdf.groupby('city')['sales'].sum().query('sales > 10000')# estilo DataStoreds.groupby('city').agg({'sales': 'sum'}).having(ds['sum'] > 10000)# SQLSELECT city, SUM(sales) AS sumFROM dataGROUP BY cityHAVING sum > 10000
Joins
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
Ejemplo de join
# pandasresult = pd.merge(employees, departments, on='dept_id', how='left')# Equivalente en SQLSELECT *FROM employees eLEFT JOIN departments d ON e.dept_id = d.dept_id