الاتصال
conn الخاص بـ ClickHouse قد تم إنشاؤه وهو متاح.
التنفيذ
Exec. وهذا مفيد لعبارات DDL والعبارات البسيطة. ولا ينبغي استخدامها لعمليات الإدراج الكبيرة أو للتكرار على نتائج الاستعلامات.
Context إلى الاستعلام. ويمكن استخدام ذلك لتمرير إعدادات محددة على مستوى الاستعلام — راجع استخدام Context.
الإدراج على دفعات
Send(). وتبقى الدفعات في الذاكرة إلى أن يُنفَّذ Send.
يُوصى باستدعاء Close على الدفعة لتجنّب تسرّب الاتصالات. ويمكن القيام بذلك باستخدام الكلمة المحجوزة defer بعد تجهيز الدفعة. وسيؤدي ذلك إلى تنظيف الاتصال إذا لم يُستدعَ Send مطلقًا. لاحظ أن هذا سيؤدي إلى ظهور 0 من عمليات إدراج الصفوف في سجل الاستعلامات إذا لم يتم إلحاق أي صفوف.
الأعمدة المؤقتة
الاستعلام عن الصفوف
QueryRow، أو الحصول على مؤشر للتكرار عبر مجموعة النتائج باستخدام Query. وبينما تتيح الأولى تمرير وجهة تُسلسَل البيانات إليها، تتطلب الثانية استدعاء Scan لكل صف.
SELECT — وبشكل افتراضي، سيُستخدم ترتيب تعريف الأعمدة عند استخدام SELECT * كما هو موضح أعلاه.
وعلى غرار الإدراج، تتطلب طريقة Scan أن تكون المتغيرات الهدف من نوع مناسب. والهدف هنا أيضًا هو توفير المرونة، مع تحويل الأنواع حيثما أمكن، ما دام ذلك لا يؤدي إلى فقدان في الدقة. على سبيل المثال، يوضح المثال أعلاه قراءة عمود UUID إلى متغير string. للحصول على قائمة كاملة بأنواع Go المدعومة لكل نوع عمود، راجع تحويلات الأنواع.
أخيرًا، لاحظ إمكانية تمرير Context إلى الطريقتين Query وQueryRow. ويمكن استخدام ذلك لإعدادات على مستوى الاستعلام — راجع استخدام Context لمزيد من التفاصيل.
الإدراج غير المتزامن
الإدراج بصيغة الأعمدة
استخدام structs
Select مع serialize
Scan struct
ScanStruct تحويل صف واحد من استعلام إلى struct.
إلحاق struct
AppendStruct إلحاق struct بـ دفعة موجودة وتفسيرها على أنها صف كامل. ويتطلب ذلك أن تتطابق أعمدة struct مع الجدول من حيث الاسم والنوع. وبينما يجب أن يكون لكل الأعمدة حقل مكافئ في struct، قد لا يكون لبعض حقول struct عمود مكافئ. وسيتم تجاهل هذه الحقول ببساطة.
ربط المعلمات
Exec وQuery وQueryRow. وكما هو موضح في المثال أدناه، يُدعَم ذلك باستخدام المعلمات المُسمّاة والمرقّمة والموضعية. ونورد أمثلة على ذلك أدناه.
حالات خاصة
[ ]، فيجب استخدام ArraySet.
إذا كانت المجموعات/tuples مطلوبة، ومحاطةً بـ ( )، على سبيل المثال لاستخدامها مع عوامل التشغيل IN، فيمكنك استخدام GroupSet. ويكون ذلك مفيدًا بشكل خاص عندما تكون هناك حاجة إلى مجموعات متعددة، كما هو موضح في المثال أدناه.
أخيرًا، تتطلب حقول DateTime64 تحديد precision لضمان عرض المُعاملات بالشكل المناسب. لكن مستوى precision لهذا الحقل غير معروف لدى العميل، لذا يجب على المستخدم توفيره. ولتسهيل ذلك، نوفّر المُعامل DateNamed.
استخدام السياق
context.Background()، يمكنك استخدام هذه الإمكانية لتمرير الإعدادات والمهل الزمنية وإلغاء الاستعلامات.
يتيح تمرير سياق أُنشئ باستخدام withDeadline فرض حدود على وقت تنفيذ الاستعلامات. لاحظ أن هذا وقتٌ مطلق، وأن انتهاء المهلة لن يؤدي إلا إلى تحرير الاتصال وإرسال إشارة إلغاء إلى ClickHouse. ويمكن استخدام WithCancel بدلًا من ذلك لإلغاء استعلام صراحةً.
تتيح الأداتان المساعدتان clickhouse.WithQueryID و clickhouse.WithQuotaKey تحديد معرّف استعلام ومفتاح حصة. ويمكن أن تكون معرّفات الاستعلامات مفيدة لتتبّع الاستعلامات في السجلات ولأغراض الإلغاء. كما يمكن استخدام مفتاح الحصة لفرض حدود على استخدام ClickHouse استنادًا إلى قيمة مفتاح فريدة — راجع إدارة الحصص لمزيد من التفاصيل.
يمكنك أيضًا استخدام السياق لضمان تطبيق إعداد معيّن على استعلام محدد فقط، بدلًا من تطبيقه على الاتصال بالكامل، كما هو موضح في إعدادات الاتصال.
أخيرًا، يمكنك التحكم في حجم المخزن المؤقت للكتل عبر clickhouse.WithBlockSize. يتجاوز هذا الإعدادَ على مستوى الاتصال BlockBufferSize، ويتحكم في الحد الأقصى لعدد الكتل التي تُفك شيفرتها ويُحتفظ بها في الذاكرة في أي وقت. وقد تعني القيم الأكبر قدرًا أكبر من التوازي على حساب الذاكرة.
تظهر أمثلة على ما سبق أدناه.
معلومات Progress وProfile وLog
المسح الديناميكي
reflection في Go لإنشاء مثيلات وقت التشغيل لمتغيرات ذات أنواع صحيحة، بحيث يمكن تمريرها إلى Scan.
الجداول الخارجية
ext.NewTable قبل تمريره عبر السياق.
OpenTelemetry
span ضمن البروتوكول الثنائي الأصلي. استخدم clickhouse.WithSpan لإرفاق span باستعلام عبر الـ context.
قيد في نقل HTTPرغم أن ClickHouse server يقبل ترويسات HTTP القياسية
traceparent / tracestate، فإن ناقل HTTP في clickhouse-go لا يرسلها حاليًا، لذا لا يكون لـ WithSpan أي تأثير عبر HTTP. وكحل بديل، يمكنك ضبط الترويسة يدويًا عبر HttpHeaders في خيارات الاتصال.