.NET Драйвер для Yandex Clickhouse. Этот драйвер реализует собственный протокол Clickhouse, бесстыдно вырванный из оригинальных источников Clickhouse. В некотором смысле это не соответствует правилам ADO.NET, однако это преднамеренно.
Erestath opecanaoneepo-ruyskki, sm. не так.
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 и понижены для этого 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: Добавлена поддержка типа Bool.
v.1.5.3: Исправленные ошибки, чтение пустых массивов.
v.1.5.2: Добавлена поддержка для типа Date32.
v.1.5.1: представил новый способ обработки типа Tuple . Теперь значения читаются как System.Tuple<> вместо System.Object[] . Это изменение сделало возможным чтение Array(Tuple(...)) печатал значения.
v.1.4.0: Фиксированный анализ запросов, когда значения избегаются.
v.1.3.1: Добавлена поддержка типа низкой картины. Расширенная поддержка десятичных видов.
v.1.2.6: добавлена (довольно ограниченная) поддержка часовых поясов.
Чтобы обернуть подключение к Clickhouse в туннель SSL/TLS, который вы должны включить, сначала находится на вашем сервере (настройка tcp_port_secure в config.xml) и добавить Encrypt=True к строке подключения (не забудьте изменять номер порта).
SSL/TLS не работал должным образом до 1.5.5 и привел к бесконечному ожиданию прибытия данных. Он был «исправлен» в версии 1.5.5-NO-Polling-on-TLS и полностью смягчен в 2.x+.
Если вы хотите, чтобы все запросы, изданные драйвером на сервер, добавьте Trace=True к строке подключения и настроили прослушитель трассировки .NET для категории ClickHouse.Ado .
Двигатель Clickhouse не поддерживает анализ нескольких запросов на IDbCommand.Execute* Roundtrip. Пожалуйста, разделите ваши запросы на отдельно выполненные команды.
Хотя вы можете подумать, что NextResult не будет использоваться из -за вышеупомянутого отсутствия многочисленной поддержки запросов, это совершенно неправильно! Вы всегда должны использовать NextResult в качестве протокола Clickhouse, а двигатель может и вернуть несколько наборов результатов за запрос, и иногда схемы результатов могут отличаться (определенно в отношении упорядочения поля, если запрос не указан его).
Если вы читаете документацию Clickhouse, она настоятельно рекомендует вам вставить записи оптом (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 draйvererd -yandex clickhouse. Otliчee ot o -fihygalnogogo jdbc Клиэнта эottoT -nraйver ne nawoTsephoTCOH -npoRHHouse htttp, ro -n. Провтокол (и -э -э -э -э -э -э -э -э -э -э -э -э -э -э -э -э -э -э -э -э -э -э -э -магистральный В некоторых случаях этот драйвер ведёт себя не так, как обычные ADO.NET драйверы, это сделано намеренно и связано со SpeShipikoй Clickhouse.
v.2.0.5: Podderжka Map Kolonok (Spasibo @jorgeparavicini). Переодволэян. Strokycoerynemya ygegnoriruюt reregystr simvolow (naзvaniй).
v.2.0.4: ИСПРАВАЛЕНАПАНАПОЛОМКА СОЕДИНЕЙНАПА
v.2.0.3: Doebanena poddrжkapodvыraжeniper SETTINGS wql komandaх INSERT .
v.2.0.2.1 и v.2.0.2.2: dobavlena цelh net461 и дл.
v.2.0.2: preshod na anasinхroannnыйvod /Вод, reraliзahina -vmeakogogo зy.data.common, vtom чysle dbproviderfactory. ДОБАНАНАПОДЕРА
v.1.5.6-no-polling-on-tls: бедкратирована имениннея 2,0,3.
v.1.5.5-no-polling-on-tls: "ИСПРАВЛЕН" БАГАЙСКОВЫЙ
v.1.5.5: Dobanena poddrжkalypa bool.
v.1.5.3: Ispravlena ohybka чtenipepy -ypystых mamascivowow.
v.1.5.2: Doebanena poddrжkan Date32.
v.1.5.1. ИНЕННАННАНА ВСЕЙНА/АПИСИСКИЙ КЛИЧЕСКИЙ КЛЮЧЕСКИЙ ДОХОД Tuple . System.Tuple<> System.Object[] . Эto-yзmeneeneepoзvolaetthatth kolonky- Array(Tuple(...)) , ranhe-nbыlo nvoзmoжno-з-зibok.
v.1.4.0: ИСПРАВНЕР РОБЕРА
v.1.3.1: Doebanena poddrжkalypa lowcardinality. Улюна, рэбота, децимальный.
v.1.2.6: doebanena ograoniчennannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannannepoderжka -wremennnhonnhon.
Чtobы tcp_port_secure и, зatem, obavietth Encrypt=True -strokucue -odienenipe (trakжe ne -ne -ne -nemer -nportaith
ДОВЕРСИО 1.5.5-НЕ-ПЛАНГИНГОНАННАЯ С ССС/ТЛС НОРМАЛОН НО РОБОТАЛАЛ И ПРИВОДИЛК. V 1.5.5-no-polling-on-tls эto bыlo "yespravleano", awersimaх 2. х+ polnosthe-ypranenono.
ESlioSephApy viDeThe kakie sql dpraйverposыlaet -serweru, Trace=True Трасиррокки Дл Кангории ClickHouse.Ado .
Двигский Клипкий дом в то IDbCommand.Execute* он вызывает, что -то Зaprocы nano raзbivatath na otdelnhe komandы.
NextResult ИСПОЛЕГАНЕ , ПРОТРЕСОЛЬТО , NextResult Один, и и. eSli -aproys nemeTeT явна -веду
ДОКУМЕРАЙШИИ ДЛЯ ВСЕГА
INSERT INTO some_table (col1, col2, col3) VALUES @bulk bulk IEnumerable Value IEnumerable . bulk IBulkInsertEnumerable ПРОТИВАЕТСЯ ВСЕЙТРИ Эto oobnopricopolchowavanik
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 ( ) ; Esli-ы yspralyli-gagagegali-reraliзovali kakuю-to-y-yчiчau, pohliouйsta, sdelaйt-запрос.
ESli-nvameTATOT-kakoй-toto-founkshyky-hli-nakoй-toto-toto-to-toto-toto-toto-toto-to-to-to-to-to-to