المُدرَّج التكراري
يحسب مُدرَّجًا تكراريًا تكيفيًا. ولا يضمن نتائج دقيقة.values — Expression يُنتج قيم الإدخال.
المعلمات
number_of_bins — الحد الأقصى لعدد الفئات في المُدرَّج التكراري. تحسب الدالة عدد الفئات تلقائيًا. وتحاول الوصول إلى العدد المحدد من الفئات، ولكن إذا تعذر ذلك، تستخدم عددًا أقل من الفئات.
القيم المُعادة
-
Array من Tuples بالتنسيق التالي:
lower— الحد الأدنى للفئة.upper— الحد الأعلى للفئة.height— الارتفاع المحسوب للفئة.
sequenceMatch
يتحقق مما إذا كان التسلسل يتضمن سلسلة أحداث تطابق النمط. الصيغةقد تَرِد الأحداث التي تشترك في الطابع الزمني ضمن التسلسل بترتيب غير محدد، مما يؤثر في النتيجة. ويأخذ الطابع الزمني
DateTime64 أجزاء الثانية في الحسبان عند ترتيب الأحداث، لذا لا يلتبس إلا ترتيب الأحداث التي تشترك في وحدة القياس الزمنية نفسها.-
timestamp— العمود الذي يُعتبر أنه يحتوي على بيانات الوقت. أنواع البيانات المعتادة هيDateوDateTimeوDateTime64. ويمكنك أيضًا استخدام أيٍّ من أنواع بيانات UInt المدعومة. -
cond1،cond2— الشروط التي تصف تسلسل الأحداث. نوع البيانات:UInt8. يمكنك تمرير ما يصل إلى 32 وسيط شرط. لا تأخذ الدالة في الحسبان إلا الأحداث الموصوفة في هذه الشروط. وإذا كان التسلسل يحتوي على بيانات غير موصوفة في أي شرط، فتتخطاها الدالة.
pattern— سلسلة النمط. راجع بنية النمط.
- 1، إذا تمت مطابقة النمط.
- 0، إذا لم تتم مطابقة النمط.
UInt8.
بنية النمط
-
(?N)— يطابق وسيطة الشرط في الموضعN. تُرقَّم الشروط ضمن النطاق[1, 32]. على سبيل المثال، يطابق(?1)الوسيطة المُمرَّرة إلى المعلَمةcond1. -
.*— يطابق أي عدد من الأحداث. لا تحتاج إلى وسيطات شرطية لمطابقة هذا العنصر من النمط. -
(?t operator value)— يحدّد الزمن الذي يجب أن يفصل بين حدثين. على سبيل المثال، يطابق النمط(?1)(?t>1800)(?2)الأحداث التي يفصل بين وقوعها أكثر من 1800 ثانية. ويمكن أن يقع بين هذين الحدثين أي عدد من الأحداث. يمكنك استخدام المعاملات>=,>,<,<=,==. إذا كان الطابع الزمني من النوعDateTimeأوDateTime64، فتُقاس القيمة بالثواني مهما كانت دقةDateTime64، ولذلك يحتفظ النمط نفسه بمعناه عندما يتغير نوع العمود بينDateTimeوDateTime64بأي مقياس. وإذا كان الطابع الزمني من النوعDate، فتُقاس القيمة بالأيام، أما إذا كان عددًا صحيحًا غير موقّع، فتُقاس بوحدات ذلك العدد الصحيح.
t:
sequenceCount
تحسب عدد سلاسل الأحداث المطابقة للنمط. تبحث الدالة في سلاسل أحداث غير متداخلة. ويبدأ البحث عن السلسلة التالية بعد مطابقة السلسلة الحالية.قد تَرِد الأحداث التي تشترك في الطابع الزمني ضمن التسلسل بترتيب غير معرّف، مما يؤثر في النتيجة. ويأخذ ترتيب الطوابع الزمنية من نوع
DateTime64 أجزاء الثانية في الحسبان أيضًا، لذا لا يلتبس الترتيب إلا بين الأحداث التي تشترك في أصغر وحدة زمنية.-
timestamp— العمود الذي يُعتبر أنه يحتوي على بيانات زمنية. تشمل أنواع البيانات المعتادةDateوDateTimeوDateTime64. كما يمكنك استخدام أيًّا من أنواع بيانات UInt المدعومة. -
cond1,cond2— شروط تصف سلسلة الأحداث. نوع البيانات:UInt8. يمكنك تمرير ما يصل إلى 32 وسيط شرط. لا تأخذ الدالة في الحسبان إلا الأحداث الموصوفة في هذه الشروط. وإذا احتوى التسلسل على بيانات غير موصوفة في أي شرط، فتتخطّاها الدالة.
pattern— سلسلة النمط. راجع بنية النمط.
- عدد سلاسل الأحداث غير المتداخلة التي تمت مطابقتها.
UInt64.
مثال
لننظر في البيانات الموجودة في الجدول t:
sequenceMatchEvents
أعِد الطوابع الزمنية للأحداث لأطول سلاسل الأحداث التي طابقت النمط.قد تَرِد الأحداث التي تشترك في الطابع الزمني نفسه ضمن التسلسل بترتيب غير محدد، مما يؤثر في النتيجة. ويأخذ الطابع الزمني
DateTime64 أجزاء الثانية في الحسبان عند الترتيب، لذا لا يلتبس الترتيب إلا بين الأحداث التي تشترك في أصغر وحدة زمنية ممثَّلة.-
timestamp— العمود الذي يُعدّ محتويًا على بيانات الوقت. أنواع البيانات الشائعة هيDateوDateTimeوDateTime64. يمكنك أيضًا استخدام أيٍّ من أنواع بيانات UInt المدعومة. -
cond1,cond2— شروط تصف سلسلة الأحداث. نوع البيانات:UInt8. يمكنك تمرير ما يصل إلى 32 وسيطة شرط. لا تأخذ الدالة في الاعتبار إلا الأحداث الموصوفة في هذه الشروط. إذا كان التسلسل يحتوي على بيانات غير موصوفة في أي شرط، فإن الدالة تتخطّاها.
pattern— سلسلة النمط. راجع بنية النمط.
- مصفوفة من الطوابع الزمنية لوسيطات الشروط المطابِقة (?N) من سلسلة الأحداث. يطابق كل موضع في المصفوفة موضع وسيطة الشرط في النمط
t:
windowFunnel
يبحث عن سلاسل الأحداث ضمن نافذة زمنية منزلقة، ويحسب الحد الأقصى لعدد الأحداث التي تحققت في السلسلة. تعمل الدالة وفقًا للخوارزمية التالية:- تبحث الدالة عن البيانات التي تستوفي الشرط الأول في السلسلة، وتضبط عدّاد الأحداث على 1. وهذه هي اللحظة التي تبدأ فيها النافذة المنزلقة.
- إذا حدثت أحداث من السلسلة بشكل متسلسل داخل النافذة، فسيزداد العدّاد. وإذا انقطع تسلسل الأحداث، فلن يزداد العدّاد.
- إذا كانت البيانات تحتوي على عدة سلاسل أحداث بمراحل اكتمال مختلفة، فلن تُخرج الدالة إلا طول أطول سلسلة.
timestamp— اسم العمود الذي يحتوي على الطابع الزمني. أنواع البيانات المدعومة: Date، وDateTime، وأنواع الأعداد الصحيحة غير الموقعة الأخرى (لاحظ أنه رغم أنtimestampيدعم النوعUInt64، فإن قيمته لا يمكن أن تتجاوز الحد الأقصى لـ Int64، وهو 2^63 - 1).cond— الشروط أو البيانات التي تصف سلسلة الأحداث. UInt8.
window— طول النافذة المنزلقة، وهو الفاصل الزمني بين الشرط الأول والشرط الأخير. تعتمد وحدةwindowعلىtimestampنفسه وتختلف وفقًا له. ويُحدَّد ذلك باستخدام التعبيرtimestamp of cond1 <= timestamp of cond2 <= ... <= timestamp of condN <= timestamp of cond1 + window.mode— وسيط اختياري. يمكن تعيين وضع واحد أو أكثر.'strict_deduplication'— إذا تحقق الشرط نفسه ضمن تسلسل الأحداث، فإن هذا الحدث المكرر يوقف المعالجة اللاحقة. ملاحظة: قد يعمل هذا بشكل غير متوقع إذا تحققت عدة شروط للحدث نفسه.'strict_order'— لا يسمح بتدخل أحداث أخرى. على سبيل المثال، في الحالةA->B->D->C، يتوقف عن العثور علىA->B->CعندDويكون الحد الأقصى لمستوى الحدث هو 2.'strict_increase'— يطبّق الشروط فقط على الأحداث ذات الطوابع الزمنية المتزايدة تصاعديًا بشكل صارم.'strict_once'— يحتسب كل حدث مرة واحدة فقط في السلسلة حتى إذا استوفى الشرط عدة مرات.'allow_reentry'— يتجاهل الأحداث التي تنتهك الترتيب الصارم. على سبيل المثال، في الحالة A->A->B->C، يعثر على A->B->C بتجاهل A الزائد ويكون الحد الأقصى لمستوى الحدث هو 3.
Integer.
مثال
حدّد ما إذا كانت فترة زمنية معينة كافية لكي يختار المستخدم هاتفًا ويشتريه مرتين من المتجر الإلكتروني.
عيّن سلسلة الأحداث التالية:
- سجّل المستخدم الدخول إلى حسابه في المتجر (
eventID = 1003). - بحث المستخدم عن هاتف (
eventID = 1007, product = 'phone'). - قدّم المستخدم طلبًا (
eventID = 1009). - أعاد المستخدم الطلب مرة أخرى (
eventID = 1010).
user_id الوصول ضمن التسلسل خلال الفترة بين يناير وفبراير من عام 2019.
Query
Response
allow_reentry مع أنماط إعادة الدخول للمستخدم:
retention
تأخذ الدالة كوسائط مجموعةً من الشروط، من 1 إلى 32 وسيطة من النوعUInt8، تشير إلى ما إذا كان شرط معيّن قد تحقق للحدث.
يمكن تحديد أي شرط كوسيطة (كما في WHERE).
تُطبَّق الشروط، باستثناء الشرط الأول، على شكل أزواج: تكون نتيجة الشرط الثاني true إذا كان الشرطان الأول والثاني true، وتكون نتيجة الشرط الثالث إذا كان الشرطان الأول والثالث true، وهكذا.
الصيغة
cond— تعبير يُرجِع نتيجة من نوعUInt8(1 أو 0).
- 1 — تم استيفاء الشرط لهذا الحدث.
- 0 — لم يتم استيفاء الشرط لهذا الحدث.
UInt8.
مثال
لنأخذ مثالًا على حساب الدالة retention لتحديد زيارات الموقع.
1. أنشئ جدولًا لتوضيح المثال.
Query
Query
Response
uid باستخدام الدالة retention.
Query
Response
Query
Response
r1- عدد الزوار المميزين الذين زاروا الموقع في 2020-01-01 (الشرطcond1).r2- عدد الزوار المميزين الذين زاروا الموقع خلال فترة زمنية محددة بين 2020-01-01 و2020-01-02 (الشرطانcond1وcond2).r3- عدد الزوار المميزين الذين زاروا الموقع خلال فترة زمنية محددة في 2020-01-01 و2020-01-03 (الشرطانcond1وcond3).
uniqUpTo(N)(x)
تحسب عدد القيم المختلفة للوسيطة حتى حدٍّ معيّن،N. إذا كان عدد قيم الوسيطة المختلفة أكبر من N، فستُرجع هذه الدالة N + 1، وإلا فإنها تحسب القيمة الدقيقة.
يُنصح باستخدامها مع القيم الصغيرة لـ N، حتى 10. الحد الأقصى لقيمة N هو 100.
بالنسبة إلى حالة الدالة التجميعية، تستخدم هذه الدالة مقدارًا من الذاكرة يساوي 1 + N * حجم قيمة واحدة بالبايت.
وعند التعامل مع السلاسل النصية، تخزّن هذه الدالة قيمة hash غير تشفيرية بحجم 8 بايتات؛ ويكون الحساب تقريبيًا للسلاسل النصية.
على سبيل المثال، إذا كان لديك جدول يسجّل كل عبارة بحث يُدخلها المستخدمون على موقعك الإلكتروني. يمثّل كل صف في الجدول عبارةَ بحث واحدة، مع أعمدة لمعرّف المستخدم، وعبارة البحث، والطابع الزمني للاستعلام. يمكنك استخدام uniqUpTo لإنشاء تقرير يعرض فقط الكلمات المفتاحية التي أدت إلى 5 مستخدمين فريدين على الأقل.
uniqUpTo(4)(UserID) عدد قيم UserID الفريدة لكل SearchPhrase، لكنه لا يحسب أكثر من 4 قيم فريدة. إذا كان هناك أكثر من 4 قيم UserID فريدة لعبارة SearchPhrase، فستُرجع الدالة 5 (4 + 1). بعد ذلك، تُصفّي عبارة HAVING قيم SearchPhrase التي يكون فيها عدد قيم UserID الفريدة أقل من 5. ويمنحك هذا قائمة بالكلمات المفتاحية للبحث التي استخدمها 5 مستخدمين مختلفين على الأقل.
sumMapFiltered
تعمل هذه الدالة بالطريقة نفسها التي تعمل بها sumMap، إلا أنها تقبل أيضًا Array من المفاتيح لاستخدامه في التصفية كمعامل. ويكون هذا مفيدًا بشكل خاص عند العمل مع مفاتيح عالي الكاردينالية. البنيةsumMapFiltered(keys_to_keep)(keys, values)
المعلمات
keys_to_keep: Array من المفاتيح المستخدمة في التصفية.keys: Array من المفاتيح.values: Array من القيم.
- يعيد Tuple مكوّنًا من مصفوفتين: المفاتيح بترتيب مرتب، والقيم المجمّعة للمفاتيح المقابلة.
Query
Query
Response
sumMapFilteredWithOverflow
تعمل هذه الدالة بالطريقة نفسها التي تعمل بها sumMap، باستثناء أنها تقبل أيضًا Array من المفاتيح لاستخدامها في التصفية كمعامل. وقد يكون ذلك مفيدًا بشكل خاص عند العمل مع مفاتيح عالي الكاردينالية. وهي تختلف عن الدالة sumMapFiltered في أنها تُجري الجمع مع حدوث overflow، أي إنها تُرجع لعملية الجمع نوع البيانات نفسه الخاص بنوع بيانات المعامل. البنيةsumMapFilteredWithOverflow(keys_to_keep)(keys, values)
المعاملات
keys_to_keep: Array من المفاتيح لاستخدامها في التصفية.keys: Array من المفاتيح.values: Array من القيم.
- تُرجع Tuple من مصفوفتين: المفاتيح بترتيب فرز، والقيم المجمّعة للمفاتيح المقابلة.
sum_map، وندرِج فيه بعض البيانات، ثم نستخدم كلًا من sumMapFilteredWithOverflow وsumMapFiltered والدالة toTypeName لمقارنة النتيجة. ونظرًا لأن requests كان من النوع UInt8 في الجدول المُنشأ، فقد رقّت sumMapFiltered نوع القيم المجمّعة إلى UInt64 لتجنّب overflow، في حين أبقت sumMapFilteredWithOverflow النوع UInt8، وهو غير كبير بما يكفي لتخزين النتيجة، أي إن overflow قد حدث.
Query
Query
Query
Response
Response
sequenceNextNode
يعيد قيمة الحدث التالي الذي طابق سلسلة الأحداث. دالة تجريبية، فعِّلها باستخدامSET allow_experimental_funnel_functions = 1.
الصياغة
-
direction— يُستخدم لتحديد الاتجاه.- forward — التحرك إلى الأمام.
- backward — التحرك إلى الخلف.
-
base— يُستخدم لتعيين النقطة المرجعية.- head — تعيين النقطة المرجعية إلى الحدث الأول.
- tail — تعيين النقطة المرجعية إلى الحدث الأخير.
- first_match — تعيين النقطة المرجعية إلى أول
event1مطابق. - last_match — تعيين النقطة المرجعية إلى آخر
event1مطابق.
timestamp— اسم العمود الذي يحتوي على الطابع الزمني. أنواع البيانات المدعومة: Date، وDateTime، وأنواع الأعداد الصحيحة الأخرى غير الموقعة.event_column— اسم العمود الذي يحتوي على قيمة الحدث التالي المراد إرجاعها. أنواع البيانات المدعومة: String وNullable(String).base_condition— الشرط الذي يجب أن تستوفيه النقطة المرجعية.event1,event2, … — شروط تصف سلسلة الأحداث. UInt8.
event_column[next_index]— إذا تمت مطابقة النمط وكانت القيمة التالية موجودة.NULL- إذا لم تتم مطابقة النمط أو لم تكن القيمة التالية موجودة.
Query
Response
forward وhead
backward وtail
forward وfirst_match
backward وlast_match
base_condition