* split up select.md * array-join.md basic refactoring * distinct.md basic refactoring * format.md basic refactoring * from.md basic refactoring * group-by.md basic refactoring * having.md basic refactoring * additional index.md refactoring * into-outfile.md basic refactoring * join.md basic refactoring * limit.md basic refactoring * limit-by.md basic refactoring * order-by.md basic refactoring * prewhere.md basic refactoring * adjust operators/index.md links * adjust sample.md links * adjust more links * adjust operatots links * fix some links * adjust aggregate function article titles * basic refactor of remaining select clauses * absolute paths in make_links.sh * run make_links.sh * remove old select.md locations * translate docs/es * translate docs/fr * translate docs/fa * remove old operators.md location * change operators.md links * adjust links in docs/es * adjust links in docs/es * minor texts adjustments * wip * update machine translations to use new links * fix changelog * es build fixes * get rid of some select.md links * temporary adjust ru links * temporary adjust more ru links * improve curly brace handling * adjust ru as well * fa build fix * ru link fixes * zh link fixes * temporary disable part of anchor checks
62 KiB
machine_translated | machine_translated_rev | toc_priority | toc_title |
---|---|---|---|
true | 72537a2d52 |
21 | Giriş ve çıkış biçimleri |
Giriş ve çıkış verileri için biçimler
ClickHouse kabul ve çeşitli biçimlerde veri dönebilirsiniz. Giriş için desteklenen bir biçim, sağlanan verileri ayrıştırmak için kullanılabilir INSERT
s, gerçekleştirmek için SELECT
s dosya, URL veya HDFS gibi bir dosya destekli tablodan veya harici bir sözlük okumak için. Çıktı için desteklenen bir biçim düzenlemek için kullanılabilir
sonuçları bir SELECT
ve gerçekleştirmek için INSERT
s dosya destekli bir tabloya.
Desteklenen formatlar şunlardır:
Biçimli | Girdi | Çıktı |
---|---|---|
TabSeparated | ✔ | ✔ |
TabSeparatedRaw | ✗ | ✔ |
TabSeparatedWithNames | ✔ | ✔ |
TabSeparatedWithNamesAndTypes | ✔ | ✔ |
Şablon | ✔ | ✔ |
TemplateİgnoreSpaces | ✔ | ✗ |
CSV | ✔ | ✔ |
CSVWithNames | ✔ | ✔ |
CustomSeparated | ✔ | ✔ |
Değerler | ✔ | ✔ |
Dikey | ✗ | ✔ |
VerticalRaw | ✗ | ✔ |
JSON | ✗ | ✔ |
JSONCompact | ✗ | ✔ |
JSONEachRow | ✔ | ✔ |
TSKV | ✔ | ✔ |
Çok | ✗ | ✔ |
PrettyCompact | ✗ | ✔ |
PrettyCompactMonoBlock | ✗ | ✔ |
PrettyNoEscapes | ✗ | ✔ |
PrettySpace | ✗ | ✔ |
Protobuf | ✔ | ✔ |
Avro | ✔ | ✔ |
AvroConfluent | ✔ | ✗ |
Parke | ✔ | ✔ |
ORC | ✔ | ✗ |
RowBinary | ✔ | ✔ |
Rowbinarywithnames ve türleri | ✔ | ✔ |
Yerli | ✔ | ✔ |
Boş | ✗ | ✔ |
XML | ✗ | ✔ |
CapnProto | ✔ | ✗ |
ClickHouse ayarları ile bazı biçim işleme parametrelerini kontrol edebilirsiniz. Daha fazla bilgi için okuyun Ayarlar bölme.
TabSeparated
Sekmede ayrı format, veri satır ile yazılır. Her satır sekmelerle ayrılmış değerler içerir. Her değer, satırdaki son değer dışında bir sekme tarafından takip edilir ve ardından bir satır beslemesi gelir. Kesinlikle Unix hat beslemeleri her yerde kabul edilir. Son satır ayrıca sonunda bir satır beslemesi içermelidir. Değerler metin biçiminde, tırnak işaretleri olmadan yazılır ve özel karakterler kaçtı.
Bu biçim adı altında da kullanılabilir TSV
.
Bu TabSeparated
format, özel programlar ve komut dosyaları kullanarak verileri işlemek için uygundur. Varsayılan olarak HTTP arabiriminde ve komut satırı istemcisinin toplu iş modunda kullanılır. Bu format aynı zamanda farklı Dbms'ler arasında veri aktarımı sağlar. Örneğin, Mysql'den bir dökümü alabilir ve Clickhouse'a yükleyebilirsiniz veya tam tersi.
Bu TabSeparated
biçim, toplam değerleri (TOPLAMLARLA birlikte kullanıldığında) ve aşırı değerleri (ne zaman ‘extremes’ 1 olarak ayarlanır). Bu durumlarda, toplam değerler ve aşırılıklar ana veriden sonra çıkar. Ana sonuç, toplam değerler ve aşırılıklar birbirinden boş bir çizgi ile ayrılır. Örnek:
SELECT EventDate, count() AS c FROM test.hits GROUP BY EventDate WITH TOTALS ORDER BY EventDate FORMAT TabSeparated``
2014-03-17 1406958
2014-03-18 1383658
2014-03-19 1405797
2014-03-20 1353623
2014-03-21 1245779
2014-03-22 1031592
2014-03-23 1046491
0000-00-00 8873898
2014-03-17 1031592
2014-03-23 1406958
Veri Biçimlendirme
Tamsayı sayılar ondalık biçimde yazılır. Sayılar ekstra içerebilir “+” başlangıçtaki karakter(ayrıştırma sırasında göz ardı edilir ve biçimlendirme sırasında kaydedilmez). Negatif olmayan sayılar negatif işareti içeremez. Okurken, boş bir dizeyi sıfır olarak veya (imzalı türler için) sıfır olarak sadece eksi işaretinden oluşan bir dizeyi ayrıştırmasına izin verilir. Karşılık gelen veri türüne uymayan sayılar, hata iletisi olmadan farklı bir sayı olarak ayrıştırılabilir.
Kayan noktalı sayılar ondalık biçimde yazılır. Nokta ondalık ayırıcı olarak kullanılır. Üstel girişler olduğu gibi desteklenir ‘inf’, ‘+inf’, ‘-inf’, ve ‘nan’. Kayan noktalı sayıların bir girişi, ondalık nokta ile başlayabilir veya sona erebilir. Biçimlendirme sırasında kayan noktalı sayılarda doğruluk kaybolabilir. Ayrıştırma sırasında, en yakın makine temsil edilebilir numarayı okumak kesinlikle gerekli değildir.
Tarihler YYYY-AA-DD biçiminde yazılır ve aynı biçimde ayrıştırılır, ancak ayırıcı olarak herhangi bir karakterle ayrıştırılır.
Tarihleri ile saatleri biçiminde yazılır YYYY-MM-DD hh:mm:ss
ve aynı biçimde ayrıştırılır, ancak ayırıcı olarak herhangi bir karakterle.
Bu, tüm sistem saat diliminde istemci veya sunucu başlatıldığında (hangi veri biçimleri bağlı olarak) oluşur. Saatli tarihler için gün ışığından yararlanma saati belirtilmedi. Bu nedenle, bir dökümü gün ışığından yararlanma saati sırasında kez varsa, dökümü tümden verileri eşleşmiyor ve ayrıştırma iki kez birini seçecektir.
Bir okuma işlemi sırasında, yanlış tarih ve Tarih saatleriyle doğal taşma veya null tarih ve saat, hata iletisi olmadan ayrıştırılabilir.
Bir istisna olarak, tam 10 ondalık basamaktan oluşuyorsa, tarihlerin zamanlarla ayrıştırılması Unix zaman damgası biçiminde de desteklenir. Sonuç, saat dilimine bağlı değildir. Yyyy-MM-DD ss:mm:ss ve nnnnnnnnnn biçimleri otomatik olarak ayırt edilir.
Dizeler ters eğik çizgiden kaçan özel karakterlerle çıktılanır. Çıkış için aşağıdaki çıkış dizileri kullanılır: \b
, \f
, \r
, \n
, \t
, \0
, \'
, \\
. Ayrıştırma da dizileri destekler \a
, \v
, ve \xHH
(hxex kaçış dizileri) ve herhangi \c
diz ,iler, nerede c
herhangi bir karakter (bu diziler dönüştürülür c
). Böylece, veri okuma, bir satır beslemesinin şu şekilde yazılabileceği formatları destekler \n
veya \
, veya bir çizgi besleme olarak. Örneğin, dize Hello world
boşluk yerine kelimeler arasında bir çizgi beslemesi ile aşağıdaki varyasyonlardan herhangi birinde ayrıştırılabilir:
Hello\nworld
Hello\
world
MySQL, sekmeyle ayrılmış dökümleri yazarken kullandığı için ikinci varyant desteklenir.
Verileri TabSeparated biçiminde geçirirken kaçmanız gereken minimum karakter kümesi: sekme, satır besleme (LF) ve ters eğik çizgi.
Sadece küçük bir sembol seti kaçtı. Terminalinizin çıktıda mahvedeceği bir dize değerine kolayca rastlayabilirsiniz.
Diziler köşeli parantez içinde virgülle ayrılmış değerlerin bir listesi olarak yazılır. Dizideki sayı öğeleri normal olarak biçimlendirilir. Date
ve DateTime
türleri tek tırnak yazılır. Diz .eler yukarıdaki gibi aynı kural quoteslarla tek tırnak içinde yazılır.
NULL olarak format islanır \N
.
Her eleman İçiçe yapılar dizi olarak temsil edilir.
Mesela:
CREATE TABLE nestedt
(
`id` UInt8,
`aux` Nested(
a UInt8,
b String
)
)
ENGINE = TinyLog
INSERT INTO nestedt Values ( 1, [1], ['a'])
SELECT * FROM nestedt FORMAT TSV
1 [1] ['a']
TabSeparatedRaw
Farklıdır TabSeparated
satırların kaçmadan yazıldığını biçimlendirin.
Bu biçim yalnızca bir sorgu sonucu çıktısı için uygundur, ancak ayrıştırma için değil (bir tabloya eklemek için veri alma).
Bu biçim adı altında da kullanılabilir TSVRaw
.
TabSeparatedWithNames
Bu farklıdır TabSeparated
sütun adlarının ilk satırda yazıldığını biçimlendirin.
Ayrıştırma sırasında, ilk satır tamamen göz ardı edilir. Sütun adlarını konumlarını belirlemek veya doğruluğunu kontrol etmek için kullanamazsınız.
(Başlık satırı ayrıştırma desteği gelecekte eklenebilir .)
Bu biçim adı altında da kullanılabilir TSVWithNames
.
TabSeparatedWithNamesAndTypes
Bu farklıdır TabSeparated
sütun türleri ikinci satırda iken, sütun adlarının ilk satıra yazıldığını biçimlendirin.
Ayrıştırma sırasında, birinci ve ikinci satırlar tamamen göz ardı edilir.
Bu biçim adı altında da kullanılabilir TSVWithNamesAndTypes
.
Şablon
Bu biçim, belirli bir kaçış kuralına sahip değerler için yer tutucularla özel bir biçim dizesinin belirtilmesine izin verir.
Ayarları kullanır format_template_resultset
, format_template_row
, format_template_rows_between_delimiter
and some settings of other formats (e.g. output_format_json_quote_64bit_integers
kullanırken JSON
kaçmak, daha fazla görmek)
Ayar format_template_row
aşağıdaki sözdizimine sahip satırlar için Biçim dizesi içeren dosya yolunu belirtir:
delimiter_1${column_1:serializeAs_1}delimiter_2${column_2:serializeAs_2} ... delimiter_N
,
nerede delimiter_i
değerler arasında bir sınırlayıcı mı ($
sembol olarak kaçabilir $$
),
column_i
değerleri seçilecek veya eklenecek bir sütunun adı veya dizini (boşsa, sütun atlanır),
serializeAs_i
sütun değerleri için kaçan bir kuraldır. Aşağıdaki kaçış kuralları desteklenir:
CSV
,JSON
,XML
(aynı is theimlerin biçim formatslerine benzer şekilde)Escaped
(aynı şekildeTSV
)Quoted
(aynı şekildeValues
)Raw
(kaç withoutmadan, benzer şekildeTSVRaw
)None
(kaçan kural yok, daha fazla görün)
Kaçan bir kural atlanırsa, o zaman None
kullanılacaktır. XML
ve Raw
sadece çıkış için uygundur.
Yani, aşağıdaki biçim dizesi için:
`Search phrase: ${SearchPhrase:Quoted}, count: ${c:Escaped}, ad price: $$${price:JSON};`
değerleri SearchPhrase
, c
ve price
olarak kaçır ,ılan sütunlar Quoted
, Escaped
ve JSON
(select için) yazdırılacak veya (ınsert için) arasında beklenecektir Search phrase:
, , count:
, , ad price: $
ve ;
sırasıyla sınırlayıcılar. Mesela:
Search phrase: 'bathroom interior design', count: 2166, ad price: $3;
Bu format_template_rows_between_delimiter
ayar, sonuncusu hariç her satırdan sonra yazdırılan (veya beklenen) satırlar arasındaki sınırlayıcıyı belirtir (\n
varsayılan olarak)
Ayar format_template_resultset
resultset için bir biçim dizesi içeren dosya yolunu belirtir. Resultset için Biçim dizesi, satır için bir biçim dizesi ile aynı sözdizimine sahiptir ve bir önek, sonek ve bazı ek bilgileri yazdırmanın bir yolunu belirtmeyi sağlar. Sütun adları yerine aşağıdaki yer tutucuları içerir:
data
veri içeren satırlar mıformat_template_row
biçim, ayrılmışformat_template_rows_between_delimiter
. Bu yer tutucu, biçim dizesindeki ilk yer tutucu olmalıdır.totals
toplam değerleri olan satırformat_template_row
biçim (TOPLAMLARLA birlikte kullanıldığında)min
satır içinde minimum değerlere sahip miformat_template_row
biçim (1 olarak ayarlandığında)max
maksimum değerleri olan satırformat_template_row
biçim (1 olarak ayarlandığında)rows
çıktı satırlarının toplam sayısıdırrows_before_limit
minimum satır sayısı sınırı olmadan olurdu. Yalnızca sorgu sınırı içeriyorsa çıktı. Sorgu GROUP BY içeriyorsa, ROWS_BEFORE_LİMİT_AT_LEAST SINIRSIZDI olurdu satır tam sayısıdır.time
istek yürütme süresi saniyeler içinde mirows_read
satır sayısı okun thedu mubytes_read
bayt sayısı (sıkıştırılmamış) okundu mu
Tutucu data
, totals
, min
ve max
kaç rulema kuralı belirtilm (em (elidir (veya None
açıkça belirtilen) olmalıdır. Kalan yer tutucuları belirtilen kaçan herhangi bir kural olabilir.
Eğer... format_template_resultset
ayar boş bir dizedir, ${data}
varsayılan değer olarak kullanılır.
Insert sorguları biçimi için önek veya sonek varsa bazı sütunları veya bazı alanları atlamaya izin verir (örneğe bakın).
Örnek seç:
SELECT SearchPhrase, count() AS c FROM test.hits GROUP BY SearchPhrase ORDER BY c DESC LIMIT 5 FORMAT Template SETTINGS
format_template_resultset = '/some/path/resultset.format', format_template_row = '/some/path/row.format', format_template_rows_between_delimiter = '\n '
/some/path/resultset.format
:
<!DOCTYPE HTML>
<html> <head> <title>Search phrases</title> </head>
<body>
<table border="1"> <caption>Search phrases</caption>
<tr> <th>Search phrase</th> <th>Count</th> </tr>
${data}
</table>
<table border="1"> <caption>Max</caption>
${max}
</table>
<b>Processed ${rows_read:XML} rows in ${time:XML} sec</b>
</body>
</html>
/some/path/row.format
:
<tr> <td>${0:XML}</td> <td>${1:XML}</td> </tr>
Sonuç:
<!DOCTYPE HTML>
<html> <head> <title>Search phrases</title> </head>
<body>
<table border="1"> <caption>Search phrases</caption>
<tr> <th>Search phrase</th> <th>Count</th> </tr>
<tr> <td></td> <td>8267016</td> </tr>
<tr> <td>bathroom interior design</td> <td>2166</td> </tr>
<tr> <td>yandex</td> <td>1655</td> </tr>
<tr> <td>spring 2014 fashion</td> <td>1549</td> </tr>
<tr> <td>freeform photos</td> <td>1480</td> </tr>
</table>
<table border="1"> <caption>Max</caption>
<tr> <td></td> <td>8873898</td> </tr>
</table>
<b>Processed 3095973 rows in 0.1569913 sec</b>
</body>
</html>
Örnek Ekle:
Some header
Page views: 5, User id: 4324182021466249494, Useless field: hello, Duration: 146, Sign: -1
Page views: 6, User id: 4324182021466249494, Useless field: world, Duration: 185, Sign: 1
Total rows: 2
INSERT INTO UserActivity FORMAT Template SETTINGS
format_template_resultset = '/some/path/resultset.format', format_template_row = '/some/path/row.format'
/some/path/resultset.format
:
Some header\n${data}\nTotal rows: ${:CSV}\n
/some/path/row.format
:
Page views: ${PageViews:CSV}, User id: ${UserID:CSV}, Useless field: ${:CSV}, Duration: ${Duration:CSV}, Sign: ${Sign:CSV}
PageViews
, UserID
, Duration
ve Sign
yer tutucular içinde tablodaki sütun adları vardır. Sonra değerler Useless field
satır ve sonra \nTotal rows:
sonek olarak göz ardı edilecektir.
Giriş verisindeki tüm sınırlayıcılar, belirtilen biçim dizelerindeki sınırlayıcılara kesinlikle eşit olmalıdır.
TemplateİgnoreSpaces
Bu format sadece giriş için uygundur.
Benzer Template
, ancak giriş akışındaki sınırlayıcılar ve değerler arasındaki boşluk karakterlerini atlar. Ancak, biçim dizeleri boşluk karakterleri içeriyorsa, bu karakterler giriş akışında beklenir. Ayrıca boş yer tutucuları belirtmek için izin verir (${}
veya ${:None}
) aralarındaki boşlukları görmezden gelmek için bazı sınırlayıcıları ayrı parçalara ayırmak. Bu tür yer tutucular yalnızca boşluk karakterlerini atlamak için kullanılır.
Okumak mümkün JSON
bu biçimi kullanarak, sütun değerleri tüm satırlarda aynı sıraya sahipse. Örneğin, aşağıdaki istek çıktı biçim örneğinden veri eklemek için kullanılabilir JSON:
INSERT INTO table_name FORMAT TemplateIgnoreSpaces SETTINGS
format_template_resultset = '/some/path/resultset.format', format_template_row = '/some/path/row.format', format_template_rows_between_delimiter = ','
/some/path/resultset.format
:
{${}"meta"${}:${:JSON},${}"data"${}:${}[${data}]${},${}"totals"${}:${:JSON},${}"extremes"${}:${:JSON},${}"rows"${}:${:JSON},${}"rows_before_limit_at_least"${}:${:JSON}${}}
/some/path/row.format
:
{${}"SearchPhrase"${}:${}${phrase:JSON}${},${}"c"${}:${}${cnt:JSON}${}}
TSKV
TabSeparated benzer, ancak name=value biçiminde bir değer çıkarır. Adlar tabseparated biçiminde olduğu gibi kaçtı ve = simgesi de kaçtı.
SearchPhrase= count()=8267016
SearchPhrase=bathroom interior design count()=2166
SearchPhrase=yandex count()=1655
SearchPhrase=2014 spring fashion count()=1549
SearchPhrase=freeform photos count()=1480
SearchPhrase=angelina jolie count()=1245
SearchPhrase=omsk count()=1112
SearchPhrase=photos of dog breeds count()=1091
SearchPhrase=curtain designs count()=1064
SearchPhrase=baku count()=1000
NULL olarak format islanır \N
.
SELECT * FROM t_null FORMAT TSKV
x=1 y=\N
Çok sayıda küçük sütun olduğunda, bu biçim etkisizdir ve genellikle kullanmak için hiçbir neden yoktur. Bununla birlikte, verimlilik açısından Jsoneachrow'dan daha kötü değildir.
Both data output and parsing are supported in this format. For parsing, any order is supported for the values of different columns. It is acceptable for some values to be omitted – they are treated as equal to their default values. In this case, zeros and blank rows are used as default values. Complex values that could be specified in the table are not supported as defaults.
Ayrıştırma, ek alanın varlığına izin verir tskv
eşit işareti veya bir değer olmadan. Bu alan yoksayılır.
CSV
Virgülle ayrılmış değerler biçimi (RFC).
Biçimlendirme yaparken, satırlar çift tırnak içine alınır. Bir dizenin içindeki çift alıntı, bir satırda iki çift tırnak olarak çıktılanır. Karakterlerden kaçmak için başka kural yoktur. Tarih ve Tarih-Saat çift tırnak içine alınır. Sayılar tırnak işaretleri olmadan çıktı. Değerler, bir sınırlayıcı karakterle ayrılır; ,
varsayılan olarak. Sınırlayıcı karakteri ayarında tanımlanır format_csv_delimiter. Satırlar Unıx satır besleme (LF) kullanılarak ayrılır. Diziler CSV'DE aşağıdaki gibi serileştirilir: ilk olarak, dizi TabSeparated biçiminde olduğu gibi bir dizeye serileştirilir ve daha sonra ortaya çıkan dize çift tırnak içinde CSV'YE çıkarılır. CSV biçimindeki Tuples ayrı sütunlar olarak serileştirilir(yani, tuple'daki yuvalanmaları kaybolur).
$ clickhouse-client --format_csv_delimiter="|" --query="INSERT INTO test.csv FORMAT CSV" < data.csv
* Varsayılan olarak, sınırlayıcı ,
. Görmek format_csv_delimiter daha fazla bilgi için ayarlama.
Ayrıştırma yaparken, tüm değerler tırnak işaretleri ile veya tırnak işaretleri olmadan ayrıştırılabilir. Hem çift hem de tek tırnak desteklenmektedir. Satırlar tırnak işaretleri olmadan da düzenlenebilir. Bu durumda, sınırlayıcı karaktere veya satır beslemesine (CR veya LF) ayrıştırılır. RFC'Yİ ihlal ederken, satırları tırnak işaretleri olmadan ayrıştırırken, önde gelen ve sondaki boşluklar ve sekmeler göz ardı edilir. Hat beslemesi için Unix (LF), Windows (CR LF) ve Mac OS Classic (CR LF) türleri desteklenir.
Boş unquoted giriş değerleri, ilgili sütunlar için varsayılan değerlerle değiştirilir ınput_format_defaults_for_omitted_fields etkindir.
NULL
olarak format islanır \N
veya NULL
veya boş bir unquoted dize (bkz. ayarlar ınput_format_csv_unquoted_null_literal_as_null ve ınput_format_defaults_for_omitted_fields).
CSV biçimi, toplamların ve aşırılıkların çıktısını aynı şekilde destekler TabSeparated
.
CSVWithNames
Ayrıca, başlık satırını benzer şekilde yazdırır TabSeparatedWithNames
.
CustomSeparated
Benzer Şablon, ancak tüm sütunları yazdırır veya okur ve ayardan kaçan kuralı kullanır format_custom_escaping_rule
ve ayarlardan sınırlayıcılar format_custom_field_delimiter
, format_custom_row_before_delimiter
, format_custom_row_after_delimiter
, format_custom_row_between_delimiter
, format_custom_result_before_delimiter
ve format_custom_result_after_delimiter
, biçim dizelerinden değil.
Ayrıca var CustomSeparatedIgnoreSpaces
biçim, benzer olan TemplateIgnoreSpaces
.
JSON
Verileri json formatında çıkarır. Veri tablolarının yanı sıra, bazı ek bilgilerle birlikte sütun adlarını ve türlerini de çıkarır: çıktı satırlarının toplam sayısı ve bir sınır yoksa çıktı olabilecek satır sayısı. Örnek:
SELECT SearchPhrase, count() AS c FROM test.hits GROUP BY SearchPhrase WITH TOTALS ORDER BY c DESC LIMIT 5 FORMAT JSON
{
"meta":
[
{
"name": "SearchPhrase",
"type": "String"
},
{
"name": "c",
"type": "UInt64"
}
],
"data":
[
{
"SearchPhrase": "",
"c": "8267016"
},
{
"SearchPhrase": "bathroom interior design",
"c": "2166"
},
{
"SearchPhrase": "yandex",
"c": "1655"
},
{
"SearchPhrase": "spring 2014 fashion",
"c": "1549"
},
{
"SearchPhrase": "freeform photos",
"c": "1480"
}
],
"totals":
{
"SearchPhrase": "",
"c": "8873898"
},
"extremes":
{
"min":
{
"SearchPhrase": "",
"c": "1480"
},
"max":
{
"SearchPhrase": "",
"c": "8267016"
}
},
"rows": 5,
"rows_before_limit_at_least": 141137
}
Json JavaScript ile uyumludur. Bunu sağlamak için, bazı karakterler ek olarak kaçar: eğik çizgi /
olarak kaç İsar \/
; alternatif Satır sonları U+2028
ve U+2029
, hangi bazı tarayıcılar kırmak, olarak kaçtı \uXXXX
. ASCII denetim karakterleri kaçtı: backspace, form besleme, satır besleme, satır başı ve yatay sekme ile değiştirilir \b
, \f
, \n
, \r
, \t
, 00-1f aralığında kalan baytların yanı sıra \uXXXX
sequences. Invalid UTF-8 sequences are changed to the replacement character <20> so the output text will consist of valid UTF-8 sequences. For compatibility with JavaScript, Int64 and UInt64 integers are enclosed in double-quotes by default. To remove the quotes, you can set the configuration parameter output_format_json_quote_64bit_integers 0'a.
rows
– The total number of output rows.
rows_before_limit_at_least
Minimum satır sayısı sınırı olmadan olurdu. Yalnızca sorgu sınırı içeriyorsa çıktı.
Sorgu GROUP BY içeriyorsa, ROWS_BEFORE_LİMİT_AT_LEAST SINIRSIZDI olurdu satır tam sayısıdır.
totals
– Total values (when using WITH TOTALS).
extremes
– Extreme values (when extremes are set to 1).
Bu biçim yalnızca bir sorgu sonucu çıktısı için uygundur, ancak ayrıştırma için değil (bir tabloya eklemek için veri alma).
ClickHouse destekler NULL olarak görüntülenen null
JSON çıkışında.
Ayrıca bakınız JSONEachRow biçimli.
JSONCompact
Yalnızca veri satırlarında json'dan farklıdır, nesnelerde değil, dizilerde çıktıdır.
Örnek:
{
"meta":
[
{
"name": "SearchPhrase",
"type": "String"
},
{
"name": "c",
"type": "UInt64"
}
],
"data":
[
["", "8267016"],
["bathroom interior design", "2166"],
["yandex", "1655"],
["fashion trends spring 2014", "1549"],
["freeform photo", "1480"]
],
"totals": ["","8873898"],
"extremes":
{
"min": ["","1480"],
"max": ["","8267016"]
},
"rows": 5,
"rows_before_limit_at_least": 141137
}
Bu biçim yalnızca bir sorgu sonucu çıktısı için uygundur, ancak ayrıştırma için değil (bir tabloya eklemek için veri alma).
Ayrıca bakınız JSONEachRow
biçimli.
JSONEachRow
Bu biçimi kullanırken, ClickHouse satırları ayrılmış, yeni satırla ayrılmış JSON nesneleri olarak çıkarır, ancak bir bütün olarak veriler geçerli JSON değildir.
{"SearchPhrase":"curtain designs","count()":"1064"}
{"SearchPhrase":"baku","count()":"1000"}
{"SearchPhrase":"","count()":"8267016"}
Verileri eklerken, her satır için ayrı bir JSON nesnesi sağlamanız gerekir.
Veri Ekleme
INSERT INTO UserActivity FORMAT JSONEachRow {"PageViews":5, "UserID":"4324182021466249494", "Duration":146,"Sign":-1} {"UserID":"4324182021466249494","PageViews":6,"Duration":185,"Sign":1}
ClickHouse sağlar:
- Nesnedeki herhangi bir anahtar-değer çiftleri sırası.
- Bazı değerleri atlama.
ClickHouse, nesnelerden sonra öğeler ve virgüller arasındaki boşlukları yok sayar. Tüm nesneleri bir satırda geçirebilirsiniz. Onları Satır sonları ile ayırmak zorunda değilsiniz.
İhmal edilen değerler işleme
ClickHouse, karşılık gelen değerler için varsayılan değerlerle atlanmış değerleri değiştirir veri türleri.
Eğer DEFAULT expr
belirtilen, ClickHouse bağlı olarak farklı ikame kuralları kullanır ınput_format_defaults_for_omitted_fields ayar.
Aşağıdaki tabloyu düşünün:
CREATE TABLE IF NOT EXISTS example_table
(
x UInt32,
a DEFAULT x * 2
) ENGINE = Memory;
- Eğer
input_format_defaults_for_omitted_fields = 0
, sonra varsayılan değer içinx
vea
eşitlikler0
(varsayılan değer olarakUInt32
veri türü). - Eğer
input_format_defaults_for_omitted_fields = 1
, sonra varsayılan değer içinx
eşitlikler0
, ancak varsayılan değera
eşitliklerx * 2
.
!!! note "Uyarıcı"
İle veri ek whenlerken insert_sample_with_metadata = 1
, ClickHouse, ekleme ile karşılaştırıldığında daha fazla hesaplama kaynağı tüketir insert_sample_with_metadata = 0
.
Veri Seçme
Düşünün UserActivity
örnek olarak tablo:
┌──────────────UserID─┬─PageViews─┬─Duration─┬─Sign─┐
│ 4324182021466249494 │ 5 │ 146 │ -1 │
│ 4324182021466249494 │ 6 │ 185 │ 1 │
└─────────────────────┴───────────┴──────────┴──────┘
Sorgu SELECT * FROM UserActivity FORMAT JSONEachRow
dönüşler:
{"UserID":"4324182021466249494","PageViews":5,"Duration":146,"Sign":-1}
{"UserID":"4324182021466249494","PageViews":6,"Duration":185,"Sign":1}
Aksine JSON biçimi, geçersiz UTF-8 dizilerinin hiçbir ikame yoktur. Değerleri için olduğu gibi aynı şekilde kaçtı JSON
.
!!! note "Not"
Herhangi bir bayt kümesi dizelerde çıktı olabilir. Kullan... JSONEachRow
tablodaki verilerin herhangi bir bilgi kaybetmeden JSON olarak biçimlendirilebileceğinden eminseniz biçimlendirin.
İç içe yapıların kullanımı
İle bir tablo varsa İçiçe veri türü sütunları, aynı yapıya sahip json verilerini ekleyebilirsiniz. İle bu özelliği etkinleştirin ınput_format_ımport_nested_json ayar.
Örneğin, aşağıdaki tabloyu göz önünde bulundurun:
CREATE TABLE json_each_row_nested (n Nested (s String, i Int32) ) ENGINE = Memory
Gibi görmek Nested
veri türü açıklaması, ClickHouse, iç içe geçmiş yapının her bileşenini ayrı bir sütun olarak ele alır (n.s
ve n.i
sof )ram )ız için). Verileri aşağıdaki şekilde ekleyebilirsiniz:
INSERT INTO json_each_row_nested FORMAT JSONEachRow {"n.s": ["abc", "def"], "n.i": [1, 23]}
Hiyerarşik bir json nesnesi olarak veri eklemek için input_format_import_nested_json = 1.
{
"n": {
"s": ["abc", "def"],
"i": [1, 23]
}
}
Bu ayar olmadan, ClickHouse bir özel durum atar.
SELECT name, value FROM system.settings WHERE name = 'input_format_import_nested_json'
┌─name────────────────────────────┬─value─┐
│ input_format_import_nested_json │ 0 │
└─────────────────────────────────┴───────┘
INSERT INTO json_each_row_nested FORMAT JSONEachRow {"n": {"s": ["abc", "def"], "i": [1, 23]}}
Code: 117. DB::Exception: Unknown field found while parsing JSONEachRow format: n: (at row 1)
SET input_format_import_nested_json=1
INSERT INTO json_each_row_nested FORMAT JSONEachRow {"n": {"s": ["abc", "def"], "i": [1, 23]}}
SELECT * FROM json_each_row_nested
┌─n.s───────────┬─n.i────┐
│ ['abc','def'] │ [1,23] │
└───────────────┴────────┘
Yerli
En verimli biçim. Veriler ikili formatta bloklar tarafından yazılır ve okunur. Her blok için satır sayısı, sütun sayısı, sütun adları ve türleri ve bu bloktaki sütunların parçaları birbiri ardına kaydedilir. Başka bir deyişle, bu format “columnar” – it doesn't convert columns to rows. This is the format used in the native interface for interaction between servers, for using the command-line client, and for C++ clients.
Bu biçimi, yalnızca ClickHouse DBMS tarafından okunabilen dökümleri hızlı bir şekilde oluşturmak için kullanabilirsiniz. Bu formatla kendiniz çalışmak mantıklı değil.
Boş
Hiçbir şey çıktı. Ancak, sorgu işlenir ve komut satırı istemcisini kullanırken, veriler istemciye iletilir. Bu, performans testi de dahil olmak üzere testler için kullanılır. Açıkçası, bu format yalnızca ayrıştırma için değil, çıktı için uygundur.
Çok
Verileri Unicode-art tabloları olarak çıkarır, ayrıca TERMİNALDEKİ renkleri ayarlamak için ANSI-escape dizileri kullanır. Tablonun tam bir ızgarası çizilir ve her satır terminalde iki satır kaplar. Her sonuç bloğu ayrı bir tablo olarak çıktı. Bu, blokların arabelleğe alma sonuçları olmadan çıkabilmesi için gereklidir (tüm değerlerin görünür genişliğini önceden hesaplamak için arabelleğe alma gerekli olacaktır).
NULL olarak çıktı ᴺᵁᴸᴸ
.
Örnek (gösterilen PrettyCompact biçimli):
SELECT * FROM t_null
┌─x─┬────y─┐
│ 1 │ ᴺᵁᴸᴸ │
└───┴──────┘
Satırlar güzel* biçimlerinde kaçmaz. Örnek için gösterilir PrettyCompact biçimli:
SELECT 'String with \'quotes\' and \t character' AS Escaping_test
┌─Escaping_test────────────────────────┐
│ String with 'quotes' and character │
└──────────────────────────────────────┘
Terminale çok fazla veri boşaltmaktan kaçınmak için yalnızca ilk 10.000 satır yazdırılır. Satır sayısı 10.000'den büyük veya eşitse, ileti “Showed first 10 000” bas .ılmıştır. Bu biçim yalnızca bir sorgu sonucu çıktısı için uygundur, ancak ayrıştırma için değil (bir tabloya eklemek için veri alma).
Güzel biçim, toplam değerleri (TOPLAMLARLA birlikte kullanıldığında) ve aşırılıkları (ne zaman ‘extremes’ 1 olarak ayarlanır). Bu durumlarda, toplam değerler ve aşırı değerler ana veriden sonra ayrı tablolarda çıktılanır. Örnek (gösterilen PrettyCompact biçimli):
SELECT EventDate, count() AS c FROM test.hits GROUP BY EventDate WITH TOTALS ORDER BY EventDate FORMAT PrettyCompact
┌──EventDate─┬───────c─┐
│ 2014-03-17 │ 1406958 │
│ 2014-03-18 │ 1383658 │
│ 2014-03-19 │ 1405797 │
│ 2014-03-20 │ 1353623 │
│ 2014-03-21 │ 1245779 │
│ 2014-03-22 │ 1031592 │
│ 2014-03-23 │ 1046491 │
└────────────┴─────────┘
Totals:
┌──EventDate─┬───────c─┐
│ 0000-00-00 │ 8873898 │
└────────────┴─────────┘
Extremes:
┌──EventDate─┬───────c─┐
│ 2014-03-17 │ 1031592 │
│ 2014-03-23 │ 1406958 │
└────────────┴─────────┘
PrettyCompact
Farklıdır Çok bu ızgara satırlar arasında çizilir ve sonuç daha kompakttır. Bu biçim, etkileşimli modda komut satırı istemcisinde varsayılan olarak kullanılır.
PrettyCompactMonoBlock
Farklıdır PrettyCompact bu kadar 10.000 satır arabelleğe alınır, daha sonra bloklarla değil, tek bir tablo olarak çıktılanır.
PrettyNoEscapes
ANSİSİ-ESC .ape diz .ilerinin kullanıl .madığı güzel differsden farklıdır. Bu, bu formatı bir tarayıcıda görüntülemek ve aynı zamanda ‘watch’ komut satırı yardımcı programı.
Örnek:
$ watch -n1 "clickhouse-client --query='SELECT event, value FROM system.events FORMAT PrettyCompactNoEscapes'"
Tarayıcıda görüntülemek için HTTP arayüzünü kullanabilirsiniz.
PrettyCompactNoEscapes
Önceki ayar ile aynı.
PrettySpaceNoEscapes
Önceki ayar ile aynı.
PrettySpace
Farklıdır PrettyCompact bu boşluk (boşluk karakterleri) ızgara yerine kullanılır.
RowBinary
Biçimleri ve ikili biçimde satır verileri ayrıştırır. Satırlar ve değerler, ayırıcılar olmadan ardışık olarak listelenir. Bu biçim, satır tabanlı olduğundan yerel biçimden daha az etkilidir.
Tamsayılar sabit uzunlukta küçük endian temsilini kullanır. Örneğin, uint64 8 bayt kullanır. DateTime, Unix zaman damgasını değer olarak içeren Uİnt32 olarak temsil edilir. Tarih değeri olarak 1970-01-01 yılından bu yana gün sayısını içeren bir uint16 nesnesi olarak temsil edilir. Dize varint uzunluğu (imzasız) olarak temsil edilir LEB128), ardından dizenin baytları. FixedString sadece bir bayt dizisi olarak temsil edilir.
Dizi varint uzunluğu (imzasız) olarak temsil edilir LEB128), ardından dizinin ardışık elemanları.
İçin NULL destek, 1 veya 0 içeren ek bir bayt her önce eklenir Nullable değer. 1 ise, o zaman değer NULL
ve bu bayt ayrı bir değer olarak yorumlanır. 0 ise, bayttan sonraki değer değil NULL
.
Rowbinarywithnames ve türleri
Benzer RowBinary, ancak eklenen Başlık ile:
- LEB128- kodlanmış sütun sayısı (N)
- N
String
s sütun adlarını belirtme - N
String
s sütun türlerini belirleme
Değerler
Her satırı parantez içinde yazdırır. Satırlar virgülle ayrılır. Son satırdan sonra virgül yok. Parantez içindeki değerler de virgülle ayrılır. Sayılar tırnak işaretleri olmadan ondalık biçimde çıktıdır. Diziler köşeli parantez içinde çıktı. Kat tırnak içinde çıkış dizelerle, tarihleri ve tarihleri. Kaçan kurallar ve ayrıştırma benzer TabSeparated biçimli. Biçimlendirme sırasında fazladan boşluk eklenmez, ancak ayrıştırma sırasında izin verilir ve atlanır (izin verilmeyen dizi değerleri içindeki boşluklar hariç). NULL olarak temsil edilir NULL
.
The minimum set of characters that you need to escape when passing data in Values format: single quotes and backslashes.
Bu, kullanılan formattır INSERT INTO t VALUES ...
, ancak sorgu sonuçlarını biçimlendirmek için de kullanabilirsiniz.
Ayrıca bakınız: ınput_format_values_interpret_expressions ve ınput_format_values_deduce_templates_of_expressions ayarlar.
Dikey
Her değeri belirtilen sütun adıyla ayrı bir satıra yazdırır. Bu biçim, her satır çok sayıda sütundan oluşuyorsa, yalnızca bir veya birkaç satır yazdırmak için uygundur.
NULL olarak çıktı ᴺᵁᴸᴸ
.
Örnek:
SELECT * FROM t_null FORMAT Vertical
Row 1:
──────
x: 1
y: ᴺᵁᴸᴸ
Satırlar dikey biçimde kaçmadı:
SELECT 'string with \'quotes\' and \t with some special \n characters' AS test FORMAT Vertical
Row 1:
──────
test: string with 'quotes' and with some special
characters
Bu biçim yalnızca bir sorgu sonucu çıktısı için uygundur, ancak ayrıştırma için değil (bir tabloya eklemek için veri alma).
VerticalRaw
Benzer Dikey, ama kaçan engelli ile. Bu biçim, yalnızca ayrıştırma (veri alma ve tabloya ekleme) için değil, sorgu sonuçlarının çıktısı için uygundur.
XML
XML biçimi, ayrıştırma için değil, yalnızca çıktı için uygundur. Örnek:
<?xml version='1.0' encoding='UTF-8' ?>
<result>
<meta>
<columns>
<column>
<name>SearchPhrase</name>
<type>String</type>
</column>
<column>
<name>count()</name>
<type>UInt64</type>
</column>
</columns>
</meta>
<data>
<row>
<SearchPhrase></SearchPhrase>
<field>8267016</field>
</row>
<row>
<SearchPhrase>bathroom interior design</SearchPhrase>
<field>2166</field>
</row>
<row>
<SearchPhrase>yandex</SearchPhrase>
<field>1655</field>
</row>
<row>
<SearchPhrase>2014 spring fashion</SearchPhrase>
<field>1549</field>
</row>
<row>
<SearchPhrase>freeform photos</SearchPhrase>
<field>1480</field>
</row>
<row>
<SearchPhrase>angelina jolie</SearchPhrase>
<field>1245</field>
</row>
<row>
<SearchPhrase>omsk</SearchPhrase>
<field>1112</field>
</row>
<row>
<SearchPhrase>photos of dog breeds</SearchPhrase>
<field>1091</field>
</row>
<row>
<SearchPhrase>curtain designs</SearchPhrase>
<field>1064</field>
</row>
<row>
<SearchPhrase>baku</SearchPhrase>
<field>1000</field>
</row>
</data>
<rows>10</rows>
<rows_before_limit_at_least>141137</rows_before_limit_at_least>
</result>
Sütun adı kabul edilebilir bir biçime sahip değilse, sadece ‘field’ eleman adı olarak kullanılır. Genel olarak, XML yapısı JSON yapısını izler. Just as for JSON, invalid UTF-8 sequences are changed to the replacement character <20> so the output text will consist of valid UTF-8 sequences.
Dize değerlerinde, karakterler <
ve &
olarak kaç arear <
ve &
.
Diziler olarak çıktı <array><elem>Hello</elem><elem>World</elem>...</array>
ve tuples olarak <tuple><elem>Hello</elem><elem>World</elem>...</tuple>
.
CapnProto
Cap'n Proto, Protokol Tamponlarına ve tasarrufuna benzer, ancak JSON veya MessagePack gibi olmayan bir ikili mesaj biçimidir.
Cap'n Proto mesajları kesinlikle yazılır ve kendi kendini tanımlamaz, yani harici bir şema açıklamasına ihtiyaç duyarlar. Şema anında uygulanır ve her sorgu için önbelleğe alınır.
$ cat capnproto_messages.bin | clickhouse-client --query "INSERT INTO test.hits FORMAT CapnProto SETTINGS format_schema='schema:Message'"
Nerede schema.capnp
bu gibi görünüyor:
struct Message {
SearchPhrase @0 :Text;
c @1 :Uint64;
}
Serializasyon etkilidir ve genellikle sistem yükünü arttırmaz.
Ayrıca bakınız Biçim Şeması.
Protobuf
Protobuf-bir Protokol Tamp Buffonları biçimli.
Bu biçim, bir dış biçim şeması gerektirir. Şema sorgular arasında önbelleğe alınır.
ClickHouse hem destekler proto2
ve proto3
sözdizimiler. Tekrarlanan / isteğe bağlı / gerekli alanlar desteklenir.
Kullanım örnekleri:
SELECT * FROM test.table FORMAT Protobuf SETTINGS format_schema = 'schemafile:MessageType'
cat protobuf_messages.bin | clickhouse-client --query "INSERT INTO test.table FORMAT Protobuf SETTINGS format_schema='schemafile:MessageType'"
dosya nerede schemafile.proto
bu gibi görünüyor:
syntax = "proto3";
message MessageType {
string name = 1;
string surname = 2;
uint32 birthDate = 3;
repeated string phoneNumbers = 4;
};
İletişim kuralı arabellekleri' ileti türü Tablo sütunları ve alanları arasındaki yazışmaları bulmak için clickhouse adlarını karşılaştırır.
Bu karşılaştırma büyük / küçük harf duyarsız ve karakterler _
(alt çizgi) ve .
(nokta) eşit olarak kabul edilir.
Bir sütun türleri ve protokol arabellekleri ileti alanı farklıysa, gerekli dönüştürme uygulanır.
İç içe geçmiş mesajlar desteklenir. Örneğin, alan için z
aşağıdaki ileti türünde
message MessageType {
message XType {
message YType {
int32 z;
};
repeated YType y;
};
XType x;
};
ClickHouse adlı bir sütun bulmaya çalışır x.y.z
(veya x_y_z
veya X.y_Z
ve benzeri).
İç içe mesajlar giriş veya çıkış a için uygundur iç içe veri yapıları.
Böyle bir protobuf şemasında tanımlanan varsayılan değerler
syntax = "proto2";
message MessageType {
optional int32 result_per_page = 3 [default = 10];
}
uygulan ;mamaktadır; tablo varsayılanları bunların yerine kullanılır.
ClickHouse girişleri ve çıkışları protobuf mesajları length-delimited
biçimli.
Bu, her mesajın uzunluğunu bir olarak yazmadan önce anlamına gelir varint.
Ayrıca bakınız popüler dillerde uzunlukla ayrılmış protobuf mesajları nasıl okunur / yazılır.
Avro
Apache Avro Apache'nin Hadoop projesi kapsamında geliştirilen satır odaklı veri serileştirme çerçevesidir.
ClickHouse Avro biçimi okuma ve yazma destekler Avro veri dosyaları.
Veri Türleri Eşleştirme
Aşağıdaki tablo, desteklenen veri türlerini ve Clickhouse'la nasıl eşleştiğini gösterir veri türleri içinde INSERT
ve SELECT
sorgular.
Avro veri türü INSERT |
ClickHouse veri türü | Avro veri türü SELECT |
---|---|---|
boolean , int , long , float , double |
Int(8/16/32), Uİnt(8/16/32) | int |
boolean , int , long , float , double |
Int64, Uİnt64 | long |
boolean , int , long , float , double |
Float32 | float |
boolean , int , long , float , double |
Float64 | double |
bytes , string , fixed , enum |
Dize | bytes |
bytes , string , fixed |
FixedString(N) | fixed(N) |
enum |
Enum (8/16) | enum |
array(T) |
Dizi(T) | array(T) |
union(null, T) , union(T, null) |
Null (T) | union(null, T) |
null |
Null (Hiçbir Şey) | null |
int (date) * |
Tarihli | int (date) * |
long (timestamp-millis) * |
DateTime64 (3) | long (timestamp-millis) * |
long (timestamp-micros) * |
DateTime64 (6) | long (timestamp-micros) * |
Desteklenmeyen Avro veri türleri: record
(non-root), map
Desteklenmeyen Avro mantıksal veri türleri: uuid
, time-millis
, time-micros
, duration
Veri Ekleme
Bir Avro dosyasından ClickHouse tablosuna veri eklemek için:
$ cat file.avro | clickhouse-client --query="INSERT INTO {some_table} FORMAT Avro"
Giriş Avro dosyasının kök şeması olmalıdır record
tür.
ClickHouse tablo sütunları ve Avro şema alanları arasındaki yazışmaları bulmak için adlarını karşılaştırır. Bu karşılaştırma büyük / küçük harf duyarlıdır. Kullanılmayan alanlar atlanır.
ClickHouse tablo sütunlarının veri türleri, eklenen Avro verilerinin karşılık gelen alanlarından farklı olabilir. Veri eklerken, ClickHouse veri türlerini yukarıdaki tabloya göre yorumlar ve sonra döküm karşılık gelen sütun türüne veri.
Veri Seçme
ClickHouse tablosundan bir Avro dosyasına veri seçmek için:
$ clickhouse-client --query="SELECT * FROM {some_table} FORMAT Avro" > file.avro
Sütun adları gerekir:
- ile başla
[A-Za-z_]
- daha sonra sadece içerir
[A-Za-z0-9_]
Çıkış Avro dosya sıkıştırma ve senkronizasyon aralığı ile yapılandırılabilir output_format_avro_codec ve output_format_avro_sync_interval sırasıyla.
AvroConfluent
AvroConfluent yaygın olarak kullanılan tek nesne Avro mesajları çözme destekler Kafka ve Confluent Şema Kayıt.
Her Avro iletisi, şema Kayıt defterinin yardımıyla gerçek şemaya çözülebilen bir şema kimliği gömer.
Şemalar çözüldükten sonra önbelleğe alınır.
Şema kayıt defteri URL'si ile yapılandırılır format_avro_schema_registry_url
Veri Türleri Eşleştirme
Aynı olarak Avro
Kullanma
Şema çözünürlüğünü hızlı bir şekilde doğrulamak için şunları kullanabilirsiniz kafkasat ile clickhouse-yerel:
$ kafkacat -b kafka-broker -C -t topic1 -o beginning -f '%s' -c 3 | clickhouse-local --input-format AvroConfluent --format_avro_schema_registry_url 'http://schema-registry' -S "field1 Int64, field2 String" -q 'select * from table'
1 a
2 b
3 c
Kullanmak AvroConfluent
ile Kafka:
CREATE TABLE topic1_stream
(
field1 String,
field2 String
)
ENGINE = Kafka()
SETTINGS
kafka_broker_list = 'kafka-broker',
kafka_topic_list = 'topic1',
kafka_group_name = 'group1',
kafka_format = 'AvroConfluent';
SET format_avro_schema_registry_url = 'http://schema-registry';
SELECT * FROM topic1_stream;
!!! note "Uyarıcı"
Ayar format_avro_schema_registry_url
yapılandırılmış olması gerekiyor users.xml
yeniden başlattıktan sonra değerini korumak için.
Parke
Apache Parke hadoop ekosisteminde yaygın bir sütunlu depolama biçimidir. ClickHouse, bu format için okuma ve yazma işlemlerini destekler.
Veri Türleri Eşleştirme
Aşağıdaki tablo, desteklenen veri türlerini ve Clickhouse'la nasıl eşleştiğini gösterir veri türleri içinde INSERT
ve SELECT
sorgular.
Parke veri türü (INSERT ) |
ClickHouse veri türü | Parke veri türü (SELECT ) |
---|---|---|
UINT8 , BOOL |
Uİnt8 | UINT8 |
INT8 |
Int8 | INT8 |
UINT16 |
Uınt16 | UINT16 |
INT16 |
Int16 | INT16 |
UINT32 |
Uİnt32 | UINT32 |
INT32 |
Int32 | INT32 |
UINT64 |
Uİnt64 | UINT64 |
INT64 |
Int64 | INT64 |
FLOAT , HALF_FLOAT |
Float32 | FLOAT |
DOUBLE |
Float64 | DOUBLE |
DATE32 |
Tarihli | UINT16 |
DATE64 , TIMESTAMP |
DateTime | UINT32 |
STRING , BINARY |
Dize | STRING |
— | FixedString | STRING |
DECIMAL |
Ondalık | DECIMAL |
ClickHouse yapılandırılabilir hassas destekler Decimal
tür. Bu INSERT
sorgu parke davranır DECIMAL
ClickHouse olarak yazın Decimal128
tür.
Desteklen datameyen veri türleri: DATE32
, TIME32
, FIXED_SIZE_BINARY
, JSON
, UUID
, ENUM
.
ClickHouse tablo sütunlarının veri türleri, eklenen parke verilerinin ilgili alanlarından farklı olabilir. Veri eklerken, ClickHouse veri türlerini yukarıdaki tabloya göre yorumlar ve sonra döküm ClickHouse tablo sütunu için ayarlanmış olan bu veri türüne ait veriler.
Veri ekleme ve seçme
Bir dosyadan parke verilerini ClickHouse tablosuna aşağıdaki komutla ekleyebilirsiniz:
$ cat {filename} | clickhouse-client --query="INSERT INTO {some_table} FORMAT Parquet"
Bir ClickHouse tablosundan veri seçin ve aşağıdaki komutla parke formatında bazı dosyaya kaydedebilirsiniz:
$ clickhouse-client --query="SELECT * FROM {some_table} FORMAT Parquet" > {some_file.pq}
Hadoop ile veri alışverişi yapmak için şunları kullanabilirsiniz HDFS tablo motoru.
ORC
Apache ORCC hadoop ekosisteminde yaygın bir sütunlu depolama biçimidir. Bu formatta yalnızca Clickhouse'a veri ekleyebilirsiniz.
Veri Türleri Eşleştirme
Aşağıdaki tablo, desteklenen veri türlerini ve Clickhouse'la nasıl eşleştiğini gösterir veri türleri içinde INSERT
sorgular.
Orc veri türü (INSERT ) |
ClickHouse veri türü |
---|---|
UINT8 , BOOL |
Uİnt8 |
INT8 |
Int8 |
UINT16 |
Uınt16 |
INT16 |
Int16 |
UINT32 |
Uİnt32 |
INT32 |
Int32 |
UINT64 |
Uİnt64 |
INT64 |
Int64 |
FLOAT , HALF_FLOAT |
Float32 |
DOUBLE |
Float64 |
DATE32 |
Tarihli |
DATE64 , TIMESTAMP |
DateTime |
STRING , BINARY |
Dize |
DECIMAL |
Ondalık |
ClickHouse yapılandırılabilir hassas destekler Decimal
tür. Bu INSERT
sorgu Orc davranır DECIMAL
ClickHouse olarak yazın Decimal128
tür.
Desteklenmeyen Orc veri türleri: DATE32
, TIME32
, FIXED_SIZE_BINARY
, JSON
, UUID
, ENUM
.
ClickHouse tablo sütunlarının veri türlerinin karşılık gelen ORC veri alanları ile eşleşmesi gerekmez. Veri eklerken, ClickHouse veri türlerini yukarıdaki tabloya göre yorumlar ve sonra döküm veri türü için veri kümesi ClickHouse tablo sütun.
Veri Ekleme
Bir dosyadan Orc verilerini ClickHouse tablosuna aşağıdaki komutla ekleyebilirsiniz:
$ cat filename.orc | clickhouse-client --query="INSERT INTO some_table FORMAT ORC"
Hadoop ile veri alışverişi yapmak için şunları kullanabilirsiniz HDFS tablo motoru.
Biçim Şeması
Biçim şemasını içeren dosya adı, ayar tarafından ayarlanır format_schema
.
Biçim onelerinden biri kullanıldığında bu ayarı ayarlamak gerekir Cap'n Proto
ve Protobuf
.
Biçim şeması, bir dosya adının ve bu dosyadaki bir ileti türünün adının birleşimidir ve iki nokta üst üste ile sınırlandırılmıştır,
e.g. schemafile.proto:MessageType
.
Dosya, format için standart uzantıya sahipse (örneğin, .proto
için Protobuf
),
ihmal edilebilir ve bu durumda, biçim şeması şöyle görünür schemafile:MessageType
.
Eğer giriş veya çıkış veri üzerinden müşteri in the interaktif mod biçim şe themasında belirtilen dosya adı mutlak bir yol veya istemci üzerinde geçerli dizine göre bir yol içerebilir. Eğer istemci kullanıyorsanız Toplu Modu, şemanın yolu güvenlik nedeniyle göreceli olmalıdır.
Eğer giriş veya çıkış veri üzerinden HTTP arayüzü biçim şemasında belirtilen dosya adı belirtilen dizinde bulunmalıdır format_schema_path sunucu yapılandırmasında.
Atlama Hataları
Gibi bazı format suchlar CSV
, TabSeparated
, TSKV
, JSONEachRow
, Template
, CustomSeparated
ve Protobuf
ayrıştırma hatası oluşursa kırık satırı atlayabilir ve bir sonraki satırın başından ayrıştırmaya devam edebilir. Görmek ınput_format_allow_errors_num ve
ınput_format_allow_errors_ratio ayarlar.
Sınırlamalar:
- Ayrıştırma hatası durumunda
JSONEachRow
yeni satıra (veya EOF) kadar tüm verileri atlar, bu nedenle satırlar AŞAĞIDAKİLERLE sınırlandırılmalıdır\n
hataları doğru saymak için. Template
veCustomSeparated
bir sonraki satırın başlangıcını bulmak için son sütundan sonra sınırlayıcı ve satırlar arasındaki sınırlayıcıyı kullanın, Bu nedenle hataları atlamak yalnızca en az biri boş değilse çalışır.