ClickHouse/docs/tr/sql-reference/functions/index.md
Ivan Blinkov d91c97d15d
[docs] replace underscores with hyphens (#10606)
* Replace underscores with hyphens

* remove temporary code

* fix style check

* fix collapse
2020-04-30 21:19:18 +03:00

5.5 KiB
Raw Blame History

machine_translated machine_translated_rev toc_folder_title toc_priority toc_title
true e8cd92bba3 İşlevler 32 Giriş

İşlevler

En az* iki tür fonksiyon vardır-düzenli Fonksiyonlar (sadece denir “functions”) and aggregate functions. These are completely different concepts. Regular functions work as if they are applied to each row separately (for each row, the result of the function doesnt depend on the other rows). Aggregate functions accumulate a set of values from various rows (i.e. they depend on the entire set of rows).

Bu bölümde düzenli işlevleri tartışıyoruz. Toplama işlevleri için bölüme bakın “Aggregate functions”.

* - Üçüncü bir işlev türü vardır arrayJoin fonksiyon aittir; tablo fonksiyonları da ayrı ayrı belirtilebilir.*

Güçlü Yazarak

Standart SQL aksine, ClickHouse güçlü yazarak vardır. Başka bir deyişle, türler arasında örtük dönüşümler yapmaz. Her işlev belirli bir tür kümesi için çalışır. Bu, bazen tür dönüştürme işlevlerini kullanmanız gerektiği anlamına gelir.

Ortak Subexpression Eliminasyonu

Aynı AST (aynı kayıt veya sözdizimsel ayrıştırma aynı sonucu) olan bir sorgudaki tüm ifadeler aynı değerlere sahip olarak kabul edilir. Bu tür ifadeler bir kez birleştirilir ve yürütülür. Aynı alt sorgular da bu şekilde elimine edilir.

Sonuç türleri

Tüm işlevler sonuç olarak tek bir dönüş döndürür (birkaç değer değil, sıfır değer değil). Sonuç türü genellikle değerlerle değil, yalnızca bağımsız değişken türleriyle tanımlanır. Özel durumlar tupleElement işlevi (a.n işleci) ve tofixedstring işlevidir.

Devamlılar

Basitlik için, bazı işlevler yalnızca bazı argümanlar için sabitlerle çalışabilir. Örneğin, LİKE operatörünün doğru argümanı sabit olmalıdır. Hemen hemen tüm işlevler sabit argümanlar için bir sabit döndürür. İstisna, rasgele sayılar üreten işlevlerdir. Bu now işlev, farklı zamanlarda çalıştırılan sorgular için farklı değerler döndürür, ancak sonuç sabit olarak kabul edilir, çünkü sabitlik yalnızca tek bir sorguda önemlidir. Sabit bir ifade de sabit olarak kabul edilir (örneğin, LİKE operatörünün sağ yarısı birden fazla sabitten oluşturulabilir).

Fonksiyonlar sabit ve sabit olmayan argümanlar için farklı şekillerde uygulanabilir (farklı kod yürütülür). Ancak, bir sabit ve yalnızca aynı değeri içeren gerçek bir sütun için sonuçlar birbiriyle eşleşmelidir.

NULL işleme

Fonksiyonlar aşağıdaki davranışlara sahiptir:

  • İşlevin argümanlarından en az biri ise NULL, fonksiyon sonucu da NULL.
  • Her işlevin açıklamasında ayrı ayrı belirtilen özel davranış. ClickHouse kaynak kodunda, bu işlevler UseDefaultImplementationForNulls=false.

Süreklilik

Functions cant change the values of their arguments any changes are returned as the result. Thus, the result of calculating separate functions does not depend on the order in which the functions are written in the query.

Hata işleme

Veriler geçersizse bazı işlevler bir istisna oluşturabilir. Bu durumda, sorgu iptal edilir ve bir hata metni istemciye döndürülür. Dağıtılmış işlem için sunuculardan birinde bir özel durum oluştuğunda, diğer sunucular da sorguyu iptal etmeye çalışır.

Argüman Ifadelerinin değerlendirilmesi

Hemen hemen tüm programlama dillerinde, argümanlardan biri belirli operatörler için değerlendirilmeyebilir. Bu genellikle operatörler &&, ||, ve ?:. Ancak Clickhouseda, fonksiyonların (operatörler) argümanları her zaman değerlendirilir. Bunun nedeni, sütunların tüm bölümlerinin her satırı ayrı ayrı hesaplamak yerine bir kerede değerlendirilmesidir.

Dağıtılmış Sorgu işleme işlevleri gerçekleştirme

Dağıtılmış sorgu işleme için, sorgu işlemenin mümkün olduğu kadar çok aşaması uzak sunucularda gerçekleştirilir ve aşamaların geri kalanı (Ara sonuçları ve bundan sonra her şeyi birleştirme) istek sahibi sunucuda gerçekleştirilir.

Bu, işlevlerin farklı sunucularda gerçekleştirilebileceği anlamına gelir. Örneğin, sorguda SELECT f(sum(g(x))) FROM distributed_table GROUP BY h(y),

  • eğer bir distributed_table en az iki parçaya sahiptir, fonksiyonlar g ve h uzak sunucularda gerçekleştirilir ve işlev f ıstekçi sunucuda gerçekleştirilir.
  • eğer bir distributed_table sadece bir parça var, tüm f, g, ve h fonksiyonlar bu shardın sunucusunda gerçekleştirilir.

Bir işlevin sonucu genellikle hangi sunucuda gerçekleştirildiğine bağlı değildir. Ancak, bazen bu önemlidir. Örneğin, sözlüklerle çalışan işlevler, üzerinde çalışmakta oldukları sunucuda bulunan sözlüğü kullanır. Başka bir örnek ise hostName yapmak için üzerinde çalıştığı sunucunun adını döndüren işlev GROUP BY sunucular tarafından bir SELECT sorgu.

Eğer sorguda bir işlevi istemcisi sunucu üzerinde yapılır, ama uzak sunucularda bunu gerçekleştirmek için ihtiyacınız varsa, bir saramaz mısın any toplama işlevi veya bir anahtara ekleyin GROUP BY.

Orijinal makale