BSI
- يمكن أن يكون نوع الفهرس واحدًا من
UInt8أوUInt16أوUInt32. ملاحظة: نظرًا لأداء تنفيذ Roaring Bitmap ذي 64 بت، فإن تنسيق BSI لا يدعمUInt64/Int64. - يمكن أن يكون نوع القيمة واحدًا من
Int8أوInt16أوInt32أوInt64أوUInt8أوUInt16أوUInt32أوUInt64أوFloat32أوFloat64. ملاحظة: لا يتوسع نوع القيمة تلقائيًا. على سبيل المثال، إذا استخدمتUInt8بوصفه نوع القيمة، فإن أي مجموع يتجاوز سعةUInt8سيتسبب في تجاوز السعة بدلًا من ترقيته إلى نوع أعلى؛ وبالمثل، فإن العمليات على الأعداد الصحيحة ستنتج نتائج صحيحة (فمثلًا، لن تتحول القسمة تلقائيًا إلى نتيجة ذات فاصلة عائمة). لذلك، من المهم التخطيط لنوع القيمة وتصميمه مسبقًا. وفي السيناريوهات العملية، تُستخدم الأنواع ذات الفاصلة العائمة (Float32/Float64) بشكل شائع. - لا يمكن تنفيذ العمليات إلا بين متجهين لهما نوع الفهرس نفسه ونوع القيمة نفسه.
- يستخدم التخزين الأساسي Bit-Sliced Index، حيث تُستخدم bitmap لتخزين الفهارس. ويُستخدم Roaring Bitmap بوصفه التنفيذ المحدد لـ bitmap. ومن أفضل الممارسات تجميع الفهارس في أقل عدد ممكن من حاويات Roaring Bitmap لتحقيق أقصى قدر من الضغط وتحسين أداء الاستعلام.
- تحوّل آلية Bit-Sliced Index القيمة إلى تمثيل ثنائي. وبالنسبة إلى الأنواع ذات الفاصلة العائمة، يستخدم التحويل تمثيل الفاصلة الثابتة، مما قد يؤدي إلى فقدان الدقة. ويمكن ضبط الدقة عبر تخصيص عدد البتات المستخدمة للجزء الكسري، والقيمة default هي 24 بت، وهي كافية لمعظم السيناريوهات. يمكنك تخصيص عدد بتات الجزء الصحيح وبتات الجزء الكسري عند إنشاء NumericIndexedVector باستخدام aggregate function groupNumericIndexedVector مع
-State. - توجد ثلاث حالات للفهارس: قيمة غير صفرية، وقيمة صفرية، وغير موجودة. في NumericIndexedVector، لا تُخزَّن إلا القيم غير الصفرية والقيم الصفرية. بالإضافة إلى ذلك، في العمليات عنصرًا بعنصر بين NumericIndexedVectorين، ستُعامل قيمة الفهرس غير الموجود على أنها 0. وفي سيناريو القسمة، تكون النتيجة صفرًا عندما يكون divisor صفرًا.
إنشاء كائن numericIndexedVector
groupNumericIndexedVector مع -State.
يمكنك إضافة اللاحقة -if لقبول شرط إضافي.
لن تعالج الدالة التجميعية إلا الصفوف التي تطابق الشرط.
أما الطريقة الأخرى فهي إنشاؤه من خريطة باستخدام numericIndexedVectorBuild.
تتيح الدالة groupNumericIndexedVectorState تخصيص عدد البتات الصحيحة والكسرية عبر المعاملات، بينما لا يتيح numericIndexedVectorBuild ذلك.
groupNumericIndexedVector
Float64. وإذا أُضيفت اللاحقة State، فإنه يُرجع كائن NumericIndexedVector.
الصياغة
type: String، اختياري. يحدّد تنسيق التخزين. حاليًا، التنسيق المدعوم الوحيد هو'BSI'.integer_bit_num:UInt32، اختياري. يكون هذا المعلَم ساريًا عند استخدام تنسيق التخزين'BSI'، ويشير إلى عدد البتات المستخدمة للجزء الصحيح. عندما يكون نوع الفهرس نوعًا صحيحًا، فإن القيمة الافتراضية تساوي عدد البتات المستخدمة لتخزين الفهرس. على سبيل المثال، إذا كان نوع الفهرس هو UInt16، فإن القيمة الافتراضية لـinteger_bit_numهي 16. أما بالنسبة إلى نوعَي الفهرس Float32 وFloat64، فالقيمة الافتراضية لـ integer_bit_num هي 40، لذا يكون الجزء الصحيح من البيانات الذي يمكن تمثيله ضمن النطاق[-2^39, 2^39 - 1]. والنطاق المسموح به هو[0, 64].fraction_bit_num:UInt32، اختياري. يكون هذا المعلَم ساريًا عند استخدام تنسيق التخزين'BSI'، ويشير إلى عدد البتات المستخدمة للجزء الكسري. عندما يكون نوع القيمة عددًا صحيحًا، تكون القيمة الافتراضية 0؛ وعندما يكون نوع القيمة Float32 أو Float64، تكون القيمة الافتراضية 24. والنطاق الصالح هو[0, 24].- يوجد أيضًا قيد ينص على أن النطاق الصالح لـ integer_bit_num + fraction_bit_num هو [0, 64].
col1: عمود الفهرس. الأنواع المدعومة:UInt8/UInt16/UInt32/Int8/Int16/Int32.col2: عمود القيمة. الأنواع المدعومة:Int8/Int16/Int32/Int64/UInt8/UInt16/UInt32/UInt64/Float32/Float64.
Float64 تمثل مجموع جميع القيم.
مثال
بيانات الاختبار:
يُنشأ التوثيق أدناه استنادًا إلى جدول النظام
system.functions.numericIndexedVectorAllValueSum
numericIndexedVector.
البنية
Float64
أمثلة
مثال على الاستخدام
Query
Response
numericIndexedVectorBuild
map— تعيين يربط الفهرس بالقيمة.Map
AggregateFunction
أمثلة
مثال على الاستخدام
Query
Response
numericIndexedVectorCardinality
UInt64
أمثلة
مثال على الاستخدام
Query
Response
numericIndexedVectorGetValue
v—numericIndexedVectori— الفهرس المراد استرجاع القيمة له.(U)Int*
(U)Int* أو Float*
أمثلة
مثال على الاستخدام
Query
Response
numericIndexedVectorPointwiseAdd
numericIndexedVector وnumericIndexedVector آخر أو ثابت عددي.
البنية
v1—numericIndexedVectorv2— ثابت عددي أو كائنnumericIndexedVector.(U)Int*أوFloat*أوnumericIndexedVector
numericIndexedVector جديدًا. numericIndexedVector
أمثلة
مثال للاستخدام
Query
Response
numericIndexedVectorPointwiseDivide
numericIndexedVector وnumericIndexedVector آخر أو ثابت عددي.
البنية
v1—numericIndexedVectorv2— ثابت عددي أو كائنnumericIndexedVector.(U)Int*أوFloat*أوnumericIndexedVector
numericIndexedVector جديدًا. numericIndexedVector
أمثلة
مثال على الاستخدام
Query
Response
numericIndexedVectorPointwiseEqual
numericIndexedVector وnumericIndexedVector آخر أو ثابت عددي.
والنتيجة هي numericIndexedVector يحتوي على الفهارس التي تتساوى عندها القيم، مع ضبط جميع القيم المناظرة على 1.
البنية
v1—numericIndexedVectorv2— ثابت عددي أو كائنnumericIndexedVector.(U)Int*أوFloat*أوnumericIndexedVector
numericIndexedVector جديدًا. numericIndexedVector
أمثلة
Query
Response
numericIndexedVectorPointwiseGreater
numericIndexedVector وnumericIndexedVector آخر أو ثابت عددي.
وتكون النتيجة numericIndexedVector يحتوي على الفهارس التي تكون فيها قيمة المتجه الأول أكبر من قيمة المتجه الثاني، مع تعيين جميع القيم المقابلة إلى 1.
الصيغة
v1—numericIndexedVectorv2— ثابت عددي أو كائنnumericIndexedVector.(U)Int*أوFloat*أوnumericIndexedVector
numericIndexedVector جديدًا. numericIndexedVector
أمثلة
مثال على الاستخدام
Query
Response
numericIndexedVectorPointwiseGreaterEqual
v1—numericIndexedVectorv2— ثابت عددي أو كائنnumericIndexedVector.(U)Int*أوFloat*أوnumericIndexedVector
numericIndexedVector جديدًا. numericIndexedVector
أمثلة
مثال على الاستخدام
Query
Response
numericIndexedVectorPointwiseLess
numericIndexedVector وnumericIndexedVector آخر أو ثابت عددي.
والنتيجة هي numericIndexedVector يحتوي على الفهارس التي تكون فيها قيمة المتجه الأول أقل من قيمة المتجه الثاني، مع ضبط جميع القيم المقابلة على 1.
البنية
v1—numericIndexedVectorv2— ثابت عددي أو كائنnumericIndexedVector.(U)Int*أوFloat*أوnumericIndexedVector
numericIndexedVector جديدًا. numericIndexedVector
أمثلة
مثال على الاستخدام
Query
Response
numericIndexedVectorPointwiseLessEqual
v1—numericIndexedVectorv2— ثابت عددي أو كائنnumericIndexedVectorمن النوع(U)Int*أوFloat*أوnumericIndexedVector
numericIndexedVector جديدًا. numericIndexedVector
أمثلة
مثال على الاستخدام
Query
Response
numericIndexedVectorPointwiseMultiply
numericIndexedVector وnumericIndexedVector آخر أو ثابت عددي.
الصيغة
v1—numericIndexedVectorv2— ثابت عددي أو كائنnumericIndexedVector.(U)Int*أوFloat*أوnumericIndexedVector
numericIndexedVector جديدًا. numericIndexedVector
أمثلة
Query
Response
numericIndexedVectorPointwiseNotEqual
numericIndexedVector وnumericIndexedVector آخر أو ثابت عددي.
والنتيجة هي numericIndexedVector يحتوي على الفهارس التي تكون فيها القيم غير متساوية، مع ضبط جميع القيم المقابلة على 1.
البنية
v1—numericIndexedVectorv2— ثابت عددي أو كائنnumericIndexedVector.(U)Int*أوFloat*أوnumericIndexedVector
numericIndexedVector جديدًا. numericIndexedVector
أمثلة
مثال على الاستخدام
Query
Response
numericIndexedVectorPointwiseSubtract
numericIndexedVector وnumericIndexedVector آخر أو ثابت عددي.
البنية
v1—numericIndexedVectorv2— ثابت عددي أو كائن numericIndexedVector.(U)Int*أوFloat*أوnumericIndexedVector
numericIndexedVector
أمثلة
مثال على الاستخدام
Query
Response
numericIndexedVectorShortDebugString
numericIndexedVector بتنسيق JSON.
تُستخدم هذه الدالة أساسًا لأغراض تصحيح الأخطاء.
الصياغة
String
أمثلة
مثال على الاستخدام
Query
Response
numericIndexedVectorToMap
Map
أمثلة
مثال على الاستخدام
Query
Response