[一緒にHiveを学ぶ]の15-Hiveテーブルとパーティションの統計を分析する(Statistics)


キーワード:Hive統計、分析Hiveテーブル、Hive Statistics
 
Oracleの分析テーブルと同様に、Hiveには分析テーブルとパーティションの機能も用意されており、Hiveテーブルを自動的かつ手動で分析することで、Hiveテーブルの統計情報の一部をメタデータに格納します.
 
表とパーティションの統計には、主に行数、ファイル数、元のデータサイズ、占有ストレージサイズ、最後の操作時間などが含まれます.
 

14.1新しいテーブルの統計


新しく作成されたテーブルの場合、デフォルトでINSERT OVERWRITEでデータを挿入すると、Hiveはテーブルまたはパーティションの統計をメタデータに自動的に更新します.
自動的に統計するかどうかを制御するパラメータがありますstats.autogather、デフォルトはtrue.
 
例として、
まずテーブルlxw 1234を作成する.
 
CREATE TABLE lxw1234 (
id STRING,
name STRING
) stored AS textfile;

 
メタデータテーブルTABLE_PARAMSでは、前回のDDLの時刻を記録した記録があり、
このテーブルのTBL_ID対応TBSSテーブルのTBL_ID.
 
Hiveメタデータ構造の詳細については、前章を参照してください.
[一緒にHiveを学ぶ]の14-Hiveのメタデータテーブル構造の詳細
 
SELECT  *  FROM  TABLE_PARAMS  WHERE  tbl_id = 45857
 
TBL_ID
PARAM_KEY
PARAM_VALUE
45857
transient_lastDdlTime
1436916981
 
次に、INSERT OVERWRITEによりテーブルlxw 1234にデータを挿入する.
INSERT overwrite TABLE lxw1234 SELECT pt,pcid FROM lxw1;
実はhive-cliでHQLを実行すると、統計が印刷されます.
Table default.lxw1234 stats:
[numFiles=1, numRows=11067, totalSize=376278, rawDataSize=365211]
メタデータの再表示:
SELECT  *  FROM  TABLE_PARAMS  WHERE  tbl_id = 45857
 
TBL_ID
PARAM_KEY
PARAM_VALUE
45857
transient_lastDdlTime
1436917459
45857
numFiles
1
45857
numRows
11067
45857
rawDataSize
365211
45857
totalSize
376278
45857
COLUMN_STATS_ACCURATE
true
 
 
 
 
 
ここでrawDataSizeとは元のデータのサイズであり、totalSizeとはHDFSを占有する記憶領域のサイズである.
このテーブルデータをINSERT OVERWRITE方式で再度上書きすると、統計が更新されます.
 

14.2新しいパーティションの統計


INSERT OVERWRITE方式で追加されたパーティションについては、統計情報は新しく作成されたテーブルと同じであり、メタデータに格納されているテーブルとは異なるにすぎない.
 
CREATE TABLE lxw1234 (
id STRING,
name STRING
) PARTITIONED BY (day STRING);

 
作成後、パーティションのメタデータにはテーブルの情報がありません.
SELECT * FROM `PARTITIONS` WHERE tbl_id = 45858
 
新しいパーティションにデータを挿入するには、次の手順に従います.
INSERT overwrite TABLE lxw1234 PARTITION (day = ‘2015-07-15′)
SELECT pt,pcid
FROM lxw1;
印刷された統計を実行します.
Loading data to table default.lxw1234 partition (day=2015-07-15)
Partition default.lxw1234{day=2015-07-15} stats:
[numFiles=1, numRows=11067, totalSize=376278, rawDataSize=365211]
 
メタデータの再表示:
SELECT * FROM `PARTITIONS` WHERE tbl_id = 45858
 
PART_ID
CREATE_TIME
LAST_ACCESS_TIME
PART_NAME
SD_ID
TBL_ID
56806
1436918167
0
day=2015-07-15
98259
45858
 
SELECT * FROM PARTITION_PARAMS WHERE PART_ID = 56806
 
PART_ID
PARAM_KEY
PARAM_VALUE
56806
transient_lastDdlTime
1436918167
56806
numFiles
1
56806
numRows
11067
56806
rawDataSize
365211
56806
totalSize
376278
56806
COLUMN_STATS_ACCURATE
true
 
 
 
 
 
パーティション統計に関連するメタデータ・テーブルは
PARTITIONS、PARTITION_PARAMS
 
 

14.3既に存在するテーブルまたはパーティションの統計


既存のテーブル、パーティション、または外部テーブルについては、ANALYZEコマンドでテーブルまたはパーティションの統計を手動で分析する必要があります.
  • 外部表
  •     CREATE EXTERNAL TABLE lxw1234 (
        id STRING,
        name STRING
        ) stored AS textfile
        location 'hdfs://namenode/tmp/lxw1234.com/';
         

     
    作成後のテーブルのメタデータ:
    SELECT * FROM TABLE_PARAMS WHERE tbl_id = 45859
    TBL_ID
    PARAM_KEY
    PARAM_VALUE
    45859
    transient_lastDdlTime
    1436918758
    45859
    numFiles
    0
    45859
    numRows
    -1
    45859
    rawDataSize
    -1
    45859
    totalSize
    0
    45859
    COLUMN_STATS_ACCURATE
    false
    45859
    EXTERNAL
    true
     
     
     
     
     
    コマンド分析テーブルlxw 1234の統計を使用します.
    ANALYZE TABLE lxw1234 COMPUTE STATISTICS;
    このコマンドは、MapReduceを起動して実行し、実行後に印刷します.
    Table default.lxw1234 stats:
    [numFiles=0, numRows=11067, totalSize=0, rawDataSize=365211]
     
    メタデータの表示:
    SELECT * FROM TABLE_PARAMS WHERE tbl_id = 45859
     
    TBL_ID
    PARAM_KEY
    PARAM_VALUE
    45859
    transient_lastDdlTime
    1436918995
    45859
    numFiles
    0
    45859
    numRows
    11067
    45859
    rawDataSize
    365211
    45859
    totalSize
    0
    45859
    COLUMN_STATS_ACCURATE
    true
    45859
    EXTERNAL
    true
     
     
     
     
     
    外部テーブルの場合、ファイル数と合計サイズは統計されません.このテーブルのデフォルトパスのファイル数とサイズが統計されていると推定されます.(外部テーブルは、作成時にデフォルトのパスの下に空のディレクトリを作成します.たとえば、次のようになります.hdfs://namenode/user/hive/warehouse/default.db/lxw1234)
     
  • パーティション
  • ALTER TABLE ADD PARTITIONでパーティションを追加すれば、外部テーブルと変わらないのは道理です.
    CREATE TABLE lxw1234 (
    id STRING,
    name STRING
    ) PARTITIONED BY (day STRING);
     
     
    ALTER TABLE lxw1234 ADD PARTITION (day = '2015-07-15')
    location 'hdfs://namenode/tmp/lxw1234.com/';

     
    メタデータの表示:
    SELECT * FROM PARTITION_PARAMS WHERE PART_ID = 56807
     
    PART_ID
    PARAM_KEY
    PARAM_VALUE
    56807
    transient_lastDdlTime
    1436919355
    56807
    numFiles
    20
    56807
    numRows
    -1
    56807
    rawDataSize
    -1
    56807
    totalSize
    376278
    56807
    COLUMN_STATS_ACCURATE
    false
     
     
     
     
     
    このようにパーティションを追加すると、Hiveはパーティションに対応するパスのファイル数と合計サイズをメタデータに統計しています.
    コマンドを使用してパーティションを分析します.
    ANALYZE TABLE lxw1234 PARTITION (day = ‘2015-07-15′)
    COMPUTE STATISTICS;
    Partition default.lxw1234{day=2015-07-15} stats:
    [numFiles=20, numRows=11067, totalSize=376278, rawDataSize=365211]
     
    メタデータの再表示:
    SELECT * FROM PARTITION_PARAMS WHERE PART_ID = 56807
     
    PART_ID
    PARAM_KEY
    PARAM_VALUE
    56807
    transient_lastDdlTime
    1436919604
    56807
    numFiles
    20
    56807
    numRows
    11067
    56807
    rawDataSize
    365211
    56807
    totalSize
    376278
    56807
    COLUMN_STATS_ACCURATE
    true
     
    大丈夫です.行数と元のサイズを統計しました.
     

    Hive関连记事(更新継続):


    いっしょにHiveシリーズを学びます
    —- Hiveの概要、Hiveは何ですか
    —- Hive関数大全-完全版
    —- Hiveのデータベースとテーブル
    —- Hiveのインストール構成
    —- Hiveのビューとパーティション
    —- Hiveのダイナミックパーティション
    —- Hiveテーブルへのデータのロード
    —- Hiveコマンドラインの使用
    —- Hiveのクエリ文SELECT
    —- HiveにおけるJoinの原理とメカニズム
    —- HiveでのJoinのタイプと使い方
    —- Hive SQLの最適化
    —- Hive統合HBAse、操作HBAseテーブル
    —- Hiveのメタデータテーブル構造の詳細
    Hive解析関数シリーズ
    Hiveインデックス
    hive最適化——hiveタスクのmap数とreduce数を制御する