2016-12-04 5 views
1

HIVEテーブルからHIveテーブルに挿入中、実際のレコードよりも多くのレコードがロードされています。ハイブのこの奇妙な行動に誰かが助けてくれますか?HIveで実際よりも多くのレコードをロードしています

私のクエリは次のように見ていることになります。

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

私table_bは6405465のレコードで構成されます。

table_aにtable_bから挿入した後、私はtable_aの総レコードが6406565.

ある見つけいずれかは、ここで助けてくださいことはできますか?

+0

これらは異なって保存されていますか?多分あなたはいくつかのデータに 'table_a'行デリミタを持っています –

+0

はい、table_bは通常のテキストテーブルです。 where as table_aはパーティション化されたテキストテーブルです。そして、両方のテーブルは '\ n'で区切られた行を持っていますが、 '\ t'で区切られた行があります。 –

+1

これも参照してください:http://stackoverflow.com/a/39914232/2700344 count(*)の統計情報を使用しているかどうか確認してください。計算 – leftjoin

答えて

2

hive.compute.query.using.stats=true;の場合、オプティマイザは表のデータを問い合せるのではなく、問合せの計算に統計を使用しています。これは、metastoreがMySQLのような高速データベースであり、map-reduceを必要としないため、はるかに高速です。ただし、INSERT OVERWRITEを使用せずに表がロードされた場合や、統計自動収集を実行する構成パラメータhive.stats.autogatherがfalseに設定されている場合は、統計は最新ではありません。また、ファイルをロードした後、またはサードパーティのツールを使用した後の統計も新鮮ではありません。ファイルは決して分析されなかったので、メタストアの統計は新鮮ではなく、新しいファイルを置くとデータがどのように変更されたかについて誰も知らないからです。また、sqoopの読み込み後などには、 'ANALYZE TABLE ... COMPUTE STATISTICS'を使用して読み込んだ後、テーブルまたはパーティションの統計を収集することをお勧めします。

統計情報を自動的に収集することができない場合(INSERT OVERWRITEの場合)、またはステートメントを実行してhive.compute.query.using.statsパラメータをオフに切り替えることをお勧めします。 Hiveは統計を使用する代わりにデータを照会します。

参照のためにこれを参照してください:https://cwiki.apache.org/confluence/display/Hive/StatsDev#StatsDev-StatisticsinHive

関連する問題