.NET Driver for Yandex Clickhouse. يقوم برنامج التشغيل هذا بتنفيذ بروتوكول Clickhouse الأصلي ، والذي تمزق بلا خجل من مصادر Clickhouse الأصلية. في بعض النواحي ، لا يتوافق مع قواعد ADO.NET ، لكن هذا أمر مقصود.
а ес оивمس по-or р рс ، с. ниж.
v.2.0.5: دعم لأعمدة الخريطة (بفضل @JorgeParavicini). الدعم المؤقت لأعمدة JSON. سلاسل اتصال غير حساسة للحالة.
v.2.0.4: أصبح الاتصال الثابت غير قابل للاستخدام بعد أي خطأ قابل للاسترداد.
v.2.0.3: دعم إضافة INSERT ... SETTINGS setting=value .
v.2.0.2.1 و v.2.0.2.2: تمت إضافة Net461 Target and Downed K4os.compression.lz4 متطلبات لذلك.
v.2.0.2: تم التبديل إلى Async IO ، System.Data.common مثل dbproviderfactory. دعم إضافي لأعمدة IPv4 و IPv6.
v.1.5.6-no-polling-on-TLS: تغييرات خلفية من 2.0.3.
v.1.5.5-no-polling-on-TLS: تم تصحيح خلل يمنع الاتصالات المضمونة SSL/TLS من العمل بشكل صحيح.
v.1.5.5: إضافة الدعم لنوع منطقي.
v.1.5.3: الأخطاء الثابتة قراءة المصفوفات الفارغة.
v.1.5.2: إضافة الدعم لنوع Date32.
v.1.5.1: تم تقديم طريقة جديدة للتعامل مع نوع Tuple من Clickhouse. الآن تتم قراءة القيم على أنها System.Tuple<> بدلاً من System.Object[] . جعل هذا التغيير قراءة ممكنة Array(Tuple(...)) القيم المكتوبة.
v.1.4.0: تحليل الاستعلام الثابت عند هروب القيم.
v.1.3.1: إضافة الدعم لنوع المنخفضة. الدعم الممتد للأنواع العشرية.
v.1.2.6: دعم (محدود للغاية) للمناطق الزمنية.
من أجل لف اتصال Clickhouse الخاص بك في SSL/TLS Tunnel ، يجب أن يكون تمكينه على الخادم الخاص بك أولاً (إعداد tcp_port_secure في config.xml) وإضافة Encrypt=True إلى سلسلة الاتصال (لا تنسى تغيير رقم المنفذ).
لم يكن SSL/TLS يعمل بشكل صحيح قبل 1.5.5 وأدى إلى انتظار وصول البيانات. كان "مصححة" في إصدار 1.5.5-NO-ON-ON-TLS وتخفيفه تمامًا في 2.x+.
إذا كنت ترغب في رؤية جميع الاستعلامات المنبعثة من قبل برنامج التشغيل إلى الخادم ، أضف Trace=True إلى سلسلة الاتصال وإعداد مستمع .NET Trace للفئة ClickHouse.Ado .
لا يدعم Clickhouse Engine تحليل استفسارات متعددة لكل IDbCommand.Execute* Roundtrip. يرجى تقسيم استفساراتك إلى أوامر تنفيذها بشكل منفصل.
على الرغم من أنك قد تعتقد أن NextResult لن يتم استخدامه بسبب الافتقار المذكور أعلاه إلى دعم استعلام متعددة ، وهو أمر خاطئ تمامًا! يجب عليك دائمًا استخدام NextResult كبروتوكول Clickhouse والمحرك ، وسوف يعيد نتائج متعددة لكل استعلام وقد تختلف مخططات النتائج في وقت ما (فيما يتعلق بالتأكيد بطلب الحقل إذا لم يحددها الاستعلام بشكل صريح).
إذا قرأت Clickhouse Documentation ، فإنه يتقدم لك بقوة لإدراج السجلات بكميات كبيرة (1000+ لكل طلب). يمكن لهذا السائق القيام بإدراج بالجملة. للقيام بذلك ، عليك استخدام بناء جملة إدراج خاص:
INSERT INTO some_table (col1, col2, col3) VALUES @bulk وبعد ذلك ، يجب عليك إضافة bulk بالجملة مع Value القابلة IEnumerable إلى كل عنصر من العناصر يجب أن تكون IEnumerable أيضًا. لا يُسمح بالقوائم الفارغة. بدلاً من ذلك ، يمكنك تمرير تطبيق IBulkInsertEnumerable كقيمة bulk لتسريع المعالجة واستخدام ذاكرة أقل داخل برنامج تشغيل Clickhouse. يمكن استخدام هذا بشكل مقنع مع بناء الجملة التالي:
CREATE TABLE test ( date Date , time DateTime, str String, int UInt16) ENGINE = MergeTree( date ,( time ,str, int ), 8192 ) class MyPersistableObject : IEnumerable {
public string MyStringField ;
public DateTime MyDateField ;
public int MyIntField ;
//Count and order of returns must match column order in SQL INSERT
public IEnumerator GetEnumerator ( ) {
yield return MyDateField ;
yield return MyDateField ;
yield return MyStringField ;
yield return ( ushort ) MyIntField ;
}
}
//... somewhere elsewhere ...
var list = new List < MyPersistableObject > ( ) ;
// fill the list to insert
list . Add ( new MyPersistableObject ( ) ) ;
var command = connection . CreateCommand ( ) ;
command . CommandText = "INSERT INTO test (date,time,str,int) VALUES @bulk" ;
command . Parameters . Add ( new ClickHouseParameter {
ParameterName = "bulk" ,
Value = list
} ) ;
command . ExecuteNonQuery ( ) ; إذا قمت بإصلاح بعض الأخطاء أو كتبت بعض الإضافة المفيدة إلى هذا السائق ، فيرجى سحب طلبها مرة أخرى هنا.
إذا كنت بحاجة إلى بعض الوظائف أو وجدت خطأ ولكن غير قادر على تنفيذ/إصلاحه ، فيرجى تقديم تذكرة هنا ، على Github.
.NET драйвер дubust yandex clickhouse. о оичие от оцициалمس JDBC киента этот драйвер не нввввется оёрткой поверх clickhouse httP ، протокورك (и части ео реализии) наго ыраны з и иодников саоогогого. в некоторых с схчEхчER э эртот драйвمر сецификой clickhouse.
v.2.0.5: подеержка map колоноتيجة (саасибо jorgeparavicini). предварителнаа подеержка json колоноتيجة. сроки соединения иноририт регистр сивволов (названий).
v.2.0.4: исравлена полололка соединеمس после юйой ، даже всетсافقة шибибиби.
v.2.0.3: добавлена подержка подыражеمر SETTINGS в sql конандах INSERT .
v.2.0.2.1 и v.2.0.2.2: добавлена цел net461 и л н н снижеمس трование к в ереиواء k4os.compression.lz4.
v.2.0.2: переход н инхроныйный вв/ывод ، реизация вского з system.data.common ، в тч чис. добавлена подеержка типов ipv4 و ipv6.
v.1.5.6-no-polling-on-tls: экпортированы зеения з 2.0.3.
v.1.5.5-no-polling-on-tls: "исравлен" с с оовисаниии н с синенеمس и иолих ssl/tls.
v.1.5.5: добавлена подеержка типа bool.
v.1.5.3: исравлена шибка чтения пссыхссمنى.
v.1.5.2: добавлена подеержка типа Date32.
v.1.5.1. з еенён формат чтения/записи clickhouse типа Tuple . теперь значения читаю· как System.Tuple<> System.Object[] . э з з зенение позволет читать колонки типа Array(Tuple(...)) ، ч р ршибш ыо н в жigh ж з з ш ш ш ш шшшшоок.
v.1.4.0: исравлен разоор ззров с значеними содержащиимими экранирبعض сиввоыы.
v.1.3.1: добавлена подержка тиа lowcardinality. учшена раота с типи عشر.
v.1.2.6: добавлена ораничеمس подеержка врененных зон.
ч о завернمس протокол кикхаусс в ssl/tls тнел надо ، в в е р в в в юч юч юч юч н н н tcp_port_secure с с с с н н н н н н в в. и ، ззтт ، добавить Encrypt=True с с с соединеمس (также нззыыыыكلف)
до врсии 1.5.5-no-polling-on-tls ssl/tls нoruаално н н раоотал и приводил к завививиايت. в 1.5.5-no-polling-on-tls э э ы ы о "исравлено" ، а врсихх 2.х+ полностюю усссср.
ееси хочете видеть какие sql драйвер поветааа серве Trace=True трасировки д л категории ClickHouse.Ado .
движок clickhouse н н м орабатывать несافقة sql sql запров за оин ызовызыз IDbCommand.Execute* . запросы надо р ивать н о о ыные коаныы.
в сзи с ышесеказаны может показатьс ч ч ч ч ч ч NextResult н н н н н н اير ، иеполование NextResult оззателно ، посколко протокол и движок clickhouse оин запрос ، и ، х того ، хххы эих наоров оогт разичатьс (по крайй м ж ж о п п о о о п п п п о п п п п п п п п п п п пжжжететжжетالم. еси запрос н н иеет ввного указания порддк).
в окуентации clickhouse указано ، ч в всттяя سبق أن ланые лчше пачкаии 100+ запией. д л э э предсотреمس
INSERT INTO some_table (col1, col2, col3) VALUES @bulk д л э э коаныы надо задать параметр bulk со значением приводиыы к IEnumerable Value тоже дожен ыыть IEnumerable . кро тоо ، в качестве значеمس параметра bulk передать о оект раизий b з з з з з з з з з з з з з з IBulkInsertEnumerable з ззззз з з ззззз з змз ззз ззз змз змзммззм процесора внтри драйвера clickhouse. э уообно при иололованиواء таого синтаксиса:
CREATE TABLE test ( date Date , time DateTime, str String, int UInt16) ENGINE = MergeTree( date ,( time ,str, int ), 8192 ) class MyPersistableObject : IEnumerable {
public string MyStringField ;
public DateTime MyDateField ;
public int MyIntField ;
//Количество и порядок return должны соответствовать количеству и порядку полей в SQL INSERT
public IEnumerator GetEnumerator ( ) {
yield return MyDateField ;
yield return MyDateField ;
yield return MyStringField ;
yield return ( ushort ) MyIntField ;
}
}
//... где-то ещё ...
var list = new List < MyPersistableObject > ( ) ;
// заполнение списка вставляемых объектов
list . Add ( new MyPersistableObject ( ) ) ;
var command = connection . CreateCommand ( ) ;
command . CommandText = "INSERT INTO test (date,time,str,int) VALUES @bulk" ;
command . Parameters . Add ( new ClickHouseParameter {
ParameterName = "bulk" ,
Value = list
} ) ;
command . ExecuteNonQuery ( ) ; ееси ы иравилили баг ии рзизовали какю-т чич ، пожалййий ، селайте request в ээозитبعض.
ееси вне хватает какой-т фнкци или ы н нии баг ، кторый н н ж м н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н.