توضح عبارة structure مفتاح القاموس والحقول المتاحة للاستعلامات.
وصف XML:
<dictionary>
<structure>
<id>
<name>Id</name>
</id>
<attribute>
<!-- Attribute parameters -->
</attribute>
...
</structure>
</dictionary>تُوصَف السمات في العناصر التالية:
<id>— عمود المفتاح<attribute>— عمود البيانات: يمكن أن يوجد أكثر من سمة واحدة.
استعلام DDL:
CREATE DICTIONARY dict_name (
Id UInt64,
-- attributes
)
PRIMARY KEY Id
...تُوصَف السمات في نص الاستعلام:
PRIMARY KEY— عمود المفتاحAttrName AttrType— عمود البيانات. يمكن أن تكون هناك عدة سمات.
المفتاح
يدعم ClickHouse الأنواع التالية من المفاتيح:
- مفتاح رقمي.
UInt64. يُعرَّف في الوسم<id>أو باستخدام الكلمة المفتاحيةPRIMARY KEY. - مفتاح مركب. مجموعة من القيم من أنواع مختلفة. يُعرَّف في الوسم
<key>أو باستخدام الكلمة المفتاحيةPRIMARY KEY.
يمكن أن تحتوي بنية XML على <id> أو <key> فقط. ويجب أن يحتوي استعلام DDL على PRIMARY KEY واحد فقط.
المفتاح الرقمي
النوع: UInt64.
مثال على التهيئة:
<id>
<name>Id</name>
</id>حقول الإعداد:
name– اسم العمود الذي يحتوي على المفاتيح.
لاستعلام DDL:
CREATE DICTIONARY (
Id UInt64,
...
)
PRIMARY KEY Id
...PRIMARY KEY– اسم العمود الذي يتضمن المفاتيح.
مفتاح مركب
يمكن أن يكون المفتاح tuple مكوَّنًا من حقول بأي أنواع. ويجب أن يكون التخطيط في هذه الحالة complex_key_hashed أو complex_key_cache.
يُحدَّد تركيب المفتاح في العنصر <key>. وتُحدَّد حقول المفتاح بالتنسيق نفسه المستخدم في سمات القاموس. مثال:
<structure>
<key>
<attribute>
<name>field1</name>
<type>String</type>
</attribute>
<attribute>
<name>field2</name>
<type>UInt32</type>
</attribute>
...
</key>
...أو
CREATE DICTIONARY (
field1 String,
field2 UInt32
...
)
PRIMARY KEY field1, field2
...بالنسبة إلى استعلام للدالة dictGet*، تُمرَّر قيمة tuple كمفتاح. مثال: dictGetString('dict_name', 'attr_name', tuple('string for field1', num_for_field2)).
عندما يتكوّن المفتاح المركب من سمة واحدة، يمكن تمرير قيمة المفتاح مباشرةً، من دون تغليفها داخل tuple. على سبيل المثال، كلٌّ من dictGetString('dict_name', 'attr_name', 'key') و dictGetString('dict_name', 'attr_name', tuple('key')) صحيح.
السمات
مثال على التهيئة:
<structure>
...
<attribute>
<name>Name</name>
<type>ClickHouseDataType</type>
<null_value></null_value>
<expression>rand64()</expression>
<hierarchical>true</hierarchical>
<injective>true</injective>
<is_object_id>true</is_object_id>
</attribute>
</structure>أو
CREATE DICTIONARY somename (
Name ClickHouseDataType DEFAULT '' EXPRESSION rand64() HIERARCHICAL INJECTIVE IS_OBJECT_ID
)حقول الإعداد:
| الوسم | الوصف | مطلوب |
|---|---|---|
name |
اسم العمود. | نعم |
type |
نوع بيانات ClickHouse: UInt8، UInt16، UInt32، UInt64، Int8، Int16، Int32، Int64، Float32، Float64، UUID، Decimal32، Decimal64، Decimal128، Decimal256،Date، Date32، DateTime، DateTime64، String، Array. تحاول ClickHouse تحويل القيمة من القاموس إلى نوع البيانات المحدد. على سبيل المثال، في MySQL، قد يكون الحقل TEXT أو VARCHAR أو BLOB في جدول المصدر في MySQL، لكن يمكن تحميله في ClickHouse على أنه String.يُدعَم Nullable حاليًا في قواميس Flat، وHashed، وComplexKeyHashed، وDirect، وComplexKeyDirect، وRangeHashed، وPolygon، وCache، وComplexKeyCache، وSSDCache، وSSDComplexKeyCache. أمّا في قواميس IPTrie، فلا تُدعَم أنواع Nullable. |
نعم |
null_value |
القيمة الافتراضية لعنصر غير موجود. في المثال، هي سلسلة نصية فارغة. لا يمكن استخدام قيمة NULL إلا مع الأنواع Nullable (انظر السطر السابق لوصف الأنواع). |
نعم |
expression |
تعبير تنفّذه ClickHouse على القيمة. يمكن أن يكون التعبير اسم عمود في قاعدة بيانات SQL بعيدة. وبالتالي، يمكنك استخدامه لإنشاء اسم مستعار للعمود البعيد. القيمة الافتراضية: لا يوجد تعبير. |
لا |
hierarchical |
إذا كانت القيمة true، فستحتوي السمة على قيمة المفتاح الأب للمفتاح الحالي. راجع القواميس الهرمية.القيمة الافتراضية: false. |
لا |
injective |
علامة توضّح ما إذا كان التقابل id -> attribute تقابلًا أحاديًا.إذا كانت القيمة true، يمكن لـ ClickHouse تلقائيًا وضع طلبات القواميس ذات الخاصية الأحادية بعد العبارة GROUP BY. وعادةً ما يقلّل ذلك بشكل كبير عدد هذه الطلبات.القيمة الافتراضية: false. |
لا |
is_object_id |
علامة توضّح ما إذا كان الاستعلام يُنفَّذ على مستند MongoDB باستخدام ObjectID.القيمة الافتراضية: false. |