2016-12-04 5 views
1

Beim Einfügen von Hive-Tabelle in HIve-Tabelle, Es lädt mehr Datensätze als die tatsächlichen Datensätze. Kann jemand in diesem seltsamen Verhalten von Hive helfen?Laden mehr Datensätze als tatsächlich in HIve

Meine Abfrage würde wie folgt suchen:

insert overwrite table_a 
    select col1,col2,col3,... from table_b; 

Mein Table_B von 6.405.465 Datensätze besteht.

Nach dem Table_B zu TABLE_A Einfügen, fand ich total Datensätze in TABLE_A sind hier 6406565.

Kann jemand bitte helfen?

+0

sind sie unterschiedlich gespeichert? vielleicht haben Sie in einigen der Daten 'table_a' Zeilentrennzeichen –

+0

Ja, table_b ist normale Texttabelle. wo als Tabelle_a partitionierte Texttabelle ist. Und beide Tabellen haben Zeile durch '\ n' delimeted, Feilds delimeted von '\ t' –

+1

Siehe auch: http://stackoverflow.com/a/39914232/2700344 Überprüfen Sie, ob Sie Statistiken für count (*) verwenden Berechnung – leftjoin

Antwort

2

Wenn hive.compute.query.using.stats=true; dann verwendet der Optimizer Statistiken für die Abfrageberechnung, anstatt die Tabellendaten abzufragen. Dies ist viel schneller, da Metastore eine schnelle Datenbank wie MySQL ist und keine Map-Reduce benötigt. Die Statistik kann jedoch nicht frisch (veraltet) sein, wenn die Tabelle nicht mit INSERT OVERWRITE geladen wurde oder der Konfigurationsparameter hive.stats.autogather, der für das automatische Sammeln von Statistiken verantwortlich ist, auf false gesetzt wurde. Auch nach dem Laden von Dateien oder nach der Verwendung von Drittanbieter-Tools sind die Statistiken nicht aktualisiert. Es ist, weil Dateien nie analysiert wurden, Statistiken in Metastore nicht frisch sind, wenn Sie neue Dateien haben, weiß niemand, wie die Daten geändert wurden. Auch nach dem Laden von sqoop usw. Es ist also eine gute Methode, nach dem Laden mit 'ANALYZE TABLE ... COMPUTE STATISTICS' Statistiken für die Tabelle oder Partition zu erstellen.

Falls es nicht möglich ist, Statistiken automatisch zu erfassen (funktioniert für INSERT OVERWRITE) oder indem Sie ANALYZE Anweisung ausführen, dann besser hive.compute.query.using.stats Parameter ausschalten. Hive fragt Daten ab, anstatt Statistiken zu verwenden.

Sehen Sie diese als Referenz: https://cwiki.apache.org/confluence/display/Hive/StatsDev#StatsDev-StatisticsinHive

Verwandte Themen