.NET Driver para Yandex Clickhouse. Este motorista implementa o protocolo de clickhouse nativo, arrancado descaradamente das fontes originais de clickhouse. De certa forma, ele não cumpre as regras do ADO.NET, no entanto, isso é intencional.
А щё п аииeir по п а а а а аesa, с. .
v.2.0.5: Suporte para colunas de mapa (graças a @jorgeparavicini). Suporte provisório para colunas JSON. Strings de conexão insensíveis ao caso.
v.2.0.4: A conexão corrigida se tornou inutilizável após qualquer erro recuperável.
v.2.0.3: Adicionado suporte para INSERT ... SETTINGS setting=value .
v.2.0.2.1 e v.2.0.2.2: Adicionado Net461 Target e K4OS.compression.lz4 Requisito para ele.
v.2.0.2: Mudou para o ASYNC IO, implementou System.data.common coisas como dbProviderFactory. Suporte adicionado para colunas IPv4 e IPv6.
v.1.5.6-não-polling-on-tls: Alterações de backport de 2.0.3.
V.1.5.5-não-polling-on-tls: Patchi um bug impedindo que as conexões SSL/TLS garantidas funcionassem corretamente.
v.1.5.5: Adicionado suporte ao tipo BOOL.
v.1.5.3: Corrigido erros lendo matrizes vazias.
v.1.5.2: Adicionado suporte para Date32 Type.
v.1.5.1: Introduziu uma nova maneira de lidar com o tipo Tuple de Clickhouse. Agora, os valores são lidos como System.Tuple<> em vez de System.Object[] . Essa mudança tornou a leitura possível da Array(Tuple(...)) valores digitados.
v.1.4.0: Corrigido a análise de consulta quando os valores são escapados.
v.1.3.1: Adicionado suporte para o tipo de baixa cardinalidade. Suporte estendido para tipos decimais.
V.1.2.6: Adicionado (bastante limitado) Suporte para fusos time.
Para embrulhar sua conexão de clickhouse no túnel SSL/TLS que você deve ativar está no seu servidor primeiro ( tcp_port_secure Configuração no config.xml) e adicione Encrypt=True à sequência de conexão (não se esqueça de alterar o número da porta).
O SSL/TLS não estava funcionando corretamente antes de 1.5.5 e levou a uma espera infinita para que os dados cheguem. Foi 'remendado' na versão 1.5.5-não-polling-on-tls e completamente mitigado em 2.x+.
Se você quiser ver todas as consultas emitidas pelo driver ao servidor, adicione Trace=True à sequência de conexão e configure um ouvinte .NET Trace para a categoria ClickHouse.Ado .
O mecanismo Clickhouse não suporta a análise de várias consultas por IDbCommand.Execute* ida e volta. Por favor, divida suas consultas em comandos executados separadamente.
Embora você possa pensar que NextResult não seria usado devido à falta mencionada de suporte múltiplo de consulta que está completamente errado! Você sempre deve usar NextResult como protocolo e motor de clickhouse pode e retornará vários resultados por consulta e, em algum momento, os esquemas de resultados podem diferir (definitivamente em relação à ordem de campo se a consulta não especificar explicitamente).
Se você ler a documentação do Clickhouse, ele o aconselha a inserir registros a granel (mais de 1000 por solicitação). Este driver pode fazer inserções em massa. Para fazer isso, você precisa usar a sintaxe de inserção especial:
INSERT INTO some_table (col1, col2, col3) VALUES @bulk E depois disso, você deve adicionar parâmetros denominado em bulk com seu Value fundível a IEnumerable que cada item também deve ser IEnumerable . Listas vazias não são permitidas. Como alternativa, você pode passar na implementação IBulkInsertEnumerable como valor de um bulk para acelerar o processamento e usar menos memória dentro do driver Clickhouse. Isso pode ser usado de forma conviniente com a seguinte sintaxe:
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 ( ) ; Se você corrigiu alguns bugs ou escreveu uma adição útil a esse driver, puxe os solicite de volta aqui.
Se você precisar de alguma funcionalidade ou encontrar um bug, mas não conseguir implementá -lo/corrigir, registre um ticket aqui, no Github.
.NET драйй длHл Yandex Clickhouse. В отличие от официального JDBC клиента этот драйвер не является обёрткой поверх ClickHouse HTTP, а реализует нативный протокол. Прото deve (и ччаgl го рчасасаitivamente го нччасч нчло нчасасасасасаitivamente ччлллллл нллллллл ns излл нлллл landл зх ил нлл нлth зх ил ылы нth da. В некоторых случаях этот драйвер ведёт себя не так, как обычные ADO.NET драйверы, это сделано намеренно и связано со CLICHHOUSE.
v.2.0.5: поеержа Map коïcial (саио @jorgeparavicini). Предварит Soustлнная поеержbol JSON кол sentido. Сррfia соинения иинори grary о ииitivamente).
v.2.0.4: исраglлна поnter
v.2.0.3: доааgl но одержжа подыражения SETTINGS в sql коандах INSERT .
v.2.0.2.1 и V.2.0.2.2: доааglе цÉ ц ц цц461 иh нё с с с ц ц и4 и461.
v.2.0.2: Переход на асинхронный ввод/вывод, реализация всякого из System.Data.Common, в том числе DbProviderFactory. Доба bragl подеержа апо IPv4 e IPv6.
V.1.5.6-não-polling-on-tls: эээ п э эээ э ээ ээ э э э ээ эo-з зз ээ э ээ-polling-on-tls: ээ з ээ ээ ээ ээ ээ э э э э э э эо-polling-on з 2.0.3.
v.1.5.5-não-polling-on-tls: "исраgl" б б п поооони abalta.
v.1.5.5: доааgl нододержжа тапа Bool.
v.1.5.3: ирраUвлна шшибка ччения п псых маасitivamente.
v.1.5.2: доааgl нододержа date32.
v.1.5.1. З ззеё 12 ч ччччч зч зччч иччч ич зч зч зч зч зч зч зч зч зч зч зч Tuple . Perde System.Tuple<> System.Object[] . Эээ Array(Tuple(...))
v.1.4.0: ирраgl н рзззззо sentido з зр зрр ср чченияи< с с з илрччи sentido з з з ил чиfiaщ з ззщимщимимщимitivamente.
v.1.3.1: доаgl нонодержжа тиапа LowCardinality. Decimal тоо т т т т т т т т т т т с с сo.
v.1.2.6: доааgl на ораниччнная подержжа вемемнных зо.
Чтобы завернуть протокол кликхауса в SSL/TLS тунель надо, во-первых, включить SSL на сервере (настройка tcp_port_secure в config.xml), и, затем, добавить Encrypt=True в строку соединения (также не забыть сменить используемый номер порта).
Д в в 1.5.5-não-polling-on-tls SSL/tls нормално н н а ноан land и иses. 1.5.5-não-polling-on-tls ээо ыыы "ирраnterно", а в в иих 2.х+ по corpo
Если хочется видеть какие SQL драйвер посылает серверу, то в строку соединения надо добавить Trace=True и включить слушатель траnceritivamente ClickHouse.Ado .
Джижж clickhouse н н н н нм нр nchhouse н нм nch о о nchhhous нее нррабатыы неео IDbCommand.Execute* Ззроы ны но но itante рзииата н н ееыные команы.
С с з с ыш ыш ыш ыш с с с ыш ышышnder п пышышышазаныы можÉI поакататьс ччч NextResult нж нжж, нэ ээ сэ с сж нж нж нж нж нж нж нж нж нж нж пжж пчж пчж пчз пчз вчззчччччvia, чч ччч пзз пззз вчазазатзччччvia. NextResult озззатеiliar , поtrtrззззен sentido, поооок п пззззз sentido, ' один запрос, и, хуже того, схемы этих наборов могут различаться (по крайней мере может быть перепутан порядок полей, зиззапbol н и и зз зро нрр нрр нр нррззазанания ио и и ир land и п з з ир land и и и и land и и и land и и и land и и и land и и и land и и и land и и и land и и и land и и и land и и и land uma ик и иро land и и з land uma ио и ззо De и нррзазаésis
В документации ClickHouse указано, что вставлять данные лучше пачками 100+ записей. Дэ ээого предссотрен сециаferir
INSERT INTO some_table (col1, col2, col3) VALUES @bulk Для этой команды надо задать параметр bulk со значением Value приводимым к IEnumerable , каждый из элементов которого, в свою очередь, ponto до ыыыыыыыы то IEnumerable ns. Кроме того, в качестве значения параметра bulk передать объект реализующий IBulkInsertEnumerable - это уменьшит использование памяти и процÉ,00 вт ponto драйй й clickhouse. Ээо пн 12 прроо sentido п пр прозз sentido:
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 ( ) ; И и и landnti и и landesa и и landntл и и landnti и и landntлзззз land и land ззз landлззззз landлзззззз landлзз изззз land тю тч тч тю тю ию ию ию ию июз ию ию тю тю тю тю тю, п mantel, се с те тжж пжж land с с с э land ээ э сз land с с с сей с эжзз land.
Если вам не хватает какой-то функции или вы нашли баг, который не можете исправить, напишите тикет здесь, на GitHub.