Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunun için geçerlidir:
Databricks SQL
Databricks Runtime
Azure Databricks, veri türleri arasındaki çakışmaları çözmek için çeşitli kurallar kullanır:
- Yükseltme , bir türü güvenli bir şekilde daha geniş bir türe genişletir.
- Örtük aşağı noktaya yayın bir türü daraltır. Terfinin tersi.
- Örtük çapraz yayın, bir türü başka bir tip ailesine ait türe dönüştürür.
Ayrıca, birçok tür arasında açıkça atama da yapabilirsiniz:
- cast işlevi çoğu tür arasında tür dönüşümü yapar ve yapamazsa hataları döndürür.
- try_cast işleviatama işlevi gibi çalışır ancak geçersiz değerler geçirildiğinde NULL döndürür.
- Sağlanan biçim yönergelerini kullanarak türler arasında geçiş yapılan diğer yerleşik işlevler .
Tür yükseltme
Tür yükseltme, bir türü özgün türün tüm olası değerlerini içeren aynı tür aile türünde başka bir türe dönüştürme işlemidir.
Bu nedenle tür yükseltme güvenli bir işlemdir. Örneğin TINYINT , ile arasında -128127bir aralığı vardır. Tüm olası değerleri güvenli bir şekilde olarak INTEGERyükseltilebilir.
Tür önceliği listesi
Tür öncelik listesi , belirli bir veri türünün değerlerinin örtük olarak başka bir veri türüne yükseltilip yükseltilemeyeceğini tanımlar.
| Veri türü | Öncelik listesi (en dardan en genişe) |
|---|---|
| TINYINT | TINYINT -> SMALLINT -> INT -> BIGINT -> DECIMAL -> FLOAT (1) -> DOUBLE |
| SMALLINT | SMALLINT -> INT -> BIGINT -> DECIMAL -> FLOAT (1) -> DOUBLE |
| INT | INT -> BIGINT -> DECIMAL -> FLOAT (1) -> DOUBLE |
| BIGINT | BIGINT -> DECIMAL -> FLOAT (1) -> DOUBLE |
| DECIMAL | Ondalık -> Kesirli (1) -> Çift |
| FLOAT | FLOAT (1) -> ÇIFT |
| DOUBLE | DOUBLE |
| DATE | TARİh -> ZAMAN DAMGASI |
| TIMESTAMP | TIMESTAMP |
| ARRAY | DIZI (2) |
| BINARY | BINARY |
| BOOLEAN | BOOLEAN |
| INTERVAL | INTERVAL |
| COĞRAFYA | COĞRAFYA(ANY) |
| GEOMETRİ | GEOMETRY(ANY) |
| MAP | MAP (2) |
| STRING | STRING |
| STRUCT | YAPI (2) |
| VARIANT | VARIANT |
| OBJECT | NESNE (3) |
(1) Duyarlık kaybını önlemek için en az yaygın tür çözümlemesiFLOAT atlanır.
(2) Karmaşık bir tür için öncelik kuralı, bileşen öğelerine özyinelemeli olarak uygulanır.
(3)OBJECT yalnızca içinde VARIANTbulunur.
Dizeler ve NULL
Özel kurallar için STRING geçerlidir ve yazılmamış NULL:
-
NULLbaşka bir türe yükseltilebilir. -
STRING, ,BIGINT,BINARY,BOOLEAN,DATEveDOUBLEINTERVALolarak yükseltilebilirTIMESTAMP. Gerçek dize değeri en az ortak türe atanamıyorsa Azure Databricks bir çalışma zamanı hatası oluşturur. Dize değerine yükseltmeINTERVALişlemi aralık birimleriyle eşleşmelidir.
Tür önceliği grafiği
Bu, öncelik hiyerarşisinin tür öncelik listesi ile dizeleri ve DLL kurallarını birleştiren grafiksel bir gösterimidir.
En az ortak tür çözümlemesi
Bir tür kümesindeki en az yaygın tür, tür kümesinin tüm öğeleri tarafından tür önceliği grafiğinden ulaşılabilen en dar türdür.
Aşağıdakiler için en az yaygın tür çözümlemesi kullanılır:
- Belirli bir tür parametresini bekleyen bir işlevin daha dar bir tür bağımsız değişkeni kullanılarak çağrılıp çağrılamayacağına karar verin.
- Birden çok parametre için ortak bir bağımsız değişken türü bekleyen bir işlevin bağımsız değişken türünü türetin, örneğin coalesce, in, least veya greatest.
- Aritmetik işlemler veya karşılaştırmalar gibi işleçler için işlenen türlerini türetin.
- case ifadesi gibi ifadeler için sonuç türünü belirleyin.
- Dizi ve eşleme oluşturucuları için öğe, anahtar veya değer türlerini türetin.
- UNION, INTERSECT veya EXCEPT küme işleçlerinin sonuç türünü türetin.
En az ortak tür olarak çözümlenirse FLOATözel kurallar uygulanır. Katkıda bulunan türlerden herhangi biri tam bir sayısal tür (TINYINT, SMALLINT, INTEGER, BIGINTveya DECIMAL) ise, olası basamak kaybını önlemek için en az yaygın tür gönderiliyordur DOUBLE .
En az yaygın tür STRING olduğunda, harmanlama harmanlama önceliği kurallarıdoğrultusunda hesaplanır.
Örtük aşağı ve çapraz yayın
Azure Databricks bu örtük atama biçimlerini yalnızca işlev ve işleç çağırmasında ve yalnızca amacı kesin olarak belirleyebildiği durumlarda çalıştırır.
Örtük aşağı dönüşüm
Örtük downcasting, daha geniş bir türü otomatik olarak daha dar bir türe yayınlar ve atamayı açıkça belirtmenize gerek kalmadan. Alta aktarma kullanışlıdır, ancak gerçek değerin dar türde temsil edilememesi durumunda beklenmeyen çalışma zamanı hataları riskini taşır.
Aşağı yayın türü öncelik listesini ters sırada uygular.
GEOGRAPHYveGEOMETRYveri türleri asla downcast edilmez.
Örtük çapraz yayın
Örtük çapraz yayın, atamayı açıkça belirtmenize gerek kalmadan bir tür ailesinden diğerine bir değer yayınlar.
Azure Databricks, aşağıdakilerden örtük çapraz yayınları destekler:
-
BINARY,GEOGRAPHYveGEOMETRYhariç, herhangi bir basit türüSTRING'ye dönüştürün. -
STRINGherhangi bir basit türe,GEOGRAPHYveGEOMETRYhariç A
-
İşlev çağırmada atama
Çözümlenen bir işlev veya işleç verildiğinde, her parametre ve bağımsız değişken çifti için aşağıdaki kurallar listelendikleri sırayla uygulanır:
Desteklenen parametre türü bağımsız değişkenin tür öncelik grafiğinin bir parçasıysa, Azure Databricks bağımsız değişkeni bu parametre türüne yükselter .
Çoğu durumda işlev açıklaması, "herhangi bir sayısal tür" gibi desteklenen türleri veya zinciri açıkça belirtir.
Örneğin, sin(expr) üzerinde
DOUBLEçalışır ancak herhangi bir sayısal değeri kabul eder.Beklenen parametre türü bir
STRINGise ve bağımsız değişken basit bir türse Azure Databricks bağımsız değişkenini dize parametre türüne çapraz yayınlar .Örneğin, alt dize (str, start, len) bir
strolmasını beklerSTRING. Bunun yerine, sayısal veya tarih saat türünü geçirebilirsiniz.Bağımsız değişken türü bir
STRINGise ve beklenen parametre türü basit bir türse, Azure Databricks dize bağımsız değişkenini desteklenen en geniş parametre türüne çapraz yayınlar .Örneğin, date_add(tarih, gün) ve
DATEINTEGERdeğerlerini bekler.Çağrıyı iki
ile gerçekleştirirseniz , Azure Databricks ilk i ve ikinci i bir olarak dönüştürür . İşlev,
INTEGERveyaDATEgibi sayısal bir tür bekliyorsa, ancak bağımsız değişkenDOUBLEveyaTIMESTAMPgibi daha genel bir türse, Azure Databricks bağımsız değişkenin tipini o parametre türüne örtük olarak tip düşürmesi yapar.Örneğin, date_add(date, days) bir
DATEveINTEGERbekler.date_add()ileTIMESTAMPveBIGINTçağırırsanız, Azure DatabricksTIMESTAMP'i zaman bileşenini kaldırarakDATE'ye veBIGINT'yi birINTEGER'ye indirger.Aksi takdirde Azure Databricks bir hata oluşturur.
Examples
İşlev, coalesceen az ortak türü paylaştığı sürece herhangi bir bağımsız değişken türü kümesini kabul eder.
Sonuç türü, bağımsız değişkenlerin en az kullanılan türüdür.
-- The least common type of TINYINT and BIGINT is BIGINT
> SELECT typeof(coalesce(1Y, 1L, NULL));
BIGINT
-- INTEGER and DATE do not share a precedence chain or support crosscasting in either direction.
> SELECT typeof(coalesce(1, DATE'2020-01-01'));
Error: DATATYPE_MISMATCH.DATA_DIFF_TYPES
-- Both are ARRAYs and the elements have a least common type
> SELECT typeof(coalesce(ARRAY(1Y), ARRAY(1L)))
ARRAY<BIGINT>
-- The least common type of INT and FLOAT is DOUBLE
> SELECT typeof(coalesce(1, 1F))
DOUBLE
> SELECT typeof(coalesce(1L, 1F))
DOUBLE
> SELECT typeof(coalesce(1BD, 1F))
DOUBLE
-- The least common type between an INT and STRING is BIGINT
> SELECT typeof(coalesce(5, '6'));
BIGINT
-- The least common type is a BIGINT, but the value is not BIGINT.
> SELECT coalesce('6.1', 5);
Error: CAST_INVALID_INPUT
-- The least common type between a DECIMAL and a STRING is a DOUBLE
> SELECT typeof(coalesce(1BD, '6'));
DOUBLE
-- Two distinct explicit collations result in an error
> SELECT collation(coalesce('hello' COLLATE UTF8_BINARY,
'world' COLLATE UNICODE));
Error: COLLATION_MISMATCH.EXPLICIT
-- The resulting collation between two distinct implicit collations is indeterminate
> SELECT collation(coalesce(c1, c2))
FROM VALUES('hello' COLLATE UTF8_BINARY,
'world' COLLATE UNICODE) AS T(c1, c2);
NULL
-- The resulting collation between a explicit and an implicit collations is the explicit collation.
> SELECT collation(coalesce(c1 COLLATE UTF8_BINARY, c2))
FROM VALUES('hello',
'world' COLLATE UNICODE) AS T(c1, c2);
UTF8_BINARY
-- The resulting collation between an implicit and the default collation is the implicit collation.
> SELECT collation(coalesce(c1, 'world'))
FROM VALUES('hello' COLLATE UNICODE) AS T(c1, c2);
UNICODE
-- The resulting collation between the default collation and the indeterminate collation is the default collation.
> SELECT collation(coalesce(coalesce('hello' COLLATE UTF8_BINARY, 'world' COLLATE UNICODE), 'world'));
UTF8_BINARY
-- Least common type between GEOGRAPHY(srid) and GEOGRAPHY(ANY)
> SELECT typeof(coalesce(st_geogfromtext('POINT(1 2)'), to_geography('POINT(3 4)'), NULL));
geography(any)
-- Least common type between GEOMETRY(srid1) and GEOMETRY(srid2)
> SELECT typeof(coalesce(st_geomfromtext('POINT(1 2)', 4326), st_geomfromtext('POINT(3 4)', 3857), NULL));
geometry(any)
-- Least common type between GEOMETRY(srid1) and GEOMETRY(ANY)
> SELECT typeof(coalesce(st_geomfromtext('POINT(1 2)', 4326), to_geometry('POINT(3 4)'), NULL));
geometry(any)
substring işlevi, dize için STRING türünde ve başlangıç ve uzunluk parametreleri için INTEGER türünde bağımsız değişkenler bekler.
-- Promotion of TINYINT to INTEGER
> SELECT substring('hello', 1Y, 2);
he
-- No casting
> SELECT substring('hello', 1, 2);
he
-- Casting of a literal string
> SELECT substring('hello', '1', 2);
he
-- Downcasting of a BIGINT to an INT
> SELECT substring('hello', 1L, 2);
he
-- Crosscasting from STRING to INTEGER
> SELECT substring('hello', str, 2)
FROM VALUES(CAST('1' AS STRING)) AS T(str);
he
-- Crosscasting from INTEGER to STRING
> SELECT substring(12345, 2, 2);
23
|| (BİRLEŞTİR) dizeye örtük çapraz çevirmeye izin verir.
-- A numeric is cast to STRING
> SELECT 'This is a numeric: ' || 5.4E10;
This is a numeric: 5.4E10
-- A date is cast to STRING
> SELECT 'This is a date: ' || DATE'2021-11-30';
This is a date: 2021-11-30
date_add örtük aşağı yayın nedeniyle veya TIMESTAMPBIGINT ile çağrılabilir.
> SELECT date_add(TIMESTAMP'2011-11-30 08:30:00', 5L);
2011-12-05
date_add örtük çapraz tür dönüşümü nedeniyle STRING ile çağrılabilir.
> SELECT date_add('2011-11-30 08:30:00', '5');
2011-12-05