الانتقال إلى المحتوى الرئيسي
تتيح دالة الجدول remote الوصول إلى الخوادم البعيدة بشكل ديناميكي، أي من دون إنشاء جدول Distributed. وتعمل دالة الجدول remoteSecure بالطريقة نفسها التي تعمل بها remote ولكن عبر اتصال آمن. يمكن استخدام كلتا الدالتين في استعلامات SELECT وINSERT.

الصيغة

remote(addresses_expr, [db, table, user [, password], sharding_key])
remote(addresses_expr, [db.table, user [, password], sharding_key])
remote(named_collection[, option=value [,..]])
remoteSecure(addresses_expr, [db, table, user [, password], sharding_key])
remoteSecure(addresses_expr, [db.table, user [, password], sharding_key])
remoteSecure(named_collection[, option=value [,..]])

المعلمات

الوسيطةالوصف
addresses_exprعنوان خادم بعيد أو تعبير يُولِّد عدة عناوين لخوادم بعيدة. التنسيق: host أو host:port.

يمكن تحديد host على أنه اسم خادم، أو عنوان IPv4 أو عنوان IPv6. يجب تحديد عنوان IPv6 داخل [].

يشير port إلى منفذ TCP على الخادم البعيد. إذا لم يُحدَّد المنفذ، فسيتم استخدام tcp_port من ملف إعدادات الخادم لدالة الجدول remote (افتراضيًا 9000) وtcp_port_secure لدالة الجدول remoteSecure (افتراضيًا 9440).

بالنسبة إلى عناوين IPv6، يكون تحديد المنفذ إلزاميًا.

إذا تم تحديد المعلمة addresses_expr فقط، فسيتم استخدام system.one افتراضيًا لكل من db وtable.

النوع: String.
dbاسم قاعدة البيانات. النوع: String.
tableاسم الجدول. النوع: String.
userاسم المستخدم. إذا لم يُحدَّد، فستُستخدم القيمة default. النوع: String.
passwordكلمة مرور المستخدم. إذا لم تُحدَّد، فستُستخدم كلمة مرور فارغة. النوع: String.
sharding_keyمفتاح التقسيم الأفقي لدعم توزيع البيانات عبر العُقد. على سبيل المثال: insert into remote('127.0.0.1:9000,127.0.0.2', db, table, 'default', rand()). النوع: UInt32.
يمكن أيضًا تمرير الوسائط باستخدام المجموعات المسماة.

القيمة المُعادة

جدول موجود على خادم بعيد.

الاستخدام

نظرًا إلى أن دالتي الجداول remote وremoteSecure تعيدان إنشاء الاتصال مع كل طلب، يُنصح باستخدام جدول Distributed بدلًا من ذلك. كذلك، إذا كانت أسماء المضيفين محددة، فستُحلّ هذه الأسماء، ولن تُحتسب الأخطاء عند العمل مع عدة نسخ متماثلة. وعند معالجة عدد كبير من الاستعلامات، احرص دائمًا على إنشاء جدول Distributed مسبقًا، ولا تستخدم دالة الجدول remote. قد تكون دالة الجدول remote مفيدة في الحالات التالية:
  • ترحيل البيانات لمرة واحدة من نظام إلى آخر
  • الوصول إلى خادم محدد لمقارنة البيانات، واستكشاف الأخطاء وإصلاحها، والاختبار، أي لإجراء اتصالات عند الحاجة.
  • استعلامات بين عناقيد ClickHouse مختلفة لأغراض البحث.
  • الطلبات الموزعة غير المتكررة التي تُجرى يدويًا.
  • الطلبات الموزعة التي يُعاد فيها تحديد مجموعة الخوادم في كل مرة.

العناوين

example01-01-1
example01-01-1:9440
example01-01-1:9000
localhost
127.0.0.1
[::]:9440
[::]:9000
[2a02:6b8:0:1111::11]:9000
يمكن إدراج عدة عناوين مفصولة بفواصل. في هذه الحالة، سيستخدم ClickHouse المعالجة الموزعة ويرسل الاستعلام إلى جميع العناوين المحددة (مثل الشظايا التي تحتوي على بيانات مختلفة). مثال:
example01-01-1,example01-02-1

أمثلة

استعلام البيانات من خادم بعيد:

SELECT * FROM remote('127.0.0.1', db.remote_engine_table) LIMIT 3;
أو باستخدام المجموعات المُسمّاة:
CREATE NAMED COLLECTION creds AS
        host = '127.0.0.1',
        database = 'db';
SELECT * FROM remote(creds, table='remote_engine_table') LIMIT 3;

إدراج البيانات في جدول على خادم بعيد:

CREATE TABLE remote_table (name String, value UInt32) ENGINE=Memory;
INSERT INTO FUNCTION remote('127.0.0.1', currentDatabase(), 'remote_table') VALUES ('test', 42);
SELECT * FROM remote_table;

ترحيل الجداول من نظام إلى آخر:

يستخدم هذا المثال جدولًا واحدًا من مجموعة بيانات نموذجية. قاعدة البيانات هي imdb، والجدول هو actors.

على نظام ClickHouse المصدر (النظام الذي يستضيف البيانات حاليًا)

  • تحقّق من قاعدة البيانات المصدر واسم الجدول (imdb.actors)
    show databases
    
    show tables in imdb
    
  • احصل على عبارة CREATE TABLE من المصدر:
  SELECT create_table_query
  FROM system.tables
  WHERE database = 'imdb' AND table = 'actors'
الناتج
  CREATE TABLE imdb.actors (`id` UInt32,
                            `first_name` String,
                            `last_name` String,
                            `gender` FixedString(1))
                  ENGINE = MergeTree
                  ORDER BY (id, first_name, last_name, gender);

على نظام ClickHouse الهدف

  • أنشئ قاعدة البيانات الهدف:
    CREATE DATABASE imdb
    
  • باستخدام عبارة CREATE TABLE من المصدر، أنشئ الجدول في الوجهة:
    CREATE TABLE imdb.actors (`id` UInt32,
                              `first_name` String,
                              `last_name` String,
                              `gender` FixedString(1))
                    ENGINE = MergeTree
                    ORDER BY (id, first_name, last_name, gender);
    

بالعودة إلى عملية نشر المصدر

أدرِج البيانات في قاعدة البيانات الجديدة والجدول الجديد اللذين أُنشئا على النظام البعيد. ستحتاج إلى المضيف، والمنفذ، واسم المستخدم، وكلمة المرور، وقاعدة البيانات الوجهة، وجدول الوجهة.
INSERT INTO FUNCTION
remoteSecure('remote.clickhouse.cloud:9440', 'imdb.actors', 'USER', 'PASSWORD')
SELECT * from imdb.actors

المطابقة بالأنماط

تُستخدم الأنماط داخل { } لإنشاء مجموعة من الشظايا وتحديد النُسخ المتماثلة. وإذا وُجدت عدة أزواج من { }، فسيتم إنشاء حاصل الضرب الديكارتي للمجموعات المقابلة. أنواع الأنماط التالية مدعومة.
  • {a,b,c} - تمثل أيًّا من السلاسل البديلة a أو b أو c. يُستبدل النمط بـ a في عنوان الشظية الأولى، ويُستبدل بـ b في عنوان الشظية الثانية، وهكذا. على سبيل المثال، يُنشئ example0{1,2}-1 العنوانين example01-1 و example02-1.
  • {N..M} - نطاق من الأرقام. يُنشئ هذا النمط عناوين الشظايا بمؤشرات متزايدة من N إلى M (بما في ذلك M). على سبيل المثال، يُنشئ example0{1..2}-1 العنوانين example01-1 و example02-1.
  • {0n..0m} - نطاق من الأرقام مع أصفار بادئة. يحافظ هذا النمط على الأصفار البادئة في المؤشرات. على سبيل المثال، يُنشئ example{01..03}-1 العناوين example01-1 و example02-1 و example03-1.
  • {a|b} - أي عدد من المتغيرات المفصولة بالرمز |. يحدد هذا النمط النُسخ المتماثلة. على سبيل المثال، يُنشئ example01-{1|2} النُسختين المتماثلتين example01-1 و example01-2.
سيُرسل الاستعلام إلى أول نُسخة متماثلة سليمة. ومع ذلك، بالنسبة إلى remote، تُجرى المداورة على النُسخ المتماثلة وفق الترتيب المضبوط حاليًا في إعداد load_balancing. عدد العناوين المُنشأة مقيَّد بإعداد table_function_remote_max_addresses.
آخر تعديل في ٢٥ يونيو ٢٠٢٦