Driver .NET untuk Yandex Clickhouse. Pengemudi ini mengimplementasikan protokol clickhouse asli, tanpa malu -malu merobek sumber clickhouse asli. Dalam beberapa hal itu tidak mematuhi aturan ado.net namun ini disengaja.
А щё е описание по-руски, с. нижental.
V.2.0.5: Dukungan untuk kolom peta (terima kasih kepada @jorgeparavicini). Dukungan sementara untuk kolom JSON. String koneksi case-tidak sensitif.
V.2.0.4: Koneksi tetap menjadi tidak dapat digunakan setelah kesalahan yang dapat dipulihkan.
V.2.0.3: Dukungan yang ditambahkan untuk INSERT ... SETTINGS setting=value Sintaks.
V.2.0.2.1 dan V.2.0.2.2: Menambahkan target Net461 dan diturunkan persyaratan K4OS.compression.lz4 untuk itu.
V.2.0.2: Beralih ke Async IO, System.Data.Common Stuff yang diimplementasikan seperti DBProviderFactory. Dukungan tambahan untuk kolom IPv4 dan IPv6.
V.1.5.6-No-Polling-on-TLS: Perubahan Backport dari 2.0.3.
V.1.5.5-no-Polling-on-TLS: Menambal bug yang mencegah koneksi aman SSL/TLS berfungsi dengan baik.
V.1.5.5: Dukungan tambahan untuk jenis bool.
V.1.5.3: Memperbaiki kesalahan membaca array kosong.
V.1.5.2: Dukungan tambahan untuk tipe Date32.
V.1.5.1: Memperkenalkan cara baru untuk menangani tipe Tuple Clickhouse. Sekarang nilai dibaca sebagai System.Tuple<> bukan System.Object[] . Perubahan itu memungkinkan pembacaan Array(Tuple(...)) yang diketik.
v.1.4.0: Memperbaiki kueri parsing saat nilai dilarikan.
V.1.3.1: Dukungan tambahan untuk tipe lowcardinality. Dukungan diperpanjang untuk tipe desimal.
V.1.2.6: Dukungan (cukup terbatas) untuk waktu waktu.
Untuk membungkus koneksi clickhouse Anda di terowongan SSL/TLS, Anda harus mengaktifkan ada di server Anda terlebih dahulu (pengaturan tcp_port_secure di config.xml) dan tambahkan Encrypt=True ke string koneksi (jangan lupa untuk mengubah nomor port).
SSL/TLS tidak berfungsi dengan baik sebelum 1.5.5 dan menyebabkan data menunggu data yang tak terbatas tiba. Itu 'ditambal' dalam versi 1.5.5-no-polling-on-TLS dan sepenuhnya dimitigasi dalam 2.x+.
Jika Anda ingin melihat semua kueri yang dipancarkan oleh driver ke server, tambahkan Trace=True ke string koneksi dan mengatur pendengar .NET Trace untuk kategori ClickHouse.Ado .
Mesin Clickhouse tidak mendukung parsing beberapa kueri per di IDbCommand.Execute* RoundTip. Harap pisahkan pertanyaan Anda menjadi perintah yang dieksekusi secara terpisah.
Meskipun Anda mungkin berpikir bahwa NextResult tidak akan digunakan karena kurangnya dukungan beberapa kueri yang disebutkan di atas yang benar -benar salah! Anda harus selalu menggunakan NextResult sebagai Protokol dan Mesin Clickhouse dapat dan akan mengembalikan beberapa hasil per kueri dan kadang -kadang skema hasil mungkin berbeda (pasti sehubungan dengan pemesanan lapangan jika permintaan tidak secara eksplisit menentukannya).
Jika Anda membaca dokumentasi clickhouse, ia sangat menyarankan Anda untuk memasukkan catatan dalam jumlah besar (1000+ per permintaan). Driver ini dapat melakukan sisipan massal. Untuk melakukannya Anda harus menggunakan sintaksis insert khusus:
INSERT INTO some_table (col1, col2, col3) VALUES @bulk Dan setelah itu Anda harus menambahkan bulk bernama paramet dengan Value secara casable ke IEnumerable setiap item harus IEnumerable juga. Daftar kosong tidak diizinkan. Atau Anda dapat melewati implementasi IBulkInsertEnumerable sebagai nilai bulk untuk mempercepat pemrosesan dan menggunakan lebih sedikit memori di dalam driver clickhouse. Ini dapat digunakan secara meyakinkan dengan sintaks berikut:
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 ( ) ; Jika Anda telah memperbaiki beberapa bug atau menulis beberapa tambahan yang berguna untuk driver ini, silakan, tarik minta mereka kembali ke sini.
Jika Anda memerlukan fungsionalitas atau menemukan bug tetapi tidak dapat mengimplementasikan/memperbaikinya, silakan ajukan tiket di sini, di GitHub.
.Net драйвер для yandex clickhouse. В отличие о оициально A JDBC клиента этот драйвер нне ancing вный обёоверх яный оовiden, Протокол (и части ео рзизации) на Aол Выдраны з иоходников само A clickhouse. В некоторых слчч этот дрвер Ведёт сне так, как обычныа ado.net дйо днзо до доо дноо до до до до дныо до дныо дныо дныо до дныо дозарйutu доййййutu спецификой clickhouse.
v.2.0.5: подержка peta конок (спасибо @jorgeparavicini). Предвар masuk 201 Строкasuk соединен masuk инорир secara
V.2.0.4: исправлена поломка соединения после юбой, даже Восстано… шибки.
v.2.0.3: добавлена подержка подвыражения SETTINGS В sql командах INSERT .
v.2.0.2.1 и.2.0.2.2: добавлена цель net461 и для неё снижено т т ование к в в Верси K4os.lz4.
v.2.0.2: переход на аинхронный Вод/Вывод, раизация всяко з з з з System.Data.Common, В том числе DBRoviderfactory. Добавлена подержка типов ipv4 dan ipv6.
v.1.5.6-no-polling-on-tls: экпо Agustus
v.1.5.5-no-polling-on-tls: "исправлен" ба с повисаниями на соединенениях исползющих ssl/tls.
v.1.5.5: добавлена подержка типа bool.
V.1.5.3: исправлена шибка чтения пустых массивов.
v.1.5.2: добавлена подержка тencan Tanggal32.
V.1.5.1. Зеенён формат чтения/записи clickhouse типа Tuple . Теперь значения читаются как System.Tuple<> Вместо исползеемо System.Object[] . Это изенение позволяedit читать колонки Array(Tuple(...)) , чч р шutu шззз зutu.
V.1.4.0: исправлен рбор запросов с значениями содержащими экранированы secara символы.
v.1.3.1: добавлена подержка типа lowcardinality. У nya работа с типами desimal.
v.1.2.6: добавлена ораниченная подержка Временных зон.
Чтобы завернуть протокоergi кликхауса В ssl/tls т-нport port вport вport tcp_port_secure вCl н вCl н. и, затем, добавить Encrypt=True в с строку соединения (таке не забыть сенить и и и и uman спе сп entar secara
До версии 1.5.5-no-polling-on-tls ssl/tls нормально не ротал и приводил к кависаниям. В 1.5.5-no-polling-on-tls это ыло "исправлено", а Версиях 2.х+ полностюю устранено.
Если хочется Видеть какие sql дрвер пылает серв е т Trace=True сллл: сллллллллллллллл д telepon = трсировки для кате ClickHouse.Ado .
Движок clickhouse не ует обрабатыВать несколько sql запросов за один Вызов IDbCommand.Execute* . Запросы надо рбивать на отдельные команды.
В сemberзи с Вышесказаныожет показаться что NextResult не нжен, но это совершенно не так. Исполззование NextResult оlandзательно , поскольку протокоergi д двancing дножнао дожнао дож дuatu дрззззancing дрззз berubah дож др telepon дрз. один запрос, и, хуже того, схемы этих наборов могут различаться (по крайней мере может быть перепутан порядок полей, если запрос не имет явно о указания поffemberда).
В докуентации clickhouse указано, что Вставля 201 Для это A
INSERT INTO some_table (col1, col2, col3) VALUES @bulk Дл этой команды надо задать bulk с значением Value п п э IEnumerable , к ч ч ч bers orang, т должен ыыть IEnumerable . Кроме то A, в качестве значения параметра bulk передать объект ре IBulkInsertEnumerable - процессора Внутри драйвера clickhouse. Это удобно при исползовании такоedit синтаксиilan:
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 ( ) ; Если Вы исправили баaka ии раизовали какю-точч, пожалйста, сдел a tarik permintaan в в э э э uman вджа в вobil в в в в в).
Если Вам н х х х фencan иватат какой- фнкцadaan ии Вы нш p б бн бш нж но но нож моый мж ваilat.