2017-11-06 5 views
0

Ich bin mit einem sehr seltsamen Problem in Bienenstock in der Produktionsumgebung (cloudera 5.5) konfrontiert, die im Grunde nicht auf meinem lokalen Server reproduzierbar ist (weiß nicht warum), dh für einige Datensätze habe ich falsche Timestamp Wert Beim Einfügen von der temporären Tabelle in die Haupttabelle wird der String "2017-10-21 23" beim Einfügen in den Zeitstempel "2017-10-21 23:00:00" Datentyp konvertiert.TimeStamp Problem in Bienenstock 1.1

Beispiel ::

2017-10-21 23 -> 2017-10-21 22:00:00 
2017-10-22 15 -> 2017-10-22 14:00:00 

Es geschieht sehr, sehr selten. Bedeutet Delta-Wert ist etwa 1% der Daten.

Flow ::: Die Daten in der temporären Tabelle (externe Tabelle) werden stündlich mit oozie gefüllt. Die Anweisung insert wird stündlich ausgeführt, um aus der temporären Tabelle in die Haupttabelle (interne Tabelle in ORC) in der Struktur mithilfe des Oozie-Workflows einzufügen.

Flussübersicht ::: Linux-Protokolle >> Protokolle in Temp-Tabelle kopieren (externe Hive-Tabelle) >> in Haupt-Hive-Tabelle einfügen.

Einfügen von temporären Tabelle auf Haupttabelle :::

FROM 
temp 
INSERT INTO TABLE 
main 
PARTITION(event_date,service_id) 
SELECT 
from_unixtime(unix_timestamp(event_timestamp ,'yyyy-MM-dd HH'), 'yyyy-MM-dd HH:00:00.0'), 
col3, 
col4, 
"" as partner_nw_name, 
col5, 
"" as country_name, 
col6, 
col7, 
col8, 
col9, 
col10, 
col11, 
col12, 
col13, 
col14, 
col15, 
kpi_id, 
col18, 
col19, 
col20, 
col21, 
col23, 
col24, 
col25, 
from_unixtime(unix_timestamp(event_timestamp ,'yyyy-MM-dd HH'), 'yyyy-MM-dd') as event_date, 
service_id; 

Temp-Tabelle :::

hive> desc temp; 
OK 
event_timestamp string 
col2 int 
col3 int 
col4 int 
col5 int 
col6 string 
col7 string 
col8 string 
col9 string 
col10 string 
col11 int 
col12 int 
col13 string 
col14 string 
col15 string 
service_id int 
kpi_id int 
col18 bigint 
col19 bigint 
col20 bigint 
col21 bigint 
col22 double 
col23 string 
col24 int 
col25 int 
Time taken: 0.165 seconds, Fetched: 25 row(s) 

Haupt Tabelle :::

hive> desc main; 
OK 
event_timestamp timestamp 
col3 int 
col4 int 
partner_nw_name string 
col5 int 
country_name string 
col6 string 
col7 string 
col8 string 
col9 string 
col10 int 
col11 int 
col12 int 
col13 string 
col14 string 
col15 string 
kpi_id int 
col18 bigint 
col19 bigint 
col20 bigint 
col21 bigint 
col23 double 
col24 int 
col25 int 
event_date date 
service_id int 

# Partition Information 
# col_name data_type comment 

event_date date 
service_id int 
Time taken: 0.175 seconds, Fetched: 32 row(s) 

Antwort

0

Scheint, wie Sie hinzufügen extra 00 für die Stunden Ort zu ..

versuchen Sie dies:

select from_unixtime(unix_timestamp('2017-08-29 05','yyyy-MM-dd HH'),'yyyy-MM-dd HH:00:0'); 

die obige Abfrage gibt:

2017-10-21 23:00:0 

ist es das, was Sie erwarten? können Sie bei Bedarf 'yyyy-MM-dd HH: 00: 00.0' hinzufügen.

+0

ich erwarte '2017.10.21 23 -> 2017.10.21 23: 00: 00 '. Es gibt höchstens richtige Antwort. Aber manchmal ändert es die Werte der Stunde, wie im Beispiel gezeigt. –

+0

Sie sagen, dass die Quelle eine Zeichenkette rechts ist. Zeichenkette "2017-10-21 23" .. Es könnten einige zusätzliche Zeichen an die Zeichenkette angehängt werden .. zum Beispiel "('2017-10-21 - 23 ',' JJJJ-MM-TT HH ') "gibt" 2017-10-20 01: 00: 00.0 ".. bitte überprüfen Sie die Daten über Farbton oder kopieren Sie die Datei zu lokalen und überprüfen. – sk7979

+0

Ich überprüfte diese Daten. Die Daten waren richtig und dann habe ich den Fluss auf Lokal mit denselben Daten ausgeführt und in Lokal gibt es mir richtige Ausgabe. Deshalb kann ich das Problem nicht beheben. –

0

Wenn Sie Ihre Daten im Parkettformat mit Hive schreiben, dann passen Sie den Zeitstempel nach lokalem Zeitzonen-Offset an. Für weitere Informationen gehen Sie bitte die folgenden Links durch.

There is a Jira ticket related to that for Impala #2716

Cloudera Impala Timestamp document is here

+0

Das war sehr nett. Aber mein Problem ist anders.Ich sage manchmal zeigt es andere Zeit nicht immer. Es ist widersprüchliches Verhalten, wie ich sagte: Es passiert sehr, sehr selten. Der Delta-Wert ist ungefähr 1% der Daten in meiner Frage. Und ja, ich verwende das ORC-Dateiformat und verwende nur Hive-Abfragen, die nicht impala sind. –