> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8c05c8a2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> توثيق لعبارة CHECK TABLE

# عبارة CHECK TABLE

يُستخدم الاستعلام `CHECK TABLE` في ClickHouse لإجراء فحص تحقّق لجدول معيّن أو لأقسامه. وهو يضمن سلامة البيانات من خلال التحقّق من المجاميع الاختبارية وبُنى البيانات الداخلية الأخرى.

وعلى وجه الخصوص، يقارن أحجام الملفات الفعلية بالقيم المتوقعة المخزّنة على الخادم. وإذا لم تتطابق أحجام الملفات مع القيم المخزّنة، فهذا يعني أن البيانات تالفة. وقد يحدث ذلك، على سبيل المثال، بسبب تعطل النظام أثناء تنفيذ الاستعلام.

<Warning>
  قد يقرأ الاستعلام `CHECK TABLE` جميع البيانات الموجودة في الجدول ويشغل بعض الموارد، مما يجعله مرتفع الاستهلاك للموارد.
  ضع في اعتبارك التأثير المحتمل على الأداء واستهلاك الموارد قبل تنفيذ هذا الاستعلام.
  لن يؤدي هذا الاستعلام إلى تحسين أداء النظام، ويجب ألا تنفذه إذا لم تكن متأكدًا مما تفعله.
</Warning>

<div id="syntax">
  ## الصيغة
</div>

الصيغة الأساسية للاستعلام كما يلي:

```sql theme={null}
CHECK TABLE table_name [PARTITION partition_expression | PART part_name] [FORMAT format] [SETTINGS check_query_single_value_result = (0|1) [, other_settings]]
```

* `table_name`: يحدّد اسم الجدول الذي تريد التحقق منه.
* `partition_expression`: (اختياري) إذا كنت تريد التحقق من قسم محدد من الجدول، يمكنك استخدام هذا التعبير لتحديد القسم.
* `part_name`: (اختياري) إذا كنت تريد التحقق من جزء محدد في الجدول، يمكنك إضافة قيمة حرفية نصية لتحديد اسم الجزء.
* `FORMAT format`: (اختياري) يتيح لك تحديد format الإخراج للنتيجة.
* `SETTINGS`: (اختياري) يتيح لك إضافة إعدادات إضافية.
  * (اختياري): [check\_query\_single\_value\_result](/ar/reference/settings/session-settings#check_query_single_value_result): يتحكم هذا الإعداد في ما إذا كان الإخراج مفصلًا (`0`) أو مُلخّصًا (`1`).
  * يمكن أيضًا تطبيق إعدادات أخرى. إذا لم تكن بحاجة إلى ترتيب حتمي للنتائج، يمكنك تعيين max\_threads إلى قيمة أكبر من واحد لتسريع الاستعلام.

تعتمد استجابة الاستعلام على قيمة الإعداد `check_query_single_value_result`.
في حال كانت قيمة `check_query_single_value_result = 1`، تتم إعادة العمود `result` فقط مع صف واحد. وتكون القيمة داخل هذا الصف `1` إذا نجح فحص السلامة، و`0` إذا كانت البيانات تالفة.

عند استخدام `check_query_single_value_result = 0`، يعيد الاستعلام الأعمدة التالية:

* `part_path`: يشير إلى المسار إلى جزء البيانات أو اسم الملف.
  * `is_passed`: يعيد 1 إذا نجح الفحص لهذا الجزء، وإلا 0.
  * `message`: أي رسائل إضافية مرتبطة بالفحص، مثل رسائل الخطأ أو النجاح.

يدعم الاستعلام `CHECK TABLE` محركات الجداول التالية:

* [Log](/ar/reference/engines/table-engines/log-family/log)
* [TinyLog](/ar/reference/engines/table-engines/log-family/tinylog)
* [StripeLog](/ar/reference/engines/table-engines/log-family/stripelog)
* [MergeTree family](/ar/reference/engines/table-engines/mergetree-family/mergetree)

يؤدي تنفيذ هذا الاستعلام على جداول تستخدم محركات جداول أخرى إلى ظهور الاستثناء `NOT_IMPLEMENTED`.

لا توفّر المحركات من عائلة `*Log` استعادة تلقائية للبيانات عند الفشل. استخدم الاستعلام `CHECK TABLE` لاكتشاف فقدان البيانات في الوقت المناسب.

<div id="examples">
  ## أمثلة
</div>

يعرض استعلام `CHECK TABLE`، بشكل افتراضي، حالة التحقق العامة للجدول:

```sql title="Query" theme={null}
CHECK TABLE test_table;
```

```text title="Response" theme={null}
┌─result─┐
│      1 │
└────────┘
```

إذا أردت الاطلاع على حالة الفحص لكل جزء بيانات على حدة، يمكنك استخدام الإعداد `check_query_single_value_result`.

وللتحقق من قسم محدد من الجدول، يمكنك استخدام الكلمة المفتاحية `PARTITION`.

```sql title="Query" theme={null}
CHECK TABLE t0 PARTITION ID '201003'
FORMAT PrettyCompactMonoBlock
SETTINGS check_query_single_value_result = 0
```

```text title="Response" theme={null}
┌─part_path────┬─is_passed─┬─message─┐
│ 201003_7_7_0 │         1 │         │
│ 201003_3_3_0 │         1 │         │
└──────────────┴───────────┴─────────┘
```

وبالمثل، يمكنك فحص جزء معيّن من الجدول باستخدام الكلمة المفتاحية `PART`.

```sql title="Query" theme={null}
CHECK TABLE t0 PART '201003_7_7_0'
FORMAT PrettyCompactMonoBlock
SETTINGS check_query_single_value_result = 0
```

```text title="Response" theme={null}
┌─part_path────┬─is_passed─┬─message─┐
│ 201003_7_7_0 │         1 │         │
└──────────────┴───────────┴─────────┘
```

لاحظ أنه عندما لا يكون الجزء موجودًا، يُرجع الاستعلام خطأً:

```sql title="Query" theme={null}
CHECK TABLE t0 PART '201003_111_222_0'
```

```text title="Response" theme={null}
DB::Exception: No such data part '201003_111_222_0' to check in table 'default.t0'. (NO_SUCH_DATA_PART)
```

<div id="receiving-a-corrupted-result">
  ### تلقّي نتيجة 'Corrupted'
</div>

<Warning>
  إخلاء مسؤولية: الإجراء الموضّح هنا، بما في ذلك التلاعب اليدوي بالملفات أو حذفها مباشرةً من دليل البيانات، مخصّص فقط للبيئات التجريبية أو الخاصة بالتطوير. **لا** تحاول تنفيذ ذلك على خادم في بيئة إنتاج، إذ قد يؤدي إلى فقدان البيانات أو عواقب أخرى غير مقصودة.
</Warning>

احذف ملف checksum الحالي:

```bash theme={null}
rm /var/lib/clickhouse-server/data/default/t0/201003_3_3_0/checksums.txt
```

```sql title="Query" theme={null}
CHECK TABLE t0 PARTITION ID '201003'
FORMAT PrettyCompactMonoBlock
SETTINGS check_query_single_value_result = 0
```

```text title="Response" theme={null}
┌─part_path────┬─is_passed─┬─message──────────────────────────────────┐
│ 201003_7_7_0 │         1 │                                          │
│ 201003_3_3_0 │         1 │ Checksums recounted and written to disk. │
└──────────────┴───────────┴──────────────────────────────────────────┘
```

إذا كان الملف checksums.txt مفقودًا، فيمكن استعادته. سيُعاد حسابه وكتابته أثناء تنفيذ الأمر `CHECK TABLE` للقسم المحدد، وسيظل يُبلَّغ عن الحالة على أنها 'is\_passed = 1'.

يمكنك التحقق من جميع جداول `(Replicated)MergeTree` الموجودة دفعةً واحدة باستخدام الاستعلام `CHECK ALL TABLES`.

```sql theme={null}
CHECK ALL TABLES
FORMAT PrettyCompactMonoBlock
SETTINGS check_query_single_value_result = 0
```

```text theme={null}
┌─database─┬─table────┬─part_path───┬─is_passed─┬─message─┐
│ default  │ t2       │ all_1_95_3  │         1 │         │
│ db1      │ table_01 │ all_39_39_0 │         1 │         │
│ default  │ t1       │ all_39_39_0 │         1 │         │
│ db1      │ t1       │ all_39_39_0 │         1 │         │
│ db1      │ table_01 │ all_1_6_1   │         1 │         │
│ default  │ t1       │ all_1_6_1   │         1 │         │
│ db1      │ t1       │ all_1_6_1   │         1 │         │
│ db1      │ table_01 │ all_7_38_2  │         1 │         │
│ db1      │ t1       │ all_7_38_2  │         1 │         │
│ default  │ t1       │ all_7_38_2  │         1 │         │
└──────────┴──────────┴─────────────┴───────────┴─────────┘
```

<div id="if-the-data-is-corrupted">
  ## إذا كانت البيانات تالفة
</div>

إذا كان الجدول تالفًا، يمكنك نسخ البيانات غير التالفة إلى جدول آخر. للقيام بذلك:

1. أنشئ جدولًا جديدًا له البنية نفسها للجدول التالف. للقيام بذلك، نفّذ الاستعلام `CREATE TABLE <new_table_name> AS <damaged_table_name>`.
2. اضبط قيمة `max_threads` على 1 لمعالجة الاستعلام التالي باستخدام خيط تنفيذ واحد. للقيام بذلك، شغّل الاستعلام `SET max_threads = 1`.
3. نفّذ الاستعلام `INSERT INTO <new_table_name> SELECT * FROM <damaged_table_name>`. ينسخ هذا الطلب البيانات غير التالفة من الجدول التالف إلى جدول آخر. لن تُنسخ إلا البيانات التي تسبق الجزء التالف.
4. أعد تشغيل `clickhouse-client` لإعادة ضبط قيمة `max_threads`.
