.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。