Conductor .NET para Yandex Clickhouse. Este controlador implementa el protocolo nativo de Clickhouse, destrozada descaradamente de las fuentes originales de Clickhouse. De alguna manera, no cumple con las reglas ADO.NET, sin embargo, esto es intencional.
А ещё есть оисание по-руси, см. ниже.
V.2.0.5: Soporte para columnas de mapas (gracias a @jorgeparavicini). Soporte provisional para columnas JSON. Cadenas de conexión insensibles a la caja.
v.2.0.4: la conexión fija se volvía inutilizable después de cualquier error recuperable.
V.2.0.3: Soporte agregado para INSERT ... SETTINGS setting=value .
V.2.0.2.1 y V.2.0.2.2: Se agregó el objetivo NET461 y se rebajó la calificación de K4OS.COMPression.LZ4.
V.2.0.2: se cambió a Async IO, implementó System.Data.common cosas como DBProviderFactory. Se agregó soporte para las columnas IPv4 e IPv6.
V.1.5.6-No poling-on-TLS: cambios retrovisionados de 2.0.3.
v.1.5.5-no poling-on-TLS: parcheado un error que evita que las conexiones aseguradas SSL/TLS funcionen correctamente.
V.1.5.5: Soporte agregado para el tipo de bool.
V.1.5.3: Errores fijos que leen matrices vacías.
V.1.5.2: Soporte agregado para el tipo de fecha32.
V.1.5.1: Introdujo una nueva forma de manejar el tipo Tuple de Clickhouse. Ahora los valores se leen como System.Tuple<> en lugar de System.Object[] . Ese cambio hizo posible la lectura de Array(Tuple(...)) valores escrita.
V.1.4.0: Consulta fija analizado cuando se escapan los valores.
V.1.3.1: Soporte agregado para el tipo de baja cardinalidad. Soporte extendido para tipos decimales.
V.1.2.6: Soporte agregado (bastante limitado) para zonas horarias.
Para envolver su conexión Clickhouse en el túnel SSL/TLS que debe habilitar está en su servidor primero (configuración tcp_port_secure en config.xml) y agregue Encrypt=True a la cadena de conexión (no olvide cambiar el número de puerto).
SSL/TLS no funcionaba correctamente antes de 1.5.5 y condujo a una espera infinita a que llegaran los datos. Fue 'parcheado' en la versión 1.5.5-no poling-on-TLS y completamente mitigado en 2.x+.
Si desea ver todas las consultas emitidas por el controlador al servidor Agregar Trace=True a la cadena de conexión y configurar un LEADER DE .NET TRACE para la categoría ClickHouse.Ado .
Clickhouse Engine no admite analizar múltiples consultas por IDbCommand.Execute* Roundtrip. Divida sus consultas en comandos ejecutados por separado.
¡Aunque puede pensar que NextResult no se utilizaría debido a la falta de soporte de consultas múltiple antes mencionada que está completamente incorrecta! Siempre debe usar NextResult como el protocolo de Clickhouse y el motor puede y devolverá múltiples resultados por consulta y, en algún momento, los esquemas de resultados pueden diferir (definitivamente con respecto al ordenamiento de campo si la consulta no lo especifica explícitamente).
Si lee la documentación de Clickhouse, le aconseja insertar registros a granel (más de 1000 por solicitud). Este controlador puede hacer insertos a granel. Para hacerlo, debe usar la sintaxis de inserción especial:
INSERT INTO some_table (col1, col2, col3) VALUES @bulk Y después de eso, debe agregar parametado llamado a bulk con su Value fundible a IEnumerable , cada elemento de él también debe ser IEnumerable . No se permiten listas vacías. Alternativamente, puede pasar la implementación IBulkInsertEnumerable como valor de bulk para acelerar el procesamiento y usar menos memoria dentro del controlador de clickhouse. Esto puede usarse con convencional con la siguiente sintaxis:
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 ha solucionado algunos errores o ha escrito una adición útil a este controlador, por favor, haga que solicite aquí.
Si necesita alguna funcionalidad o encuentra un error pero no puede implementarlo/solucionarlo, presente un ticket aquí, en GitHub.
.Net драйвер длebre Yandex Clickhouse. В отичие оope фициального jdbc клиента этот драйвер не явлejo sinte оёр vel Протокол (и части его реализации) нагло er. В нEly сецификой Clickhouse.
v.2.0.5: поддержка mapa колонок (сасибо @jorgeparavicini). ПредваритеculoлнаES подержка json колонок. Ст veng a
V.2.0.4: иравлена полоijo сединени entender после юбой, даже восстановиejoй шибки.
v.2.0.3: добавлена подержка подвыражения SETTINGS в sql командах INSERT .
V.2.0.2.1 и v.2.0.2.2: добавлена цель net461 и длicio н снижено требование в версии k4os.compression.lz4.
V.2.0.2: переход на аинхроннный вод/вывод, реализацациuno всого из System.data.common, в том числе DBProviderFactory. Добавлена подержка типов ipv4 e ipv6.
V.1.5.6-no poling-on-tls: экпорello
v.1.5.5-no poling-on-tls: "исп intermalor
v.1.5.5: добавлена подержка типа bool.
v.1.5.3: иравлена шибка чтения псс масивовemente.
V.1.5.2: добавлена подержка типа fecha32.
V.1.5.1. Иззенён форomine чтения/записи clickhouse типа Tuple . Теперь значения читаю System.Object[] как System.Tuple<> Это изенение позволет читать колонки типа Array(Tuple(...)) , что ранше ыы не воззо-з-зибибtim.
v.1.4.0: иравлен разбор запросов с значениimakeomine сдержащиеа экранированнivar
V.1.3.1: добавлена подержка типа baja tardía. Улчшена рабо regalo
v.1.2.6: добавлена ораниченаа поonc.
Чтобы завернуть протокол кликхауса в ssl/tls tcp_port_secure » и, затеíf, добавить Encrypt=True в стрiscer
До версии 1.5.5-no-poling-on-tls ssl/tls норяitud В 1.5.5-no poling-on-tls это ыло "исправлено", а версиenoх 2.х+ полно lugar.
Если хочетículos видеть какие sql драйвер посылает серверу, т в строку соениiencia надо Trace=True трасировки дiencia категории ClickHouse.Ado .
Движок clickhouse н мет обрабатыва IDbCommand.Execute* Запросы надо разбивать на отельные комigur
В св resistзи с NextResult Исполз NextResult один запрос, и, хже тоо, хееéfiler э regalo если запрос не иеет echнво указаниís порESдка).
В доку,000ентации clickhouse указан a, что вст result momento Дòbre этого предусст interse
INSERT INTO some_table (col1, col2, col3) VALUES @bulk bulk Value IEnumerable т же должен ыть IEnumerable . bulk т, в качестве значениís IBulkInsertEnumerable ,000tim процесора внутри драйвера 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 ( ) ; Если вы исправили баг или реализовал neg
Если ваienen н razón