MaxCompute'te tek bir veri satırını birden fazla satıra bölmek için kullanıcı tanımlı tablo değerli işlev (UDTF) ile birlikte LATERAL VIEW yan tümcesini kullanabilirsiniz. Bu konuda LATERAL VIEW'ın nasıl kullanılacağı açıklanmaktadır.
Giriş
LATERAL VIEW, MaxCompute'te Array ve Map gibi karmaşık veri türlerini işlemek amacıyla yaygın olarak kullanılır. Standart bir SELECT ifadesi her girdi satırı için bir çıktı satırı döndürür. Ancak UDTF'ye genel bakış sayfasında belirtildiği üzere UDTF'nin girdisi ile çıktısı arasında bire-çok ilişkisi bulunur. Bu nedenle UDTF'yi doğrudan SELECT listesinde kullanamazsınız. Bu kısıtlamayı aşmak ve elde edilen verileri toplamak için UDTF ile birlikte LATERAL VIEW kullanarak tek bir veri satırını birden fazla satıra bölebilirsiniz.
LATERAL VIEW ifadesi OUTER anahtar sözcüğünü içeriyorsa (örneğin LATERAL VIEW OUTER ...) ve UDTF herhangi bir satır döndürmezse orijinal girdi satırı sonuç kümesinde korunur. UDTF tarafından oluşturulması beklenen tüm sütunlar NULL değerini alır.
Söz dizimi
LATERALVIEW: LATERAL VIEW [OUTER] <udtf_name>(<expression>) <table_alias> AS <columnAlias> (',' <columnAlias>)
fromClause: FROM <baseTable> (LATERALVIEW) [(LATERALVIEW) ...]
Parametreler
udtf_name: Gereklidir. Tek bir veri satırını birden fazla satıra bölmek için kullanılan UDTF'dir. Daha fazla bilgi için bkz. Diğer işlevlere genel bakış.
expression: Gereklidir. Bölünecek verileri içeren sütunun adıdır.
table_alias: Gereklidir. UDTF sonuç kümesi için takma addır.
columnAlias: Gereklidir. Satır bölme işlemiyle oluşturulan sütunlar için takma addır.
baseTable: Gereklidir. Kaynak tablodur.
FROM yan tümcesinden sonra birden fazla LATERAL VIEW ifadesi kullanabilirsiniz. Sonraki bir LATERAL VIEW ifadesi kendisinden önce gelen tüm tabloları ve sütun adlarını referans alabilir. Bu sayede farklı sütunlardaki verileri bölebilirsiniz.
Örnek veriler
pageAds tablosu şu üç sütunu içerir: pageid STRING, col1 ARRAY<INT> ve col2 ARRAY<STRING>. Veriler aşağıdaki gibidir.
|
|
|
|
|
|
|
|
|
|
|
|
Aşağıdaki ifadeler tabloyu oluşturur ve doldurur:
CREATE TABLE pageAds (pageid STRING,col1 ARRAY<INT>,col2 ARRAY<STRING>);
INSERT INTO pageAds VALUES ('front_page',ARRAY(1,2,3),ARRAY("a","b","c"));
INSERT INTO pageAds VALUES ('contact_page',ARRAY(3,4,5),ARRAY("d","e","f"));
Örnekler
-
Tek bir LATERAL VIEW ifadesi
-
Örnek 1: col1 sütununu bölün. Komut aşağıdaki gibidir:
SELECT pageid, col1_new, col2 FROM pageAds LATERAL VIEW EXPLODE(col1) adTable AS col1_new;Dönen sonuç aşağıdaki gibidir:
+--------------+------------+---------------+ | pageid | col1_new | col2 | +--------------+------------+---------------+ | front_page | 1 | ["a","b","c"] | | front_page | 2 | ["a","b","c"] | | front_page | 3 | ["a","b","c"] | | contact_page | 3 | ["d","e","f"] | | contact_page | 4 | ["d","e","f"] | | contact_page | 5 | ["d","e","f"] | +--------------+------------+---------------+ -
Örnek 2: col1 sütununu bölün ve toplama işlemi yapın. Komut aşağıdaki gibidir:
SELECT col1_new, COUNT(1) AS COUNT FROM pageAds LATERAL VIEW EXPLODE(col1) adTable AS col1_new GROUP BY col1_new;Dönen sonuç aşağıdaki gibidir:
+------------+------------+ | col1_new | count | +------------+------------+ | 1 | 1 | | 2 | 1 | | 3 | 2 | | 4 | 1 | | 5 | 1 | +------------+------------+
-
-
Birden fazla LATERAL VIEW ifadesi
col1 ve col2 sütunlarını bölün. Komut aşağıdaki gibidir:
SELECT pageid,mycol1, mycol2 FROM pageAds LATERAL VIEW EXPLODE(col1) myTable1 AS mycol1 LATERAL VIEW EXPLODE(col2) myTable2 AS mycol2;Dönen sonuç aşağıdaki gibidir:
+--------------+------------+------------+ | pageid | mycol1 | mycol2 | +--------------+------------+------------+ | front_page | 1 | a | | front_page | 1 | b | | front_page | 1 | c | | front_page | 2 | a | | front_page | 2 | b | | front_page | 2 | c | | front_page | 3 | a | | front_page | 3 | b | | front_page | 3 | c | | contact_page | 3 | d | | contact_page | 3 | e | | contact_page | 3 | f | | contact_page | 4 | d | | contact_page | 4 | e | | contact_page | 4 | f | | contact_page | 5 | d | | contact_page | 5 | e | | contact_page | 5 | f | +--------------+------------+------------+
İlgili konular
Verileri satırlar ve sütunlar arasında dönüştürmek için LATERAL VIEW ifadesini kullanabilirsiniz. Daha fazla bilgi için bkz. Satırları ve sütunları dönüştürmeye yönelik en iyi uygulamalar.