2012-07-07 11 views
30

yılında Struct dizisi Patlat Ve bu yukarıdaki masanınaşağıda çıktısını alabilirsiniz bir yolu var mı bu kovan Tablo aşağıda</p> <pre><code>CREATE EXTERNAL TABLE IF NOT EXISTS SampleTable ( USER_ID BIGINT, NEW_ITEM ARRAY<STRUCT<PRODUCT_ID: BIGINT,TIMESTAMPS:STRING>> ) </code></pre> <p>olan Hive

1015826235  [{"product_id":220003038067,"timestamps":"1340321132000"},{"product_id":300003861266,"timestamps":"1340271857000"}] 

yılında veridir diziyi patladıktan sonra HiveQL'den mi?

**USER_ID** | **PRODUCT_ID** | **TIMESTAMPS** 
------------+------------------+---------------- 
1015826235  220003038067  1340321132000 
1015826235  300003861266  1340271857000 

Yukarıdaki biçiminde çıkış almak için bu sorguyu yazdım

güncellendi, ancak bu bana istediğim şekilde bir sonuç vermiyor.

SELECT myTable1.myCol1,myTable2.myCol2 FROM sampletable st LATERAL VIEW 
explode(st.purchased_item.product_id) myTable1 AS myCol1 LATERAL VIEW 
explode(st.purchased_item.timestamps) myTable2 AS myCol2; 

Kimse yanlış yaptığım konusunda bana yardımcı olabilir mi? Herhangi bir öneri takdir edilecektir.

+0

Böyle bir şeye ne dersin? SampleTable yan görünümüdür prod_and_ts patlayabilir (NEW_ITEM) exploded_table gelen zaman damgalarını olarak user_id, product_id olarak prod_and_ts.product_id, prod_and_ts.timestamps seçmek ; –

+0

@ Mark, Teşekkürler Mark, Çalıştı, Bunu yanıt olarak gönderebilir miyim, böylece kabul edebilirim. Ayrıca bu soruya da bir göz atabilir misiniz? [http://stackoverflow.com/questions/11336950/joining-two-tables-in-hive-using-hiveqlhadoop](http://stackoverflow.com/questions/11336950/joining-two-tables-in-hive- kullanılarak-hiveqlhadoop). Kimse henüz bu soruya cevap vermediği için. Bana çok yardımcı olacak. Zaman ayırdığın için teşekkürler. – ferhan

+0

Yardım etmesine sevindim. Cevap gönderildi. Yakında diğer soruya bir göz atacağım! –

cevap

63

Yalnızca bir kez patlatmanız gerekir (LATERAL VIEW ile bağlantılı olarak). Patladıktan sonra, yapı tipinde olacak yeni bir sütun (örneğimde prod_and_ts adı verilir) kullanabilirsiniz. Ardından, istenen sonucu almak için bu yeni yapı sütununun product_id ve timestamps üyelerini çözebilirsiniz.

SELECT 
    user_id, 
    prod_and_ts.product_id as product_id, 
    prod_and_ts.timestamps as timestamps 
FROM 
    SampleTable 
    LATERAL VIEW explode(new_item) exploded_table as prod_and_ts; 
+0

oluşturmama yardımcı olabilirseniz ve ben de daha fazla teorik soru ile ilgili daha fazla teorik soru olduğu için, yayınladığım bir başka soruya yardımcı olabilirsiniz. [http://stackoverflow.com/questions/11404163 /custom-mapper-and-reducer-vs-hiveql](http://stackoverflow.com/questions/11404163/custom-mapper-and-reducer-vs-hiveql). Sizi çok rahatsız ettiğim için özür dilerim, burada çok fazla BÜYÜK VERİ uzmanı yok. İşte bu yüzden sana ping atıyorum. Tüm yardımlarınız için çok teşekkür ederim ... – ferhan

+0

Merhaba Mark, Tüm yardımlarınız için teşekkürler. Hive'deki Exploding Array of Struct ile ilgili benzer bir soru yayınladım ama bu kez veriler farklıydı. Bunu yapmanın mümkün olup olmadığını bir göz atabilir misin? [Http://stackoverflow.com/questions/11550651/exploding-array-of-struct-using-hiveql](http://stackoverflow.com/questions/11550651/exploding-array-of-struct-using-hiveql) – ferhan

+0

Merhaba İşareti, çoklu dizi > sütunları için görünümü nasıl patlayabilir ve oluşturabiliriz. isteğim üzerine yardım eder misiniz lütfen http://stackoverflow.com/questions/37282646/how-to-create-view-for-struct-fields-in-hive –

10

Eğer Hive 0.10 veya daha sonra ise, aynı zamanda inline(ARRAY<STRUCT[,STRUCT]>) kullanabilirsiniz. Bir yapı dizisini bir tabloya yayar.

+0

Bu yararlı bir cevaptır, ancak bu soruya tam olarak cevap vermez. Bu şekilde, üst düzey alan, yani 'USER_ID' sonuçlarda değil. – jkukul

İlgili konular