2017-03-16 5 views
1

Ich habe eine Anforderung, * aus allen Spalten aus einer Struktur Hive auswählen.Wählen Sie alle Spalten eines Hive Struct

Hive Tabellenskript erstellen, ist hier unten

Create Table script

Select * aus der Tabelle zeigt jede Struktur als eine Spalte select * from table

Die Anforderung i haben alle Felder einer Struktur Sammlung anzuzeigen als eine Spalte im Bienenstock.

Die Benutzer sollten Spaltennamen nicht einzeln schreiben müssen. Hat jemand eine UDF dazu?

+0

Bitte ersetzen Sie die Bilder mit Text einschließlich einiger Datenabtastwert –

Antwort

0

Sie können die Ansicht am Anfang der Tabelle verwenden oder die Daten in anderen Tabellen basierend auf dem gewünschten Schema ausgeben. Syntax für Ansicht: -

create view foodmart.customerfs_view as select rcrm.customer_id ..... 
from foodmart.customerfs_view 
1

Demo

create table t 
(
    i int 
    ,s1 struct<id:int,birthday:date,fname:string> 
    ,s2 struct<id:int,lname:string> 
) 
; 

insert into t 
select 1 
     ,named_struct('id',333,'birthday',date '1941-10-13','fname','Paul') 
     ,named_struct('id',444,'lname','Simon') 
; 

insert into t 
select 2 
     ,named_struct('id',777,'birthday',date '1941-11-05','fname','Art') 
     ,named_struct('id',888,'lname','Garfunkel') 
; 

select * from t 
; 

+-----+---------------------------------------------------+--------------------------------+ 
| t.i |      t.s1      |    t.s2    | 
+-----+---------------------------------------------------+--------------------------------+ 
| 1 | {"id":333,"birthday":"1941-10-13","fname":"Paul"} | {"id":444,"lname":"Simon"}  | 
| 2 | {"id":777,"birthday":"1941-11-05","fname":"Art"} | {"id":888,"lname":"Garfunkel"} | 
+-----+---------------------------------------------------+--------------------------------+ 

select i 
     ,i1.* 
     ,i2.* 

from t 
     lateral view inline (array(s1)) i1 
     lateral view inline (array(s2)) i2 
; 

+---+-------+-------------+----------+-------+-----------+ 
| i | i1.id | i1.birthday | i1.fname | i2.id | i2.lname | 
+---+-------+-------------+----------+-------+-----------+ 
| 1 | 333 | 1941-10-13 | Paul  | 444 | Simon  | 
| 2 | 777 | 1941-11-05 | Art  | 888 | Garfunkel | 
+---+-------+-------------+----------+-------+-----------+ 

array
inline

+0

Das funktioniert wunderbar alle Spalten einer Hive-Struktur anzuzeigen, BTW. Danke vielmals! – wardw123

Verwandte Themen