Driver .NET pour Yandex Clickhouse. Ce conducteur met en œuvre le protocole Native Clickhouse, arraché sans vergogne des sources d'origine Clickhouse. À certains égards, il ne respecte pas les règles ADO.NET, mais cela est intentionnel.
А ещё е Ce. ниже.
V.2.0.5: Prise en charge des colonnes de carte (merci à @jorgeparavicini). Support provisoire pour les colonnes JSON. Chaînes de connexion insensibles à cas.
V.2.0.4: La connexion fixe devenant inutilisable après toute erreur récupérable.
V.2.0.3: Ajout de la prise en charge de INSERT ... SETTINGS setting=value .
V.2.0.2.1 et V.2.0.2.2: Ajout de la cible NET461 et des exigences K4OS..Compression.lz4 rétrogradées.
V.2.0.2: Passée à Async Io, implémentée System.Data.Common Stuff comme DBProviderFactory. Ajout de la prise en charge des colonnes IPv4 et IPv6.
V.1.5.6-no-polleling-on-TLS: modifications recouvertes de 2.0.3.
V.1.5.5-no-polleling-on-TLS: Poot un bogue empêchant les connexions sécurisées SSL / TLS de fonctionner correctement.
V.1.5.5: Ajout de la prise en charge du type BOOL.
V.1.5.3: Correction des erreurs lisant les tableaux vides.
V.1.5.2: Ajout de la prise en charge du type Date32.
V.1.5.1: a introduit une nouvelle façon de gérer le type Tuple de Clickhouse. Les valeurs sont maintenant lues comme System.Tuple<> au lieu de System.Object[] . Ce changement a rendu la lecture possible de valeurs typées Array(Tuple(...)) .
V.1.4.0: analyse de requête fixe lorsque les valeurs sont échappées.
V.1.3.1: Ajout de la prise en charge du type à faible cardine. Support prolongé pour les types décimaux.
V.1.2.6: Prise en charge (assez limitée) des fuseaux horaires.
Afin d'envelopper votre connexion Clickhouse dans le tunnel SSL / TLS, vous devez activer le paramètre de votre serveur ( tcp_port_secure dans le config.xml) et ajouter Encrypt=True à la chaîne de connexion (n'oubliez pas de modifier le numéro de port).
SSL / TLS ne fonctionnait pas correctement avant 1.5.5 et a conduit à une attente infinie pour que les données arrivent. Il a été «corrigé» dans la version 1.5.5-no-polleling-sur-TLS et complètement atténué en 2.x +.
Si vous souhaitez voir toutes les requêtes émises par le pilote sur le serveur, ajoutez Trace=True à la chaîne de connexion et configurez un écouteur de trace .NET pour la catégorie ClickHouse.Ado .
Clickhouse Engine ne prend pas en charge l'analyse de plusieurs requêtes par IDbCommand.Execute* aller-retour. Veuillez diviser vos requêtes en commandes exécutées séparément.
Bien que vous puissiez penser que NextResult ne serait pas utilisé en raison du manque susmentionné de support de requête multiple qui est complètement faux! Vous devez toujours utiliser NextResult car le protocole Clickhouse et le moteur May et renverra plusieurs résultats de résultats par requête et parfois des schémas de résultats peuvent différer (définitivement en ce qui concerne la commande sur le terrain si la requête ne le spécifie pas explicitement).
Si vous lisez la documentation Clickhouse, il vous conseille fortement d'insérer des enregistrements en vrac (1000+ par demande). Ce pilote peut faire des inserts en vrac. Pour ce faire, vous devez utiliser une syntaxe d'insertion spéciale:
INSERT INTO some_table (col1, col2, col3) VALUES @bulk Et après cela, vous devez ajouter paramètres nommé bulk avec sa Value coulable pour IEnumerable IEnumerable Les listes vides ne sont pas autorisées. Alternativement, vous pouvez transmettre une implémentation IBulkInsertEnumerable comme valeur de bulk pour accélérer le traitement et utiliser moins de mémoire à l'intérieur du pilote Clickhouse. Cela peut être utilisé de manière convaincante avec la syntaxe suivante:
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 ( ) ; Si vous avez corrigé des bogues ou écrit un ajout utile à ce pilote, veuillez les retirer ici.
Si vous avez besoin de fonctionnalités ou si vous avez trouvé un bogue mais incapable de l'implémenter / le corriger, veuillez déposer un billet ici, sur GitHub.
.NET драйвер для yandex Clickhouse. В отличие от официального jdbc клиента этоlen драйвер не являе°ется оeux Протокол (и части ео реализаци) нагло Выдраны из исходников самого Clickhouse. В некоторых слччаях этот драйвер Ведёт себя не так, как обычные Ado.net драйверы, это сделано AS сецификой Clickhouse.
V.2.0.5: подержка map колонок (саси compris @jorgeParavicini). Предвар. Строки соединения игнорирюют реистр символов (названий).
V.2.0.4: исавравлена démar
V.2.0.3 SETTINGS добавлена подержка INSERT
V.2.0.2.1 и V.2.0.2.2: добавлена цель Net461 и для неё снижено требование Версeve K4OS.Compression.lz4.
V.2.0.2: переход на асинхронный Ввод / Вывод, раллззация Всякого из System.Data.Common, В то числе dbproviderfactory. Добавлена п’t
V.1.5.6-no-polleling-on-tls: ээкаортированы ззенения из 2.0.3.
v.1.5.5-no-polleling-on-tls: "ис démar deвлен" баг с повисанияousse на соединенdent
V.1.5.5: добавлена подержка типа bool.
V.1.5.3: ис démarâss.
V.1.5.2: добавлена подержка типа Date32.
V.1.5.1. Зззенён формат чтения / зааdue Clickhouse Tuple . Теécu значения читаются как System.Tuple<> Вместо исолзземого System.Object[] . Это ззенение позВоляет читать колонки типA Array(Tuple(...)) , что раншше ышы не Воззжно ззззшшш.
V.1.4.0: исавравлен рзбор заES’t.
V.1.3.1: добавлена п’t. Улчшена работа с типаousse en décimal.
V.1.2.6: добавлена ограниченная поддержка Временных зон.
Чтобы завер tcp_port_secure и, затем, добавить Encrypt=True В строк соединения (также не забыть сенить и ое лемый ноыеер оо).
До Версиe 1.5.5-noving-on-tls ssl / tls нормально не работал и приводиlen к зависанияousse. В 1.5.5-no-polleling-on-tls это ыыло "исравлено", а В Версих 2.х + полностюю устранено.
Trace=True хочется видеть какие sql драйвер посылает серверу, то В строк соединениbli трассировки для категории ClickHouse.Ado .
Движок Clickhouse не умет обрабатывать несколькк IDbCommand.Execute* . ЗаES’t.
В связи с Вышесказаныы может показаться что NextResult не нжен, но эо совершеенно не так. Исолзование NextResult обязательно , посколькк протокол и движок Clickhouse мет икоаmineтооорррататьанееоооо абораращать ASкоольо наоораращатьASкыхыхоольо набораращатьASк ныхеоооо абораращатьASкыхыхыхоольо набораtinve один заES’t, и, хже того, ххемы этих наборов могтт различаться (п’tррайней мере п’t п’t. если зааES’t
В докуентации househouse указано, что вставлять данные лчше пачками 100+ зааасей. Для ээого прve
INSERT INTO some_table (col1, col2, col3) VALUES @bulk Для ээой команды надо задать парамететoire bulk со значением Value приводимыы к IEnumerable , кажж з элеousse тоже должен ыть IEnumerable . Кроме того, В качестве значения параметра bulk передать оъект реализющющ IBulkInsertEnumerable процесора Внутри драйвера Clickhouse. Это удобно при исолзованdent
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 ( ) ; Еслèe Вы исрвравили баг или реализовали какю-то фичч, пожалййста, сделайте Demande de traction В этот рййззеий.
Еслèe Вам не хватает какой-то фнкции ° ы вы нашли баг, который не ыжете етететеравить, наcin.