2016-03-30 8 views
0

ich in meiner eigenen Datenbank eine externe Tabelle erschaffe:Hive: Erstellen einer externen Tabelle: Show Partitionen tut nichts

create external table test1 (

event_uid    string, 
event_type_id   int, 
event_category_id  int, 
event_date    string, 
log_date    string, 
server     string, 
server_type    string, 
process_id    int, 
device_id    string, 
account_id    string, 
ip_address    string, 
category_id    string, 
content_id    string, 
entitlement_id   string, 
product_id    string, 
sku      string, 
title_id    string, 
service_id    string, 
order_id    bigint, 
transaction_id   bigint, 
company_code   string, 
product_code   string, 
key_value_pairs   map<string,string>, 
process_run_id   string) 

partitioned by (A string, B string, C string) 

location '/data/a1/pnt/lte/formatted/evt' 

Wenn ich SHOW PARTITIONS TEST versuchen, ich als Ausgang nur OK bekommen. Allerdings gibt es eine Tabelle mit der gleichen DDL und dem gleichen Speicherort in einer anderen Datenbank, die Ergebnisse gibt, wenn ich tun SHOW PARITITIONS TEST. Ich habe auch versucht MSCK REPAIR TABLE TEST, die Partitionen anzeigt.

Bitte vorschlagen

+1

Für externe Tabelle müssen Sie die Partition separat hinzufügen. Überprüfen Sie meine Antwort hier: http://stackoverflow.com/questions/25759568/external-table-does-not-return-the-data-in-its-folder/25760626#25760626 –

+0

Danke, ich bin durch den Link aber gegangen Mein Zweifel ist: Ich glaube nicht, dass ich die Daten neu laden muss, da der Speicherort 'data/a1/pnt/lte/formatiert/evt' bereits die "Daten" hat und die Dateien tatsächlich den Strukturdaten folgen/a1/pnt/lte/formatiert/evt/A = /B = /C = , muss ich noch Partitionen separat hinzufügen? Was passiert dann mit den Partitionen, die ich zum Zeitpunkt der Tabellenerstellung erstellt habe? – Vam

+0

BTW, danke nochmal. Ich habe versucht, nur Daten zu laden und es funktionierte. Aber ich habe immer noch zwei Zweifel 1) nach externen Tabellenerstellungs-Skript, wenn wir LOCATION angeben, müssen wir Daten nicht erneut laden. Warum werde ich in meinem Fall aufgefordert, Daten zu laden? Liegt es an Partitionen? Bitte schlagen Sie 2) Wenn ich dem zweiten Ansatz in dem von Ihnen referenzierten Thread folgte, brauche ich die Tabelle nicht zu ändern, um die Partition hinzuzufügen. und selbst wenn ich versuchte, es hinzuzufügen, erhalte ich diesen Fehler: FAILED: Execution Error, Rückgabecode 1 von org.apache.hadoop.hive.ql.exec.DDLTask. MetaException (Nachricht: java.lang.NullPointerException) – Vam

Antwort

2

Wenn Partitionen keine tatsächlichen Partitionen erstellt werden, wenn Sie Ihre DDL ausführen. Die Partitionen werden erstellt, wenn Sie Daten in Ihre Tabelle laden. Sie müssen also Daten laden und dann können Sie die Partitionen mit der Anweisung show partitions sehen.

+0

Danke @Salmonerd. 1) Aber der Programmier-Hive-Guide sagt, dass, wenn wir LOCATION beim Erstellen einer externen Tabelle angeben und LOCATION bereits Datendateien hat, wir KEINE Daten laden müssen. Also, ist das nicht im Gegenteil? 2) Wenn ich die Abfrage mit Partitionen in der where-Klausel und limit-Klausel ausführe, sehe ich die Ergebnisse, aber die Abfrage wurde nicht als mapreduce-Job ausgeführt. Kannst du mir helfen, das auch zu verstehen? – Vam

+0

Ich bin verwirrt von dem, was Sie fragen, und es scheint wie eine separate Frage von Ihrem Original. Sagen Sie, dass Sie eine Hive-Abfrage ausführen und Ergebnisse anzeigen können, aber wenn Sie einen Map Reduce-Job für die gleichen Daten schreiben, sehen Sie keine Ergebnisse? – Jared

+0

Okay ... Tut mir leid, dass ich meine Frage erweitert habe. Wenn Sie sehen, gibt es zwei Fragen in meinem vorherigen Kommentar. Bitte ignoriere meine zweite Frage. Wäre toll, wenn du mir bei meiner ersten Frage helfen kannst. – Vam