[一緒にHiveを学ぶ]の15-Hiveテーブルとパーティションの統計を分析する(Statistics)
8734 ワード
キーワード:Hive統計、分析Hiveテーブル、Hive Statistics
Oracleの分析テーブルと同様に、Hiveには分析テーブルとパーティションの機能も用意されており、Hiveテーブルを自動的かつ手動で分析することで、Hiveテーブルの統計情報の一部をメタデータに格納します.
表とパーティションの統計には、主に行数、ファイル数、元のデータサイズ、占有ストレージサイズ、最後の操作時間などが含まれます.
新しく作成されたテーブルの場合、デフォルトでINSERT OVERWRITEでデータを挿入すると、Hiveはテーブルまたはパーティションの統計をメタデータに自動的に更新します.
自動的に統計するかどうかを制御するパラメータがありますstats.autogather、デフォルトはtrue.
例として、
まずテーブルlxw 1234を作成する.
メタデータテーブル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方式で再度上書きすると、統計が更新されます.
INSERT OVERWRITE方式で追加されたパーティションについては、統計情報は新しく作成されたテーブルと同じであり、メタデータに格納されているテーブルとは異なるにすぎない.
作成後、パーティションのメタデータにはテーブルの情報がありません.
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
既存のテーブル、パーティション、または外部テーブルについては、ANALYZEコマンドでテーブルまたはパーティションの統計を手動で分析する必要があります.外部表
作成後のテーブルのメタデータ:
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でパーティションを追加すれば、外部テーブルと変わらないのは道理です.
メタデータの表示:
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のクエリ文SELECT
—- HiveにおけるJoinの原理とメカニズム
—- HiveでのJoinのタイプと使い方
—- Hive SQLの最適化
—- Hive統合HBAse、操作HBAseテーブル
—- Hiveのメタデータテーブル構造の詳細
Hive解析関数シリーズ
Hiveインデックス
hive最適化——hiveタスクのmap数とreduce数を制御する
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)
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数を制御する