. NET Driver สำหรับ 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: เปลี่ยนเป็น async io, นำไปใช้ System.data.Common เช่น DBProviderFactory เพิ่มการสนับสนุนสำหรับคอลัมน์ IPv4 และ IPv6
v.1.5.6-no-polling-on-TLS: การเปลี่ยนแปลง backported จาก 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: เพิ่มการสนับสนุนสำหรับประเภทวันที่ 32
V.1.5.1: แนะนำวิธีใหม่ในการจัดการประเภท Tuple ของ Clickhouse ตอนนี้ค่าถูกอ่านเป็น System.Tuple<> แทนที่จะเป็น System.Object[] การเปลี่ยนแปลงนั้นทำให้การอ่านค่า Array(Tuple(...)) เป็นไปได้
v.1.4.0: การแยกการสืบค้นแบบสอบถามเมื่อมีการหลบหนี
V.1.3.1: เพิ่มการสนับสนุนสำหรับประเภท lowcardinality การสนับสนุนเพิ่มเติมสำหรับประเภททศนิยม
V.1.2.6: เพิ่ม (ค่อนข้าง จำกัด ) สำหรับเขตเวลา
ในการปิดการเชื่อมต่อ Clickhouse ของคุณใน Tunnel 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 Trace Listener สำหรับหมวดหมู่ ClickHouse.Ado
Clickhouse Engine ไม่รองรับการแยกวิเคราะห์หลายคำสอบถามต่อ IDbCommand.Execute* RoundTrip โปรดแบ่งคำถามของคุณออกเป็นคำสั่งที่ดำเนินการแยกต่างหาก
แม้ว่าคุณอาจคิดว่า NextResult จะไม่ถูกนำมาใช้เนื่องจากการขาดการสนับสนุนแบบสอบถามหลายครั้งดังกล่าวข้างต้นนั้นผิดอย่างสมบูรณ์! คุณ ต้องใช้ NextResult เป็นโปรโตคอล Clickhouse และเครื่องยนต์ อาจและจะ ส่งคืนชุดผลลัพธ์หลายชุดต่อการสืบค้นและบางครั้งสคีมาผลลัพธ์อาจแตกต่างกัน (แน่นอนเกี่ยวกับการสั่งซื้อภาคสนามหากแบบสอบถามไม่ได้ระบุอย่างชัดเจน)
หากคุณอ่านเอกสาร Clickhouse มันจะแนะนำให้คุณแทรกบันทึกเป็นกลุ่ม (1,000+ ต่อคำขอ) ไดรเวอร์นี้สามารถทำเม็ดมีดจำนวนมาก ในการทำเช่นนั้นคุณต้องใช้ไวยากรณ์แทรกพิเศษ:
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 драйвердя yandex clickhouse отличиеотофициалного Jdbc клиентаэтотрайверневлетсяоёртойововерх протокол (ичастиегореализации) нагловыраныизисходникогмого Clickhouse втотрайвервеётсебянетак, какоычныеnet net райверы, сецификой Clickhouse
V.2.0.5: подержкаแผนที่колонок (сасибо @jorgeparavicini) предварителнаяодержка Json колонок строкисоединенияигноририрютрегистрсимволов (названий)
V.2.0.4: исправленаоломасоединенияослеойой, дажевосстановимойошибки
V.2.0.3: добавленаодержкаодражения SETTINGS sql командах INSERT
V.2.0.2.1 และ V.2.0.2.2: добавленацел net461 иянеёениженотребованиекверอาจตา K4os.compression.lz4
V.2.0.2: переходнаасинхронныйвод/вовод, реализациявсตรงค่าของระบบ добавленаодержкатипов 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: добавленаодержкатипаบูล
V.1.5.3: исправленаошибкачтениสาธารณะпстыхмассивов
V.1.5.2: добавленаодержкатипаวันที่ 32
V.1.5.1 изменёнорматчтения/заииси Clickhouse типа Tuple System.Tuple<> System.Object[] Array(Tuple(...)) , чтораншеонеззз
V.1.4.0: исправленразорзапросовсзначениямисодержащимиэкранироваmanмеимвоы
V.1.3.1: добавленаодержкатипа lowcardinality уенаработастипамиทศนิยม
V.1.2.6: добавленаограниченнаяодержкавременныхон
чтоыавернутьротоколкликхаусав Ssl/tls тнелнадо tcp_port_secure во-первых и, затем, добавить Encrypt=True (такженезаытьрта)
доверсии 1.5.5-no-polling-on-tls ssl/tls нормалнонеоталириводилависанияธ. 1.5.5-no-polling-on-tls этоо"о "исправлено", аверсиสาธารณะ2.х+ полностюстраненaw
еслихочетсявидетькакие sql драйверосыаетсерверу, товстрокуинения Trace=True трассировкиякатегории ClickHouse.Ado
движок Clickhouse умеетобрабатыватьнесколко IDbCommand.Execute* запросынадоразиватьнаотделныеоманы
связисвышесказанымможетоказатьсячто NextResult ненжен, ปุ๋ย исполование NextResult обязателно , посколкуротоколивижокhouseможетиетозврคล่องตัว оинзапрос,, хетого,, хемыэтихнаборовุก.ттразичатье (поорайнейейетеgle еслизапроснеиметвногоказанияорядка)
вокументации Clickhouse указано, чтовставлятьтьннныееачками 100+ записей д PL
INSERT INTO some_table (col1, col2, col3) VALUES @bulk bulk Value IEnumerable тожеоженть IEnumerable крометого, качествезначенияараметра bulk กลุ่มпередатьоъектреализийสาธารณะ IBulkInsertEnumerable процессоравнутрирайвера 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 ( ) ; есливыисправилиагилиреализоваликакакю-тоич, пожалста, селайте
есливамнехватаеткаofatй-Doункциииливынашиаг, которыйрзетеравитьраеиспраг