.NET驱动程序Yandex Clickhouse。该驱动程序实施本机Clickhouse协议,无耻地从原始的Clickhouse来源中撕下来。在某些方面,它不符合ADO.NET规则,但是这是故意的。
。光。
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目标并降低了k4os.compression.lz4的要求。
v.2.0.2:切换到异步IO,实现的system.data.common诸如dbproviderFactory之类的东西。添加了对IPv4和IPv6列的支持。
v.1.5.6-no-polling-in-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:引入了处理Clickhouse Tuple类型的新方法。现在,值读为System.Tuple<>而不是System.Object[] 。这种变化使得读取Array(Tuple(...))键入值的读数可能。
v.1.4.0:固定查询解析时,当值逃脱时。
v.1.3.1:添加了对Lowcardinational类型的支持。对小数类型的扩展支持。
v.1.2.6:添加(非常有限)对时区的支持。
为了将您应该启用的SSL/TLS隧道中的ClickHouse连接包装在服务器上(config.xml中的tcp_port_secure设置),然后添加Encrypt=True连接字符串(不要忘记更改端口号)。
SSL/TLS在1.5.5之前无法正常工作,导致无限等待数据到达。它在1.5.5-no-polling-in-tls版本中被“修补”,并在2.x+中完全缓解。
如果您想查看驱动程序发出的所有查询服务器添加到连接字符串的Trace=True ,并为类别ClickHouse.Ado设置.NET跟踪侦听器。
Clickhouse引擎不支持在IDbCommand.Execute*往返上分析多个查询。请将您的查询分开执行命令。
尽管您可能会认为由于上述缺乏多个完全错误的查询支持,因此不会使用NextResult !您必须始终将NextResult用作Clickhouse协议,并且引擎可能会并且将返回每个查询的多个结果集,并且有时结果模式可能会有所不同(对于字段排序,是否没有明确指定它)。
如果您阅读了ClickHouse文档,它强烈建议您批量插入记录(每个请求1000+)。该驾驶员可以进行批量插入。为此,您必须使用特殊插入语法:
INSERT INTO some_table (col1, col2, col3) VALUES @bulk之后,您必须添加带有可铸Value参数命名bulk ,可铸造为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和Yandex clickhouse。 ~~。 протокол(极)(части启)。 ~液μчхххххй电讯□ёρ别组,疱疹, chindscloushhouse。
v.2.0.5:подержка映射wistemparavicini @jorgeparavicini)。 предварител进龄stum,。
v.2.0.4:极函
v.2.0.3:добавленапод归氮SETTINGS INSERT 。
v.2.0.2.1极v.2.0.2.2:добавленацlisth461 et461疏助仪
v.2.0.2:перереходнаааакронооныйВод//Выš/都,存在, добавленаподержμатиповIPv4和ipv6。
v.1.5.6-no-polling-on-tls:бэкпортиро-thouth-з。
v.1.5.5-no-polling-on-tls:“”函数。
v.1.5.5:добавленаподержμатипаbool。
v.1.5.3:函件。
v.1.5.2:добавлена为
v.1.5.1。极是/ззччччhouse Tuple System.Object[] System.Tuple<> э期极Öз执函将讯Array(Tuple(...))
v.1.4.40:极°ÖTOMITIS:函。
v.1.3.1:добавленапод使low latcardinality。生,十进制。
v.1.2.6:都
ч tcp_port_secure ыы。极Encrypt=True зз。
доверсии1.5.5-no-polling-on-tls ssl/tls ssl/tls。 1.5.5-no-polling-on-tlsэ期эd了“极
umlipххх Trace=True ClickHouse.Ado 。
都IDbCommand.Execute* clickhouse。 запросы冲。
NextResult极NextResult nextresultomibliblinmouthtome,时间极,极,х,хR,хR,хR /ыыыыыыыыыыыы。 e limumum。
线Clickhouse clickhouseуз郎,чтовставлятьдано聚LIS。都8bimoundibimountimuct
INSERT INTO some_table (col1, col2, col3) VALUES @bulk Value IEnumerable讯bulk IEnumerable 。 bulk IBulkInsertEnumerable μ。LICKHOUSE。 э期Y日
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光电|ÖSIS
uеdam。