前回の投稿で、hiveのdatabaseを作成しました。
本日はテーブルを作成して、meta情報を確認してみます。
1. beelineでhiveserver2に接続
# コンテナにdocker-xecで/bin/bashで入ってから、beelineと入力
$ docker exec -it dockercompose_hiveserver2_1 /bin/bash
root@6a715b5d374e:/# beeline
# hiveserver2に接続
beeline> !connect jdbc:hive2://localhost:10000 hive hive org.apache.hive.jdbc.HiveDriver
2. tableを作成する
以下のddlをクリップボードに貼り付けて、beelineで発行しました。
Points.
- テーブル、カラムに付与するコメントがOracleやMySQLとはことなって、
create table
構文中で記載できます。 - テーブルに、コメント以外にMap形式でpropertyを付与することが可能です。
- location句で、ファイルパスを指定することが可能です。
create table if not exists erdrepo.ms_tables (
column_attribute string comment 'attributes of column',
column_score float comment 'evaluation of column'
)
comment 'dummy table'
location '/user/hive/warehouse/erdrepo.db/ms_tables'
tblproperties ('author'='letusfly85', 'create_comment'='start erdrepo')
;
実行の出力結果は以下のとおりです。
0: jdbc:hive2://localhost:10000> show databases;
+----------------+--+
| database_name |
+----------------+--+
| default |
| erdrepo |
+----------------+--+
2 rows selected (0.167 seconds)
0: jdbc:hive2://localhost:10000> use erdrepo;
No rows affected (0.072 seconds)
0: jdbc:hive2://localhost:10000> create table if not exists erdrepo.ms_tables (
0: jdbc:hive2://localhost:10000> column_attribute string comment 'attributes of column',
0: jdbc:hive2://localhost:10000> column_score float comment 'evaluation of column'
0: jdbc:hive2://localhost:10000> )
0: jdbc:hive2://localhost:10000> comment 'dummy table'
0: jdbc:hive2://localhost:10000> location '/user/hive/warehouse/erdrepo.db/ms_tables'
0: jdbc:hive2://localhost:10000> tblproperties ('author'='letusfly85', 'create_comment'='start erdrepo')
0: jdbc:hive2://localhost:10000> ;
No rows affected (0.322 seconds)
0: jdbc:hive2://localhost:10000> show tables;
+------------+--+
| tab_name |
+------------+--+
| ms_tables |
+------------+--+
3. meta情報を出力する
MySQLやOracleと同感覚でdescirbe
コマンドを発行してみます。
0: jdbc:hive2://localhost:10000> describe ms_tables;
+-------------------+------------+-----------------------+--+
| col_name | data_type | comment |
+-------------------+------------+-----------------------+--+
| column_attribute | string | attributes of column |
| column_score | float | evaluation of column |
+-------------------+------------+-----------------------+--+
ここまでは想定どおりですが、やっぱりもっと詳細な情報がみたいです。
少なくともDDLで記載した内容は見たいです。
ということで、確認しました。
詳細に情報を見たい場合は、extended
を利用します。
が、整形されずに出てしまうので、formatted
オプションを使用することが
マニュアルでは推奨されています。
出力すると以下のようになりました。
0: jdbc:hive2://localhost:10000> describe formatted ms_tables;
+-------------------------------+-------------------------------------------------------------+-----------------------+--+
| col_name | data_type | comment |
+-------------------------------+-------------------------------------------------------------+-----------------------+--+
| # col_name | data_type | comment |
| | NULL | NULL |
| column_attribute | string | attributes of column |
| column_score | float | evaluation of column |
| | NULL | NULL |
| # Detailed Table Information | NULL | NULL |
| Database: | erdrepo | NULL |
| Owner: | hive | NULL |
| CreateTime: | Fri Nov 06 02:16:37 UTC 2015 | NULL |
| LastAccessTime: | UNKNOWN | NULL |
| Protect Mode: | None | NULL |
| Retention: | 0 | NULL |
| Location: | file:/user/hive/warehouse/erdrepo.db/ms_tables | NULL |
| Table Type: | MANAGED_TABLE | NULL |
| Table Parameters: | NULL | NULL |
| | author | letusfly85 |
| | comment | dummy table |
| | create_comment | start erdrepo |
| | transient_lastDdlTime | 1446776197 |
| | NULL | NULL |
| # Storage Information | NULL | NULL |
| SerDe Library: | org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe | NULL |
| InputFormat: | org.apache.hadoop.mapred.TextInputFormat | NULL |
| OutputFormat: | org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat | NULL |
| Compressed: | No | NULL |
| Num Buckets: | -1 | NULL |
| Bucket Columns: | [] | NULL |
| Sort Columns: | [] | NULL |
| Storage Desc Params: | NULL | NULL |
| | serialization.format | 1 |
+-------------------------------+-------------------------------------------------------------+-----------------------+--+
30 rows selected (0.126 seconds)
BucketカラムやSortカラムみたいな属性もあるんですね。。
Compressed属性もあるということは、圧縮みたいなことも可能なのでしょうか。ここも今後要チェックです。
4. metastoreの情報を直接見てみる
MySQLのinformation_schema, Oracleのdictionaryに類するパブリックビューを参照する感覚で、hiveのmetastore管理のMySQLのdatabaseを見てみました。
4-1. metastoreのdatabaseにログインする
oot@6a715b5d374e:/# mysql -uhive -phive
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.5.46-0ubuntu0.14.04.2 (Ubuntu)
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| metastore |
+--------------------+
2 rows in set (0.00 sec)
mysql> use metastore;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+---------------------------+
| Tables_in_metastore |
+---------------------------+
| BUCKETING_COLS |
| CDS |
| COLUMNS_V2 |
| COMPACTION_QUEUE |
| COMPLETED_TXN_COMPONENTS |
| DATABASE_PARAMS |
| DBS |
| DB_PRIVS |
| DELEGATION_TOKENS |
| FUNCS |
| FUNC_RU |
| GLOBAL_PRIVS |
| HIVE_LOCKS |
| IDXS |
| INDEX_PARAMS |
| MASTER_KEYS |
| NEXT_COMPACTION_QUEUE_ID |
| NEXT_LOCK_ID |
| NEXT_TXN_ID |
| NUCLEUS_TABLES |
| PARTITIONS |
| PARTITION_EVENTS |
| PARTITION_KEYS |
| PARTITION_KEY_VALS |
| PARTITION_PARAMS |
| PART_COL_PRIVS |
| PART_COL_STATS |
| PART_PRIVS |
| ROLES |
| ROLE_MAP |
| SDS |
| SD_PARAMS |
| SEQUENCE_TABLE |
| SERDES |
| SERDE_PARAMS |
| SKEWED_COL_NAMES |
| SKEWED_COL_VALUE_LOC_MAP |
| SKEWED_STRING_LIST |
| SKEWED_STRING_LIST_VALUES |
| SKEWED_VALUES |
| SORT_COLS |
| TABLE_PARAMS |
| TAB_COL_STATS |
| TBLS |
| TBL_COL_PRIVS |
| TBL_PRIVS |
| TXNS |
| TXN_COMPONENTS |
| TYPES |
| TYPE_FIELDS |
| VERSION |
+---------------------------+
51 rows in set (0.00 sec)
わらわらとテーブルを持っていますね。。お目当てなのは、TBLSとTBL_COL_STATSかな、と当たりをつけてみてみます。
4-2. TBLSテーブルの参照
TBL_ID
、、、、table_idのが自分としてはしっくり来ますが、なるほど!と言った感じです。
mysql> describe TBLS;
+--------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+-------+
| TBL_ID | bigint(20) | NO | PRI | NULL | |
| CREATE_TIME | int(11) | NO | | NULL | |
| DB_ID | bigint(20) | YES | MUL | NULL | |
| LAST_ACCESS_TIME | int(11) | NO | | NULL | |
| OWNER | varchar(767) | YES | | NULL | |
| RETENTION | int(11) | NO | | NULL | |
| SD_ID | bigint(20) | YES | MUL | NULL | |
| TBL_NAME | varchar(128) | YES | MUL | NULL | |
| TBL_TYPE | varchar(128) | YES | | NULL | |
| VIEW_EXPANDED_TEXT | mediumtext | YES | | NULL | |
| VIEW_ORIGINAL_TEXT | mediumtext | YES | | NULL | |
| LINK_TARGET_ID | bigint(20) | YES | MUL | NULL | |
+--------------------+--------------+------+-----+---------+-------+
12 rows in set (0.00 sec)
mysql> select * from TBLS where TBL_NAME='ms_tables'\G
*************************** 1. row ***************************
TBL_ID: 6
CREATE_TIME: 1446776197
DB_ID: 7
LAST_ACCESS_TIME: 0
OWNER: hive
RETENTION: 0
SD_ID: 6
TBL_NAME: ms_tables
TBL_TYPE: MANAGED_TABLE
VIEW_EXPANDED_TEXT: NULL
VIEW_ORIGINAL_TEXT: NULL
LINK_TARGET_ID: NULL
1 row in set (0.00 sec)
さらに、カラム情報も見てみます。
mysql> describe TAB_COL_STATS
-> ;
+------------------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+---------------+------+-----+---------+-------+
| CS_ID | bigint(20) | NO | PRI | NULL | |
| DB_NAME | varchar(128) | NO | | NULL | |
| TABLE_NAME | varchar(128) | NO | | NULL | |
| COLUMN_NAME | varchar(128) | NO | | NULL | |
| COLUMN_TYPE | varchar(128) | NO | | NULL | |
| TBL_ID | bigint(20) | NO | MUL | NULL | |
| LONG_LOW_VALUE | bigint(20) | YES | | NULL | |
| LONG_HIGH_VALUE | bigint(20) | YES | | NULL | |
| DOUBLE_HIGH_VALUE | double(53,4) | YES | | NULL | |
| DOUBLE_LOW_VALUE | double(53,4) | YES | | NULL | |
| BIG_DECIMAL_LOW_VALUE | varchar(4000) | YES | | NULL | |
| BIG_DECIMAL_HIGH_VALUE | varchar(4000) | YES | | NULL | |
| NUM_NULLS | bigint(20) | NO | | NULL | |
| NUM_DISTINCTS | bigint(20) | YES | | NULL | |
| AVG_COL_LEN | double(53,4) | YES | | NULL | |
| MAX_COL_LEN | bigint(20) | YES | | NULL | |
| NUM_TRUES | bigint(20) | YES | | NULL | |
| NUM_FALSES | bigint(20) | YES | | NULL | |
| LAST_ANALYZED | bigint(20) | NO | | NULL | |
+------------------------+---------------+------+-----+---------+-------+
19 rows in set (0.00 sec)
TBL_NAMEを指定して、見てみます。
mysql> select * from TAB_COL_STATS where TABLE_NAME='ms_tables'\G
Empty set (0.00 sec)
な、何もヒットしません。。
カラム名が、TBL_NAMEではなく、TABLE_NAMEなのもちょっと不自然ですが、これに入ってないのも不自然。。
その後いくつか眺めてみて、以下にたどり着きました。
mysql> select * From COLUMNS_V2 where CD_ID=6;
+-------+----------------------+------------------+-----------+-------------+
| CD_ID | COMMENT | COLUMN_NAME | TYPE_NAME | INTEGER_IDX |
+-------+----------------------+------------------+-----------+-------------+
| 6 | attributes of column | column_attribute | string | 0 |
| 6 | evaluation of column | column_score | float | 1 |
+-------+----------------------+------------------+-----------+-------------+
2 rows in set (0.00 sec)
COLUMNS_V2というテーブル名はどうなんだろ。。。と思いつつも、メタ情報管理のテーブルには辿りつけました。
ココらへんのテーブル整理は、利用するhiveのバージョン次第で変わるとも思いますし、運用にも関わるので、どこかで深掘りする時間も必要かな、と思いました。
今日はここまでとします。
次回はindexを見ていこうと思います。
5. おまけ
物理属性と論理属性のどちらもが、key, value形式で格納されているテーブル。
テーブルとしてどうなの、というところはおいておいて入っている情報は有用そう。
mysql> describe TABLE_PARAMS;
+-------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------+------+-----+---------+-------+
| TBL_ID | bigint(20) | NO | PRI | NULL | |
| PARAM_KEY | varchar(256) | NO | PRI | NULL | |
| PARAM_VALUE | varchar(4000) | YES | | NULL | |
+-------------+---------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql> select * from TABLE_PARAMS;
+--------+-----------------------+---------------+
| TBL_ID | PARAM_KEY | PARAM_VALUE |
+--------+-----------------------+---------------+
| 1 | COLUMN_STATS_ACCURATE | true |
| 1 | numFiles | 2 |
| 1 | numRows | 1 |
| 1 | rawDataSize | 1 |
| 1 | totalSize | 2 |
| 1 | transient_lastDdlTime | 1446483398 |
| 2 | COLUMN_STATS_ACCURATE | true |
| 2 | numFiles | 1 |
| 2 | numRows | 1 |
| 2 | rawDataSize | 1 |
| 2 | totalSize | 2 |
| 2 | transient_lastDdlTime | 1446483367 |
| 6 | author | letusfly85 |
| 6 | comment | dummy table |
| 6 | create_comment | start erdrepo |
| 6 | transient_lastDdlTime | 1446776197 |
+--------+-----------------------+---------------+
16 rows in set (0.00 sec)