MULTI_KEYVALUE, tek bir çağrıda anahtar-değer biçimli bir dizeden birden çok değeri ayıklayan bir tablo işlevidir. Dizeyi split1 ile belirtilen sınırlayıcıyı kullanarak anahtar-değer çiftlerine böler, ardından her çifti split2 ile belirtilen sınırlayıcıyı kullanarak bir anahtara ve bir değere ayırır ve istenen anahtarların değerlerini döndürür.
Ververica Runtime (VVR) 3.0.0 veya sonraki sürümlere sahip Realtime Compute for Apache Flink tarafından desteklenir.
Söz dizimi
MULTI_KEYVALUE(VARCHAR str, VARCHAR split1, VARCHAR split2, VARCHAR key_name1, VARCHAR key_name2, ...)
MULTI_KEYVALUE bir tablo işlevi olduğundan, bunu bir lateral table birleştirme işlemiyle çağırın:
SELECT c1, c2
FROM T1, lateral table(MULTI_KEYVALUE(str, split1, split2, key1, key2))
as T(c1, c2);
Parametreler
| Parametre | Tür | Açıklama |
|---|---|---|
str |
VARCHAR |
Ayrıştırılacak dize. |
split1 |
VARCHAR |
Anahtar-değer çifti sınırlayıcısı. NULL ise boşluk kullanılır. Değer bir karakterden uzunsa her karakter bağımsız olarak geçerli bir sınırlayıcı olarak kabul edilir. |
split2 |
VARCHAR |
Anahtar-değer sınırlayıcısı. NULL ise boşluk kullanılır. Değer bir karakterden uzunsa her karakter bağımsız olarak geçerli bir sınırlayıcı olarak kabul edilir. |
key_name1, key_name2, ... |
VARCHAR |
Değerleri döndürülecek anahtarlar. Gerektiği kadar anahtar bağımsız değişkeni ekleyin. |
Ne zaman KEYVALUE kullanılmalı?
VVR 8.0.7 ve önceki sürümlerde aşağıdaki durumlardan herhangi biri söz konusuysa MULTI_KEYVALUE yerine KEYVALUE skaler işlevini kullanın:
split1,split2ve her birkey_namebağımsız değişkeni için tüm değerler sabit dizelerdir.Belirli bir motor sürümünü çalıştıran bir ad alanı içinde,
MULTI_KEYVALUEfarklısplit1vesplit2sınırlayıcılarıyla birden çok kez çağrılır (aynı dağıtım içinde veya birden çok dağıtım arasında).KEYVALUEtekrarlanan çağrılarda aynı alandan farklı anahtar adlarını ayrıştırdığında Flink, ara ayrıştırma sonuçlarını yeniden kullanır ve ikili bir ayrıştırma mekanizması uygular; bu da genel işleme verimliliğini artırır.KEYVALUEbir skaler işlev olduğundan her anahtar için bir kez çağırın.
Örnek
Temel kullanım
Çift sınırlayıcısı olarak ; ve anahtar-değer sınırlayıcısı olarak = kullanarak k1=v1;k2=v2 ifadesini ayrıştırın:
-- Input: str = 'k1=v1;k2=v2', split1 = ';', split2 = '='
SELECT c1, c2
FROM T1, lateral table(MULTI_KEYVALUE(str, split1, split2, 'k1', 'k2'))
as T(c1, c2);
-- Output: c1 = 'v1', c2 = 'v2'
Davranış referansı
Aşağıdaki tabloda MULTI_KEYVALUE işlevinin çeşitli sınırlayıcı kombinasyonlarını ve uç durumları nasıl ele aldığı gösterilmektedir. Tüm satırlar, yukarıda gösterilen sorgunun T1 tablosuna uygulanmasıyla elde edilmiştir.
Test verileri (T1 tablosu)
| str | split1 | split2 | key1 | key2 |
|---|---|---|---|---|
| k1=v1;k2=v2 | ; | = | k1 | k2 |
| NULL | ; | = | k1 | k2 |
| k1:v1;k2:v2 | ; | : | k1 | k3 |
| k1:v1;k2:v2 | ; | = | k1 | k2 |
| k1:v1;k2:v2 | , | : | k1 | k2 |
| k1:v1;k2=v2 | ; | : | k1 | k2 |
| k1:v1abck2:v2 | abc | : | k1 | k2 |
| k1:v1;k2=v2 | ; | := | k1 | k2 |
| k1:v1 k2:v2 | NULL | : | k1 | k2 |
| k1 v1;k2 v2 | ; | NULL | k1 | k2 |
Test ifadesi
SELECT c1, c2
FROM T1, lateral table(MULTI_KEYVALUE(str, split1, split2, key1, key2))
as T(c1, c2);
Sonuçlar
| c1 | c2 |
|---|---|
| v1 | v2 |
| NULL | NULL |
| v1 | NULL |
| NULL | NULL |
| NULL | NULL |
| v1 | NULL |
| v1 | v2 |
| v1 | v2 |
| v1 | v2 |
| v1 | v2 |
Sonuçlardan çıkarılan temel gözlemler:
Satır:
strdeğeriNULLolduğundan tüm çıktı değerleriNULLolur.Satır:
k3anahtarı dizede bulunmadığındanc2değeriNULLolur.Satır: Gerçek sınırlayıcı
:ikensplit2değeri=olduğundan eşleşme sağlanamaz ve her iki çıktı daNULLolur.Satır: Gerçek çift sınırlayıcısı
;ikensplit1değeri,olduğundan eşleşme sağlanamaz ve her iki çıktı daNULLolur.Satır:
split2 = ':'değerik1:v1ifadesiyle eşleşir ancakk2=v2ifadesiyle eşleşmez; bu durumdac1 = 'v1'vec2 = NULLolur.Satır:
split1 = 'abc'değeri bir karakterden uzun olduğu içina,bveckarakterlerinin her biri bağımsız sınırlayıcı olarak kabul edilir; bu sayedek1:v1abck2:v2ifadesi doğru şekilde bölünür.Satır:
split2 = ':='değeri bir karakterden uzun olduğu için hem:hem de=geçerli anahtar-değer sınırlayıcıları olarak kabul edilir; bu sayede hemk1:v1hem dek2=v2ifadeleriyle eşleşme sağlanır.9-10. Satırlar:
NULLsınırlayıcılar varsayılan olarak boşluk karakterine dönüşür.