الوصف
البدء
الاستخدام
سياسة الإصدارات
- يُزاد الرقم الرئيسي للإصدار عند إجراء تغييرات على API
- يُزاد الرقم الثانوي للإصدار عند إجراء تغييرات SQL المتوافقة مع الإصدارات السابقة
- يُزاد رقم التصحيح عند إجراء تغييرات تقتصر على الملف التنفيذي
- إصدار المكتبة (المعرّف بواسطة
PG_MODULE_MAGICفي PostgreSQL 18 والإصدارات الأحدث) يتضمن الإصدار الدلالي الكامل، ويظهر في مخرجات الدالةpgch_version()أو دالة Postgrespg_get_loaded_modules(). - إصدار الامتداد (المعرّف في ملف التحكم) يتضمن فقط الرقمين الرئيسي
والثانوي، ويظهر في الجدول
pg_catalog.pg_extension، وفي مخرجات الدالةpg_available_extension_versions()، وفي\dx pg_clickhouse.
v0.1.0 إلى v0.1.1، يفيد جميع قواعد البيانات التي حمّلت v0.1، ولا
تحتاج إلى تشغيل ALTER EXTENSION للاستفادة من الترقية.
أما الإصدار الذي يزيد الرقم الثانوي أو الرئيسي، فسيكون
مصحوبًا بسكربتات ترقية SQL، ويجب على جميع قواعد البيانات الحالية التي تحتوي على
الامتداد تشغيل ALTER EXTENSION pg_clickhouse UPDATE للاستفادة من
الترقية.
مرجع DDL في SQL
CREATE EXTENSION
WITH SCHEMA لتثبيته في مخطط محدد (يوصى به):
ALTER EXTENSION
-
بعد تثبيت إصدار جديد من pg_clickhouse، استخدم العبارة
UPDATE: -
استخدم
SET SCHEMAلنقل الامتداد إلى مخطط جديد:
DROP EXTENSION
CASCADE لحذفها أيضًا:
CREATE SERVER
driver: مشغّل اتصال ClickHouse المراد استخدامه، إما “binary” أو “http”. مطلوب.compression: ضغط البروتوكول الأصلي لمشغّل “binary”، ويكون إحدى القيم “none” أو “lz4” أو “zstd”. القيمة الافتراضية هي “lz4”. ويتجاهله مشغّل “http”.dbname: قاعدة بيانات ClickHouse التي ستُستخدم عند الاتصال. القيمة الافتراضية هي “default”.fetch_size: الحجم التقريبي للدفعة بالبايت في HTTP streaming. تُقسَّم الدفعات عند حدود الصفوف. القيمة الافتراضية هي50000000(50 MB). تؤدي القيمة0إلى تعطيل التدفق وتخزين الاستجابة الكاملة مؤقتًا في الذاكرة. ويمكن للجداول الأجنبية تجاوز هذه القيمة.host: اسم مضيف خادم ClickHouse. القيمة الافتراضية هي “localhost”;port: المنفذ المطلوب الاتصال به على خادم ClickHouse. تكون القيم الافتراضية كما يلي:- 9440 إذا كان
driverهو “binary” وكانhostمضيف ClickHouse Cloud - 9004 إذا كان
driverهو “binary” ولم يكنhostمضيف ClickHouse Cloud - 8443 إذا كان
driverهو “http” وكانhostمضيف ClickHouse Cloud - 8123 إذا كان
driverهو “http” ولم يكنhostمضيف ClickHouse Cloud
- 9440 إذا كان
min_tls_version: الحد الأدنى لإصدار بروتوكول TLS الذي يجب التفاوض عليه في الاتصالات التي تستخدم TLS. إحدى القيمTLSv1أوTLSv1.1أوTLSv1.2أوTLSv1.3. القيمة الافتراضية هي الحد الأدنى الذي تعتمده مكتبة TLS نفسها. وينطبق ذلك على كلا المشغّلين.secure: يحدّد استخدام TLS للاتصال. إحدى القيم التالية:auto(الافتراضي): استخدم TLS عندما يكونhostمضيف ClickHouse Cloud أو يكونportمنفذًا آمنًا؛ وإلا فاستخدم اتصالًا غير مشفّر.on(أوtrue/yes/1): استخدم TLS دائمًا. وتكون القيمة الافتراضية لـportهي 8443 (“http”) أو 9440 (“binary”).off(أوfalse/no/0): لا تستخدم TLS مطلقًا. وتكون القيمة الافتراضية لـportهي 8123 (“http”) أو 9000 (“binary”).
ALTER SERVER
DROP SERVER
CASCADE لكي
تُسقِط هذه التبعيات أيضًا:
CREATE USER MAPPING
taxi_srv:
user: اسم مستخدم ClickHouse. والقيمة الافتراضية هي “default”.password: كلمة مرور مستخدم ClickHouse.
ALTER USER MAPPING
DROP USER MAPPING
IMPORT FOREIGN SCHEMA
LIMIT TO لحصر الاستيراد في جداول محددة:
EXCEPT لاستثناء الجداول:
CREATE FOREIGN TABLE
database: اسم قاعدة البيانات البعيدة. تكون القيمة الافتراضية هي قاعدة البيانات المعرّفة للخادم الخارجي.fetch_size: الحجم التقريبي للدفعة بالبايت من أجل HTTP streaming. يتجاوز قيمةfetch_sizeعلى مستوى الخادم. القيمة الافتراضية هي50000000(50 MB). تؤدي القيمة0إلى تعطيل البث وتخزين الاستجابة الكاملة في الذاكرة المؤقتة.table_name: اسم الجدول البعيد. تكون القيمة الافتراضية هي الاسم المحدد للجدول الخارجي.engine: [محرك الجدول] المستخدم في جدول ClickHouse. بالنسبة إلىCollapsingMergeTree()وAggregatingMergeTree()، يطبّق pg_clickhouse المعلمات تلقائيًا على تعبيرات الدوال التي تُنفَّذ على الجدول.
-
column_name: اسم العمود على جهة ClickHouse، ويُستخدم بدلًا من اسم السمة في PostgreSQL عند إعادة توليد الاستعلامات و عمليات الإدراج. وهو مفيد لربط أسماء أعمدة PostgreSQL المكتوبة بأحرف صغيرة وغير الموضوعة بين علامتَي اقتباس بأعمدة ClickHouse الحساسة لحالة الأحرف، على سبيل المثال: -
AggregateFunction: اسم الدالة التجميعية المطبَّقة على عمود من [نوع AggregateFunction]. اربط نوع البيانات بنوع ClickHouse المُمرَّر إلى الدالة، وحدد اسم الدالة التجميعية عبر خيار العمود المناسب، وسيضيف pg_clickhouse تلقائيًاMergeإلى الدالة التجميعية التي تقيّم العمود. -
SimpleAggregateFunction: اسم الدالة التجميعية المطبَّقة على عمود من [نوع SimpleAggregateFunction]. اربط نوع البيانات بنوع ClickHouse المُمرَّر إلى الدالة، وحدد اسم الدالة التجميعية عبر خيار العمود المناسب.
ALTER FOREIGN TABLE
DROP FOREIGN TABLE
CASCADE لحذفها أيضًا:
مرجع SQL لـ DML
EXPLAIN
VERBOSE يؤدي إلى
إظهار استعلام ClickHouse “Remote SQL”:
SELECT
nodes ونربط بها بدلًا من الجدول البعيد:
node_id بدلًا من العمود المحلي، ثم الربط
بجدول البحث لاحقًا:
node_id إلى النظام البعيد، مما يقلّل
عدد الصفوف التي يجب سحبها مرة أخرى إلى Postgres من 1000 (كلّها)
إلى 8 فقط، صف واحد لكل عقدة.
PREPARE, EXECUTE, DEALLOCATE
{param:type}:
المعلمات:
INSERT
COPY
⚠️ قيود Batch API لم يوفّر pg_clickhouse بعد دعم واجهة insert الدُفعية الخاصة بـ PostgreSQL FDW. لذلك يستخدم COPY حاليًا عبارات INSERT من أجل إدراج السجلات. وسيُحسَّن ذلك في إصدار مستقبلي.
LOAD
SET
pg_clickhouse.session_settings
pg_clickhouse.session_settings لتحديد [إعدادات
ClickHouse] التي ستُطبَّق على الاستعلامات اللاحقة. مثال:
join_use_nulls 1, group_by_use_nulls 1, final 1. عيّنه إلى
سلسلة فارغة للعودة إلى إعدادات خادم ClickHouse.
date_time_output_format: يتطلبhttp driverأن تكون قيمته “iso”format_tsv_null_representation: يتطلبhttp driverالقيمة الافتراضيةoutput_format_tsv_crlf_end_of_lineيتطلبhttp driverالقيمة الافتراضية
pg_clickhouse.session_settings؛ إما باستخدام [التحميل المسبق للمكتبة المشتركة] أو
ببساطة باستخدام أحد الكائنات في الامتداد لضمان تحميله.
pg_clickhouse.pushdown_regex
pg_clickhouse.pushdown_regex في ما إذا كان pg_clickhouse
يقوم بتمرير دوال التعبيرات النمطية والعوامل إلى النظام البعيد. ويحدث ذلك افتراضيًا؛
اضبط هذه المعلمة على false لمنع تمريرها إلى النظام البعيد:
ALTER ROLE
SET في ALTER ROLE لإجراء التحميل المسبق لـ pg_clickhouse
و/أو SET معلماته لأدوار محددة:
RESET في ALTER ROLE لإعادة ضبط التحميل المسبق لـ pg_clickhouse
و/أو المعلمات:
التحميل المسبق
session_preload_libraries
أنواع البيانات
| ClickHouse | PostgreSQL | ملاحظات |
|---|---|---|
| Bool | boolean | |
| Date | date | |
| Date32 | date | |
| DateTime | timestamptz | |
| Decimal | numeric | |
| Float32 | real | |
| Float64 | double precision | |
| IPv4 | inet | |
| IPv6 | inet | |
| Int16 | smallint | |
| Int32 | integer | |
| Int64 | bigint | |
| Int8 | smallint | |
| JSON | jsonb, json | |
| String | text, bytea | |
| UInt16 | integer | |
| UInt32 | bigint | |
| UInt64 | bigint | ينتج عنه خطأ عند القيم > BIGINT max |
| UInt8 | smallint | |
| UUID | uuid |
BYTEA
SELECT الأخير:
مرجع الدوال والعوامل
الدوال
clickhouse_raw_query
host=localhost port=8123. معاملات الاتصال
المدعومة هي:
host: المضيف المراد الاتصال به؛ مطلوب.port: منفذ HTTP المراد الاتصال به؛ القيمة الافتراضية هي8123ما لم يكنhostهو مضيف ClickHouse Cloud، وفي هذه الحالة تكون القيمة الافتراضية8443dbname: اسم قاعدة البيانات المراد الاتصال بها.username: اسم المستخدم الذي سيتم الاتصال باسمه؛ القيمة الافتراضيةdefaultpassword: كلمة المرور المستخدمة للمصادقة؛ والقيمة الافتراضية هي عدم استخدام كلمة مرور
EXECUTE لهذه الدالة؛ لذا احرص على GRANT
صلاحية الوصول فقط للأدوار التي تحتاج فعليًا إلى تنفيذ استعلامات ClickHouse
مخصّصة، مثل دور Admin مخصّص في ClickHouse:
وهي مفيدة للاستعلامات التي لا تُرجع أي سجلات، لكن الاستعلامات التي تُرجع قيمًا
ستُعاد على هيئة قيمة نصية واحدة:
دوال Pushdown
pg_clickhouse بتمرير مجموعة فرعية من دوال PostgreSQL المضمّنة المستخدمة
في الشروط (البندين HAVING وWHERE). وتتوافق هذه المجموعة الفرعية مع
مكافئاتها في ClickHouse كما يلي:
abs: absfactorial: factorialmod(int2/int4/int8/numeric): modulopow&power(float8/numeric): powround: roundsin,cos,tan,atan,atan2,sinh,cosh,tanh,asinh,degrees,radians,pi: دوال الرياضيات في ClickHouse التي تحمل الاسم نفسه. لا يتم pushdown للدوالasinوacosوatanhوacosh: إذ يُصدر PG خطأً عند إدخال قيم خارج النطاق، بينما يعيد CH القيمةNaN.date_part:date_part('day'): toDayOfMonthdate_part('doy'): toDayOfYeardate_part('dow'): toDayOfWeekdate_part('year'): toYeardate_part('month'): toMonthdate_part('hour'): toHourdate_part('minute'): toMinutedate_part('second'): toSeconddate_part('quarter'): toQuarterdate_part('isoyear'): toISOYeardate_part('week'): toISOYeardate_part('epoch'): toISOYear
date_trunc:date_trunc('week'): toMondaydate_trunc('second'): toStartOfSeconddate_trunc('minute'): toStartOfMinutedate_trunc('hour'): toStartOfHourdate_trunc('day'): toStartOfDaydate_trunc('month'): toStartOfMonthdate_trunc('quarter'): toStartOfQuarterdate_trunc('year'): toStartOfYear
extract(field FROM source): نفس التعيينات كما فيdate_partdate(timestamp)&date(timestamptz): toDate (تُفكّك إلى الاسم المستعارdateفي CH)array_position: indexOfarray_cat: arrayConcatarray_append: arrayPushBackarray_prepend: arrayPushFrontarray_remove: arrayRemovearray_length&cardinality: lengtharray_to_string: arrayStringConcatstring_to_array: splitByStringsplit_part: splitByString + فهرسة المصفوفةtrim_array: arrayResizearray_fill: arrayWithConstantarray_reverse: arrayReversearray_shuffle: arrayShufflearray_sample: arrayRandomSamplearray_sort: arraySort / arrayReverseSortbtrim: trimBothltrim: ltrimrtrim: rtrimconcat_ws: concatWithSeparatorlower(text): lowerUTF8upper(text): upperUTF8substring(text, ...)&substr(text, ...): substringUTF8substring(bytea, ...)&substr(bytea, ...): substringlength(text): lengthUTF8length(bytea)&octet_length: lengthreverse(text): reverseUTF8reverse(bytea): reversestrpos: positionUTF8regexp_like: matchregexp_match: extractGroups إذا كان التعبير النمطي يحتوي على تعبيرات فرعية بين قوسين؛ وإلا extractAll ثم تُقتطع باستخدام arraySlice.regexp_replace: replaceRegexpOne أو replaceRegexpOne عند وجود العلامةgregexp_split_to_array: splitByRegexpmd5: MD5json_extract_path_text: صياغة العمود الفرعيjson_extract_path: toJSONString + صياغة العمود الفرعيjsonb_extract_path_text: صياغة العمود الفرعيjsonb_extract_path: toJSONString + صياغة العمود الفرعيbit_count(bytea): bitCountto_timestamp(float8): fromUnixTimestampto_char(timestamp[tz], fmt): formatDateTime عندما يكونfmtثابتًا نصيًا وكانت كل كلمة مفتاحية فيه لها مقابل مطابق في ClickHouse. راجع to_char() ضمن ملاحظات التوافق للاطلاع على الكلمات المفتاحية المدعومة. بخلاف ذلك، تُقيَّم الدالة محليًا في PostgreSQL.statement_timestamp,transaction_timestamp, &clock_timestamp: nowInBlock64 (nowInBlock64(9, $session_timezone))CURRENT_DATE: now و toDate (toDate(now($session_timezone)))now,CURRENT_TIMESTAMP, &LOCALTIMESTAMP: now64 (now64(9, $session_timezone))CURRENT_TIMESTAMP(n)&LOCALTIMESTAMP(n): now64 (now64(n, $session_timezone))CURRENT_DATABASE: تُمرَّر كقيمة من دالة PostgreSQL.CURRENT_SCHEMA: تُمرَّر كقيمة من دالة PostgreSQL.CURRENT_CATALOG: تُمرَّر كقيمة من دالة PostgreSQL.CURRENT_USER: تُمرَّر كقيمة من دالة PostgreSQL.USER: تُمرَّر كقيمة من دالة PostgreSQL.CURRENT_ROLE: تُمرَّر كقيمة من دالة PostgreSQL.SESSION_USER: تُمرَّر كقيمة من دالة PostgreSQL.
معاملات Pushdown
- شريحة Array (
arr[L:U]): arraySlice @>(تحتوي المصفوفة على): hasAll<@(المصفوفة محتواة في): hasAll&&(تداخل المصفوفات): hasAny~(مطابقة تعبير نمطي): match!~(عدم مطابقة تعبير نمطي): match~*(عدم مطابقة تعبير نمطي دون مراعاة حالة الأحرف): match!~*(عدم مطابقة تعبير نمطي دون مراعاة حالة الأحرف): match->>(استخراج عنصر من JSON/JSONB كنص): sub-column syntax->(استخراج من JSON/JSONB): toJSONString + sub-column syntax
الدوال المخصصة
pg_clickhouse دعم pushdown للاستعلامات الخارجية
لبعض دوال ClickHouse التي لا يوجد لها ما يكافئها في PostgreSQL. وإذا
تعذّر تطبيق pushdown على أيٍّ من هذه الدوال، فسيُرفع استثناء.
Pushdown الامتدادات
re2
re2match→ matchre2extract→ extractre2extractall→ extractAllre2regexpextract→ regexpExtractre2extractgroups→ extractGroupsre2replaceregexpone→ replaceRegexpOnere2replaceregexpall→ replaceRegexpAllre2countmatches→ countMatchesre2countmatchescaseinsensitive→ countMatchesCaseInsensitivere2multimatchany→ multiMatchAnyre2multimatchanyindex→ multiMatchAnyIndexre2multimatchallindices→ multiMatchAllIndices
intarray
idx→ indexOf
fuzzystrmatch
soundex: soundexlevenshtein(بوسيطتين): editDistanceUTF8
عمليات CAST ذات pushdown
CAST(x AS bigint) عند استخدام
أنواع بيانات متوافقة. أما مع الأنواع غير المتوافقة، فستفشل عملية الـ pushdown؛
فإذا كانت x في هذا المثال من نوع ClickHouse UInt64، فسيرفض ClickHouse
تحويل القيمة.
ولتنفيذ pushdown لعمليات CAST لأنواع البيانات غير المتوافقة، يوفّر pg_clickhouse
الدوال التالية. وهي تثير استثناءً في PostgreSQL إذا لم يُنفَّذ لها pushdown.
دوال التجميع التي تدعم pushdown
دوال التجميع المخصصة
pg_clickhouse، إمكانية pushdown للاستعلامات الخارجية لبعض دوال التجميع في ClickHouse التي لا يقابلها ما يعادلها في PostgreSQL. وإذا تعذر pushdown لأي من هذه الدوال، فسيُرفَع استثناء.
Pushdown دوال التجميع المرتبة حسب المجموعة
ORDER BY الخاصة بها على أنها arguments. على سبيل المثال، query PostgreSQL هذه:
DESC وNULLS FIRST في ORDER BY
غير مدعومتين، وستؤديان إلى ظهور خطأ.
percentile_cont(double): quantilequantile(double): quantilequantileExact(double): quantileExact
دوال النافذة ذات pushdown إلى ClickHouse
OVER (PARTITION BY ... ORDER BY ...)، بما في ذلك تحديدات الإطار حيثما ينطبق ذلك.
- row_number
- rank
- dense_rank
- ntile
- cume_dist
- percent_rank
- lead
- lag
- first_value
- last_value
- nth_value
min/max(مع العبارةOVER)
row_number, rank, dense_rank, ntile, cume_dist,
percent_rank) عبارة الإطار الخاصة بها عند تنفيذ pushdown إلى ClickHouse، لأن ClickHouse
يرفض تحديدات الإطار لهذه الدوال.
ملاحظات حول التوافق
التعبيرات النمطية
-
يدعم PostgreSQL [التعبيرات النمطية وفق POSIX] بينما يدعم ClickHouse
التعبيرات النمطية وفق RE2. انتبه إلى اختلافات السلوك: استخدم RE2
عندما يتولى ClickHouse تقييم التعبير النمطي (على سبيل المثال، في
عبارة
WHERE) واستخدم POSIX عندما يتولى Postgres تقييمه (على سبيل المثال، في عبارةSELECT). -
يقوم pg_clickhouse بتمرير [مُعدِّلات Postgres] إلى التعبير النمطي في ClickHouse عبر إضافتها في بدايته داخل
(?). على سبيل المثال:يصبح -
خيارات سطر الأوامر الوحيدة التي يدعمها كلاهما، والتي يمكن بالتالي استخدامها عند تقييمها من قِبل
ClickHouse، هي:
لا يدعم RE2 سوى هذه العلامات؛ لا تستخدم أيًا من [علامات Postgres] الأخرى.
الخيار يكافئ ملاحظات iiمطابقة غير حساسة لحالة الأحرف mm-sيطابق ^و$بداية/نهاية السطر، بالإضافة إلى بداية/نهاية النصnm-sالاسم المستعار في Postgres لـ mp-sلا تدع .و[^x]يطابقان\nssدع .و[^x]يطابقان\ntصياغة محكمة، يُتجاهل wmمطابقة عكسية جزئية تراعي محرف السطر الجديد -
يلخّص هذا الجدول تأثير العلامات المختلفة (وكذلك عدم استخدام أي علامة،
وهو ما يعادل
s) عند مطابقة الأسطر الجديدة ونهايات الأسطر. لاحظ أنه في Postgres، تمنعmوpفئات المحارف المنفية ([^xyz]) من مطابقة سطر جديد، بينما لا تفعل نظيراتها في ClickHouse ذلك. وبخلاف ذلك، فإن السلوكيات في ClickHouse وPostgres متماثلة:النمط المُطبَّق على a\nbPostgres ClickHouse هل هما متماثلان؟ a.bصحيح صحيح ✔︎ a[^x]bصحيح صحيح ✔︎ a$خطأ خطأ ✔︎ علامة s(?s)a.bصحيح صحيح ✔︎ (?s)a[^x]bصحيح صحيح ✔︎ (?s)a$خطأ خطأ ✔︎ علامة m(?m)a.bخطأ خطأ ✔︎ (?m)a[^x]bصحيح خطأ ✘ (?m)a$صحيح صحيح ✔︎ علامة p(?p)a.bخطأ خطأ ✔︎ (?p)a[^x]bصحيح خطأ ✘ (?p)a$خطأ خطأ ✔︎ علامة w(?w)a.bصحيح صحيح ✔ (?w)a[^x]bصحيح صحيح ✔ (?w)a$صحيح صحيح ✔ - أي خيارات أخرى تُمرَّر إلى دوال التعبيرات النمطية ستمنع تنفيذ الدالة على المصدر البعيد.
-
الاستثناء هو
regexp_replace()، إذ يدعم أيضًا الخيارg. وعندما يكونgمفعّلًا، يستخدم pg_clickhousereplaceRegexpAll()بدلًا منreplaceRegexpOne()ويزيل هذا الخيار قبل إضافة الخيارات الأخرى كبادئة. -
تدعم وسيطة الاستبدال في
regexp_replace()في Postgres الرمز\&للإشارة إلى المطابقة بالكامل، بينما يدعم ClickHouse الرمز\0للمطابقة بالكامل. احرص على استخدام\0عندما تُنفَّذ الدالة في ClickHouse. -
تعيد
regexp_matchفي Postgres القيمةNULLعند عدم وجود أي تطابقات، بينما تعيد التعبيرات التي يُدفَع تنفيذها إلى النظام البعيد مصفوفة فارغة. استخدمCOALESCE()لإرجاع مصفوفة فارغة بدلًا منNULLحتى تتمكن من مقارنة القيم المعادة بشكل متوافق. على سبيل المثال:
to_char()
to_char() الخاص بـ timestamp وtimestamp with time zone
إلى ClickHouse formatDateTime إلا عندما تكون وسيطة التنسيق
ثابتًا نصيًا غير NULL، ويكون لكل keyword في PostgreSQL
مكافئ مماثل تمامًا على مستوى البايت في ClickHouse. وإذا كان التنسيق ديناميكيًا
(أي ليس Const)، أو كان يحتوي على أي keyword أو modifier غير مدعوم، فإن
الاستدعاء يعود إلى التقييم المحلي في PostgreSQL — ولا تُجرى مطلقًا محاولة
لـ pushdown مع ترجمة جزئية، بحيث يظل الناتج متوافقًا مع PG.
أما صيغ to_char() ذات الوسيطتين المطبَّقة على numeric وinterval وأنواع
أخرى غير timestamp، فلا يُجرى لها pushdown مطلقًا؛ إذ إن ClickHouse formatDateTime لا
ينسّق إلا قيم التاريخ والوقت.
الرموز المترجمة
| PostgreSQL | ClickHouse | المعنى |
|---|---|---|
YYYY, yyyy | %Y | سنة من 4 أرقام |
YY, yy | %y | سنة من رقمين |
MM, mm | %m | شهر مُكمَّل بأصفار بادئة (01–12) |
DD, dd | %d | يوم من الشهر مُكمَّل بأصفار بادئة (01–31) |
DDD, ddd | %j | رقم اليوم في السنة مُكمَّل بأصفار بادئة (001–366) |
HH24, hh24 | %H | ساعة بنظام 24 ساعة مُكمَّلة بأصفار بادئة (00–23) |
HH, hh, HH12, hh12 | %I | ساعة بنظام 12 ساعة مُكمَّلة بأصفار بادئة (01–12) |
MI, mi | %i | دقيقة مُكمَّلة بأصفار بادئة (00–59) |
SS, ss | %S | ثانية مُكمَّلة بأصفار بادئة (00–59) |
Q, q | %Q | ربع السنة (1–4) |
Mon | %b | اسم شهر مختصر، مثل Oct |
Dy | %a | اسم يوم أسبوع مختصر، مثل Mon |
AM, PM | %p | مؤشر AM/PM، ويكون دائمًا بأحرف كبيرة |
النصوص المقتبسة والقيم الحرفية
"..." يُمرَّر كما هو حرفيًا، مع مضاعفة أي % حرفية
إلى %% لتحييد بادئة المحدِّد في ClickHouse. كذلك، فإن \" خارج علامات
الاقتباس يُمرَّر أيضًا باعتباره " حرفيًا. وداخل "..."، لا يُستخدم
backslash إلا لإلغاء المعنى الخاص لـ "؛ أما تسلسلات backslash الأخرى
فتُعامَل كنص حرفي.
David E. Wheeler