Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

دوال التجميع في DataStore

يوفّر DataStore دعمًا شاملًا لعمليات التجميع ودوال النافذة، مستفيدًا من إمكانات ClickHouse القوية للتجميع في SQL.

التجميعات الأساسية

الأساليب المضمنة

Method المكافئ في SQL الوصف
sum() SUM() مجموع القيم
mean() AVG() المتوسط/الوسط الحسابي
count() COUNT() عدد القيم غير NULL
min() MIN() القيمة الصغرى
max() MAX() القيمة العظمى
median() MEDIAN() القيمة الوسيطة
std() stddevPop() الانحراف المعياري
var() varPop() التباين
nunique() COUNT(DISTINCT) عدد القيم الفريدة

أمثلة:

from pathlib import Path
Path("sales.csv").write_text("""\
region,product,category,amount,quantity,price,date,order_id
East,Widget,Electronics,5200,10,120,2024-01-15,1001
West,Gadget,Electronics,800,5,160,2024-02-20,1002
East,Gizmo,Home,6500,3,100,2024-03-10,1003
North,Widget,Electronics,4500,6,150,2024-06-18,1004
West,Gadget,Electronics,2000,8,250,2024-09-14,1005
""")

from chdb import datastore as pd

ds = pd.read_csv("sales.csv")

# Single column aggregation
total = ds['amount'].sum()
average = ds['amount'].mean()
count = ds['amount'].count()

# All aggregations
print(ds['amount'].sum())    # Total
print(ds['amount'].mean())   # Average
print(ds['amount'].std())    # Standard deviation
print(ds['amount'].median()) # Median
print(ds['amount'].nunique()) # Unique count

التجميعات في GroupBy

عملية تجميع واحدة

# Group by and aggregate
result = ds.groupby('category')['amount'].sum()
result = ds.groupby('region')['sales'].mean()

التجميعات المتعددة

# Dictionary syntax
result = ds.groupby('category').agg({
    'amount': 'sum',
    'quantity': 'mean',
    'order_id': 'count'
})

# List of aggregations per column
result = ds.groupby('category').agg({
    'amount': ['sum', 'mean', 'max'],
    'quantity': ['sum', 'count']
})

التجميعات المُسمّاة

# Named aggregation (pandas style)
result = ds.groupby('region').agg(
    total_amount=('amount', 'sum'),
    avg_quantity=('quantity', 'mean'),
    order_count=('order_id', 'count'),
    max_price=('price', 'max')
)

عدة مفاتيح لـ GroupBy

# Group by multiple columns
result = ds.groupby(['region', 'category']).agg({
    'amount': 'sum',
    'quantity': 'sum'
})

التجميعات الإحصائية

الطريقة المكافئ في SQL الوصف
quantile(q) quantile(q) الكمّ المئيني من الرتبة q (0-1)
skew() skewPop() الالتواء
kurt() kurtPop() التفلطح
corr() corr() الارتباط
cov() covar() التغاير
sem() - الخطأ المعياري للمتوسط

أمثلة:

# Quantiles
q50 = ds['amount'].quantile(0.5)  # Median
q95 = ds['amount'].quantile(0.95) # 95th percentile

# Multiple quantiles
quantiles = ds['amount'].quantile([0.25, 0.5, 0.75])

# Correlation between columns
correlation = ds[['sales', 'marketing_spend']].corr()

التجميعات الشرطية

دوال التجميع الشرطية الخاصة بـ ClickHouse.

الدالة ClickHouse الوصف
sum_if(cond) sumIf() المجموع عند تحقق الشرط
count_if(cond) countIf() العدد عند تحقق الشرط
avg_if(cond) avgIf() المتوسط عند تحقق الشرط
min_if(cond) minIf() الحد الأدنى عند تحقق الشرط
max_if(cond) maxIf() الحد الأقصى عند تحقق الشرط

أمثلة:

from chdb.datastore import F, Field

# Sum only high value orders
high_value_sum = F.sum_if(Field('amount'), Field('amount') > 1000)

# Count active users
active_count = F.count_if(Field('status') == 'active')

# In groupby context
result = ds.groupby('region').agg({
    'total': ('amount', 'sum'),
    'high_value': ('amount', F.sum_if(Field('amount') > 1000)),
})

التجميعات للقيم

دوال خاصة بـ ClickHouse لتجميع القيم.

الدالة ClickHouse الوصف
group_array() groupArray() تجميع القيم في مصفوفة
group_uniq_array() groupUniqArray() تجميع القيم الفريدة في مصفوفة
group_concat(sep) groupConcat() ربط السلاسل النصية
top_k(n) topK(n) أكثر K قيم تكرارًا
any() any() أي قيمة
any_last() anyLast() آخر قيمة
first_value() first_value() أول قيمة حسب الترتيب
last_value() last_value() آخر قيمة حسب الترتيب

أمثلة:

from chdb.datastore import F, Field

# Collect all tags per category
result = ds.groupby('category').agg({
    'all_tags': ('tag', F.group_array()),
    'unique_tags': ('tag', F.group_uniq_array())
})

# Get top 5 products per region
result = ds.groupby('region').agg({
    'top_products': ('product_id', F.top_k(5))
})

دوال النافذة

دوال الترتيب

الوظيفة SQL الوصف
row_number() ROW_NUMBER() رقم الصف المتسلسل
rank() RANK() ترتيب مع فجوات
dense_rank() DENSE_RANK() ترتيب بلا فجوات
ntile(n) NTILE(n) تقسيم إلى n مجموعات
percent_rank() PERCENT_RANK() الترتيب بالنسبة المئوية (0-1)
cume_dist() CUME_DIST() التوزيع التراكمي

أمثلة:

from chdb.datastore import F, Field

# Add row number
ds['row_num'] = F.row_number().over(order_by='date')

# Rank within groups
ds['rank'] = F.rank().over(
    partition_by='category',
    order_by='sales'
)

# Dense rank (no gaps)
ds['dense_rank'] = F.dense_rank().over(
    partition_by='region',
    order_by=('revenue', 'desc')
)

# Divide into quartiles
ds['quartile'] = F.ntile(4).over(order_by='score')

دوال القيم

Function SQL Description
lag(n) LAG(col, n) قيمة الصف السابق
lead(n) LEAD(col, n) قيمة الصف التالي
first_value() FIRST_VALUE() أول قيمة في النافذة
last_value() LAST_VALUE() آخر قيمة في النافذة
nth_value(n) NTH_VALUE(col, n) القيمة رقم n في النافذة

أمثلة:

# Previous and next value
ds['prev_price'] = F.lag('price', 1).over(order_by='date')
ds['next_price'] = F.lead('price', 1).over(order_by='date')

# First and last in partition
ds['first_order'] = F.first_value('amount').over(
    partition_by='customer_id',
    order_by='date'
)

الدوال التراكمية

Method Description
cumsum() المجموع التراكمي
cummax() القيمة العظمى التراكمية
cummin() القيمة الصغرى التراكمية
cumprod() حاصل الضرب التراكمي
diff(n) الفرق عن القيمة قبل n صفوف
pct_change(n) نسبة التغير عن القيمة قبل n صفوف

أمثلة:

# Cumulative calculations
ds['running_total'] = ds['amount'].cumsum()
ds['running_max'] = ds['amount'].cummax()

# With grouping
ds['group_cumsum'] = ds.groupby('category')['amount'].cumsum()

# Period over period
ds['daily_diff'] = ds['sales'].diff(1)
ds['pct_change'] = ds['sales'].pct_change(1)

النوافذ المنزلقة

# Rolling window aggregations
ds['rolling_avg'] = ds['price'].rolling(window=7).mean()
ds['rolling_sum'] = ds['amount'].rolling(window=30).sum()
ds['rolling_std'] = ds['value'].rolling(window=10).std()

# Expanding windows
ds['expanding_max'] = ds['price'].expanding().max()
ds['expanding_sum'] = ds['amount'].expanding().sum()

مساحة الاسم F

تتيح مساحة الاسم F الوصول إلى دوال ClickHouse.

استيراد

from chdb.datastore import F, Field

استخدام دوال F

# Aggregations
F.sum(Field('amount'))
F.avg(Field('price'))
F.count(Field('id'))

# Statistical
F.quantile(Field('value'), 0.95)
F.stddev_pop(Field('score'))
F.corr(Field('x'), Field('y'))

# Conditional
F.sum_if(Field('amount'), Field('status') == 'completed')
F.count_if(Field('is_active'))

# String
F.length(Field('name'))
F.upper(Field('text'))

# Date/Time
F.to_year(Field('date'))
F.date_diff('day', Field('start'), Field('end'))

# Array
F.array_sum(Field('values'))
F.array_avg(Field('scores'))

# Math
F.abs(Field('delta'))
F.round(Field('price'), 2)
F.floor(Field('value'))
F.ceil(Field('value'))

F مع دوال النافذة

# Define window frame
window = F.window(
    partition_by='category',
    order_by='date',
    rows_between=(-7, 0)  # Current row and 7 preceding
)

ds['rolling_avg'] = F.avg(Field('price')).over(window)

الأنماط الشائعة للتجميع

أعلى N ضمن كل مجموعة

# Top 3 products per category by sales
result = (ds
    .assign(rank=F.row_number().over(
        partition_by='category',
        order_by=('sales', 'desc')
    ))
    .filter(ds['rank'] <= 3)
)

المجموع التراكمي

# Running total of sales
ds['running_total'] = F.sum('amount').over(
    order_by='date',
    rows_between=(None, 0)  # All rows up to current
)

المتوسط المتحرك

# 7-day moving average
ds['ma_7'] = F.avg('price').over(
    order_by='date',
    rows_between=(-6, 0)
)

المقارنة السنوية

# YoY comparison
ds['prev_year_sales'] = F.lag('sales', 12).over(
    partition_by='product_id',
    order_by='month'
)
ds['yoy_growth'] = (ds['sales'] - ds['prev_year_sales']) / ds['prev_year_sales']

الرتبة المئينية

# Rank customers by total spend
ds['spend_percentile'] = F.percent_rank().over(order_by='total_spend')

ملخص أساليب التجميع

الفئة الأساليب
أساسية sum, mean, count, min, max, median
إحصائية std, var, quantile, skew, kurt, corr, cov
شرطية sum_if, count_if, avg_if, min_if, max_if
تجميعية group_array, group_uniq_array, group_concat, top_k
الترتيب row_number, rank, dense_rank, ntile, percent_rank
القيم lag, lead, first_value, last_value, nth_value
تراكمية cumsum, cummax, cummin, cumprod, diff, pct_change
منزلق rolling().mean/sum/std/..., expanding().mean/sum/...
Navigation