2016-11-17 3 views
-2

Ich habe einen Datensatz. siehe unten eine Probenreihe:SPALTEN VON SPALTE DURCH DELIMITER IN EINZIGARTIGE REIHEN IN HIVE

94654 6802D326-9F9B-4FC8-B2DD-F878EADE31F2 1460695483: 440.507; 1460777656: 440.515; 1460778054: 440.488; 1460778157: 440481,440600;

Jede Spalte ist durch ein Leerzeichen getrennt (insgesamt 3 Spalten). Die Spaltennamen lauten id (int), unid (string), time_stamp (string).

Ich möchte den Datensatz spalten, so dass die jeweils einzigartige Element, wie in den folgenden Zeilen: -

  • 94654 6802D326-9F9B-4FC8-B2DD-F878EADE31F2 1460695483: 440.507
  • 94654 6802D326-9F9B -4FC8-B2DD-F878EADE31F2 1460777656: 440515
  • 94654 6802D326-9F9B-4FC8-B2DD-F878EADE31F2 1460778054: 440488
  • 94654 6802D326-9F9B-4FC8-B2DD-F878EADE31F2 1460778157: 440481
  • 94654 6802D326-9 F9B-4FC8-B2DD-F878EADE31F2 1460778157: 440600

Jeder Unterpunkt ist jede Zeile. Ich habe die folgende Abfrage verwendet, aber es gibt mir die Ausgabe wie oben. Ich habe den folgenden Code verwendet, und es funktioniert nicht: -

select id, unid, time_date aus Tabelle Seitenansicht explode (SPLIT (time_date, '\;')) time_date als time_date;

Ausgang: - 94654 6802D326-9F9B-4FC8-B2DD-F878EADE31F2 1460695483: 440.507; 1460777656: 440.515; 1460778054: 440.488; 1460778157: 440481,440600; (DIE FOLGENDE REIHE WIRD 5-mal wiederholt)

Hilfe wäre willkommen! Danke im Voraus :)

Antwort

1

Zuerst musste ich die Semikolons durch ein Rohr ersetzen. Also:

CREATE temporary TABLE tbl 
(id int, 
unid string, 
time_stamp string); 

INSERT INTO tbl 
VALUES (
94654, '6802D326-9F9B-4FC8-B2DD-F878EADE31F2' , '1460695483:440507|1460777656:440515|1460778054:440488|1460778157:440481,440600'); 

SELECT 
id, 
unid, 
time_stamp 
FROM 
(
SELECT 
id, 
unid, 
split(time_stamp,'\\|') ts 
FROM 
tbl 
) t 
lateral VIEW explode(t.ts) bar AS time_stamp; 

Was uns geben:

94654 6802D326-9F9B-4FC8-B2DD-F878EADE31F2 1460695483:440507 
94654 6802D326-9F9B-4FC8-B2DD-F878EADE31F2 1460777656:440515 
94654 6802D326-9F9B-4FC8-B2DD-F878EADE31F2 1460778054:440488 
94654 6802D326-9F9B-4FC8-B2DD-F878EADE31F2 1460778157:440481,440600 

Sie haben die Spaltung zu tun und in getrennten Schritten explodieren. Also machen wir die Aufteilung in einer abgeleiteten Tabelle und die explodierte/laterale Ansicht in der äußeren Abfrage.

+0

Vielen Dank Andrew! :) – zerxes

Verwandte Themen