2017-03-23 4 views
2

Ich möchte eine externe Tabelle mit einer Reihe von Textdateien erstellen. Jede Zeile sollte eine Textdatei sein. Beispiel für eine Textdatei ist als unten, und es können mehrere Textdateien sein. (Dateien in HDFS gespeichert sind)Hive - Erstellen einer externen Tabelle mit Textdateien ohne Zeilenabschluss

thanking 
you 
for 
the 
participation 

Linien von /n beendet werden. Ich möchte eine externe Tabelle mit den obigen Textdateien erstellen und Daten in einer Textdatei sollten in einer Zeile (eine Zelle) sein.

Ich habe folgende Create table-Anweisung versucht.

Create External table if not exists sample_email(
    email STRING 
) 
STORED AS TEXTFILE 
LOCATION '/tmp/txt/sample/'; 

Es wird erstellen Tabelle wie folgt.

+--------------------------------------+ 
+ email        + 
+--------------------------------------+ 
+ thanking        + 
+--------------------------------------+ 
+ you         + 
+--------------------------------------+ 
+ for         + 
+--------------------------------------+ 
+ the         + 
+--------------------------------------+ 
+participation       + 
+--------------------------------------+ 
+please        + 
+--------------------------------------+ 
+find         + 
+--------------------------------------+ 
+the         + 
+--------------------------------------+ 
+discussed        + 
+--------------------------------------+ 
+points        + 
+--------------------------------------+ 

Aber ich möchte wie folgt.

+--------------------------------------+ 
+ email        + 
+--------------------------------------+ 
+ thanking you for the participation + 
+--------------------------------------+ 
+ please find the discussed points  + 
+--------------------------------------+ 

Wie überwinde ich mein Problem? Vielen Dank im Voraus

+0

einen Blick auf Struktur oder Array –

Antwort

1
select  concat_ws(' ',collect_list(email)) as emails 
from  sample_email 
group by input__file__name 

+------------------------------------+ 
|    emails    | 
+------------------------------------+ 
| thanking you for the participation | 
| please find the discussed points | 
+------------------------------------+ 
+0

prüfen aktualisiert Antwort –

+0

Was ich will, ist eine Tabelle zu erstellen, wie ich oben erwähnt. nicht aus dieser Tabelle auswählen –

+0

Weil? ....... –

0

Verwenden tr \ n von Dateien zu entfernen.

hadoop fs -cat file.txt | tr -d '\n' | hadoop fs -put - new_file.txt 
+0

Dies ist eine schlechte Lösung. ** (1) ** Sie streamen alle Daten aus dem verteilten HDFS-Cluster in ein lokales Dateisystem (und zurück) ** (2) ** Sie verschmelzen alle Dateien zu einer einzigen Datei und verlieren dabei die Informationen über die Quelldateien –

+0

Ja, ich stimme zu (1) zu, es ist nicht optimal, funktioniert aber immer noch und kann für kleine Dateien verwendet werden. Es ist ein Beispiel für eine einzelne Datei, nicht alle von ihnen. – leftjoin

+0

P.s. aber immer noch Manipulationen an Dateien erfordern ... –

0
set textinputformat.record.delimiter='\0'; 

select translate(email,'\n',' ') as emails 
from sample_email 

+-------------------------------------+ 
|    emails    | 
+-------------------------------------+ 
| thanking you for the participation | 
| please find the discussed points | 
+-------------------------------------+ 

Leider, ich weiß noch nicht, wie textinputformat.record.delimiter wieder innerhalb der gleichen Sitzung Newline einzustellen.

How to reset textinputformat.record.delimiter to its default value within hive cli/beeline?

Verwandte Themen