2013-10-25 9 views
14

ich einen Code in HIVE Schreiben eine Tabelle und 6 Spalten, bestehend aus 1300 Zeilen zu erstellen:eine Spalte in einer Tabelle in HIVE QL hinzufügen

create table test1 as SELECT cd_screen_function, 
    SUM(access_count) AS max_count, 
    MIN(response_time_min) as response_time_min, 
    AVG(response_time_avg) as response_time_avg, 
    MAX(response_time_max) as response_time_max, 
    SUM(response_time_tot) as response_time_tot, 
    COUNT(*) as row_count 
    FROM sheet WHERE ts_update BETWEEN unix_timestamp('2012-11-01 00:00:00') AND 
    unix_timestamp('2012-11-30 00:00:00') and cd_office = '016' 
    GROUP BY cd_screen_function ORDER BY max_count DESC, cd_screen_function; 

Jetzt will ich eine andere Spalte als access_count1 hinzufügen, die besteht Ein eindeutiger Wert für alle 1300 Zeilen und Werte lautet sum(max_count). max_count ist eine Spalte in meiner vorhandenen Tabelle. Wie kann ich das machen? Ich versuche, die Tabelle durch diesen Code zu ändern ALTER TABLE test1 ADD COLUMNS (access_count1 int) set default sum(max_count);

Antwort

21

Sie cannot add a column with a default value in Hive. Sie haben die right syntax for adding the columnALTER TABLE test1 ADD COLUMNS (access_count1 int);, müssen Sie nur default sum(max_count) loswerden. Durch das Hinzufügen der Spalte werden keine Änderungen an den Dateien vorgenommen, die Ihre Tabelle unterstützen. Hive handles the "missing" data by interpreting NULL as the value for every cell in that column.

Sie haben jetzt das Problem, die Spalte zu füllen. Leider muss man in Hive die gesamte Tabelle neu schreiben, diesmal mit der aufgefüllten Spalte. Es ist möglicherweise einfacher, die ursprüngliche Abfrage mit der neuen Spalte erneut auszuführen. Oder Sie könnten die Spalte zu der Tabelle hinzufügen, die Sie jetzt haben, und dann alle Spalten plus den Wert für die neue Spalte auswählen.

Sie haben auch die Option, immer COALESCE die Spalte zu Ihrem gewünschten Standard und lassen Sie es NULL für jetzt. Diese Option schlägt fehl, wenn Sie möchten, dass NULL eine von Ihrem gewünschten Standard abweichende Bedeutung hat. Es erfordert auch, dass Sie darauf angewiesen sind, sich immer an COALESCE zu erinnern.

Wenn Sie sehr zuversichtlich sind, dass Sie mit den Dateien arbeiten können, die Hive unterstützen, können Sie sie auch direkt ändern, um Ihren Standard hinzuzufügen. Im Allgemeinen würde ich dagegen empfehlen, weil es meistens langsamer und gefährlicher ist. Es mag Fälle geben, in denen es Sinn macht, also habe ich diese Option der Vollständigkeit halber eingefügt.

+0

Wie funktioniert das, wenn ich mehrere Spalten hinzufügen möchte? – Arun

+4

'ALTER TABELLE test1 ADD COLUMNS (access_count1 int, access_count2 datum, access_count3 string, ...);' –

+0

Ist die Reihenfolge wichtig, in der wir die Spalte hinzufügen? –

Verwandte Themen