ハイブ研究ノート(2)-データモデル

ハイブの5つのデータモデル

1 内部表

1)内部テーブルを作成します。これは
、MySQLテーブルがデフォルトで保存されるHDFSディレクトリ/ user / hive / warehouseに相当します。

create table emp
			(empno int,
			ename string,
			job string,
			mgr int,
			hiredate string,
			sal int,
			comm int,
			deptno int
			)row format delimited fields terminated by ',';

2)データをインポートする

load data inpath '/scott/emp.csv' into table emp;   -- 导入HDFS的数据,是剪切
load data local inpath '/root/temp/*****' into table emp;    --导入本地Linux的数据,是复制

2 外部表

1)外部テーブルを作成します

hive> create external table fz_external_table(id int,name string,age int,tel string)

    > ROW FORMAT DELIMITED

    > FIELDS TERMINATED BY ','

    > STORED AS TEXTFILE

    > location '/user/hive/external/fz_external_table'; --hive外部表存储的位置

外部キーワードは、外部テーブルを作成するときに追加する必要があります。テーブルを作成するときに場所を指定しました。もちろん、指定する必要はありません。指定しない場合、hive.metastore.warehouse.dirで指定するパスは次のようになります。デフォルトで使用されます。
2)データのインポート
事前にデータファイルfz_external.txtを用意してください。データは上記と同じですが、名前が変更されています。

1,fz,25,13188888888888
2,test,20,13222222222
3,dx,24,183938384983
4,test1,22,1111111111

インポート操作:

hive> load data local inpath '/Users/FengZhen/Desktop/Hadoop/hive/testfile/fz_external_table.txt' into table fz_external_table;
Loading data to table default.fz_external_table
Table default.fz_external_table stats: [numFiles=0, totalSize=0]
OK
Time taken: 0.224 seconds

表のデータを表示します。

hive> select * from fz_external_table;
OK
   fz    25    13188888888888
   test    20    13222222222
   dx    24    183938384983
   test1    22    1111111111
Time taken: 0.06 seconds, Fetched: 4 row(s)

データが正常にインポートされたので、HDFSに移動して、場所で指定されたパスの下で以下を確認します。

rooot@master$ hadoop fs -ls /user/hive/external/fz_external_table;
Found 1 items
-rwxr-xr-x   1 FengZhen supergroup         88 2017-06-06 13:44 /user/hive/external/fz_external_table/fz_external_table.txt

ご覧のとおり、データを外部テーブルにインポートすると、ローカルファイルシステムのデータファイルもHDFSにコピーされます。

次に、外部テーブルを削除して、HDFS内のファイルが削除されているかどうかを確認しましょう。

hive> drop table fz_external_table;
OK
Time taken: 0.103 seconds

外部テーブルは正常に削除されました。HDFSを確認してください

root@master$ hadoop fs -ls /user/hive/external/fz_external_table;
Found 1 items
-rwxr-xr-x   1 FengZhen supergroup         88 2017-06-06 13:44 /user/hive/external/fz_external_table/fz_external_table.txt

テーブルを削除してもHDFS内のデータファイルは存在していることがわかります。つまり、外部テーブルを削除する場合、削除できるのはテーブルデータのみで、データファイルは削除できません。

3パーティションテーブル

主にクエリを最適化するために、対応するテーブルのデータが表示されている限り、すべてのテーブルのデータをスキャンする必要はありません
1)パーティションテーブルを作成します

create table art_dt(sentence string)
partitioned by (dt string)
row format delimited fields terminated by '\n';

2)データを挿入する

insert overwrite table art_dt partition(dt='20190420')
select * from art_ext limit 100;
insert overwrite table art_dt partition(dt='20190421')
select * from art_ext limit 100;--sql做数据的etl,或者统计分析等的处理逻辑

3)パーティションの数を表示する

show partitions art_dt;

4バレルテーブル

主にデータのサンプリングと表示のために、バケット化のために現在ハイブにあるテーブルのデータをクエリする必要があります!
1)バケットテーブルの作成
-1。補助テーブル
データファイルbucket_test.txtの生成

1
2
3
4
5
6
...
32
--1.生成辅助表
create table bucket_num(num int);
load data local inpath '/home/badou/Documents/data/hive/bucket_test.txt' 
into table bucket_num;

–2。各番号がバケットに入ります
–2.1テーブルを作成します(テーブルのメタデータ情報を確立します)

set hive.enforce.bucketing = true;
create table bucket_test(num int)
clustered by(num)
into 32 buckets;

2.2データをクエリし、対応するテーブルにインポートします

insert overwrite table bucket_test
select cast(num as int) as num from bucket_num;

3)サンプリング

--sample
select * from bucket_test tablesample(bucket 1 out of 32 on num);
--第一个bucket,00_0,32  
select * from bucket_test tablesample(bucket 1 out of 16 on num);
--第1个和第17个bucket:00_0和16_0, 32和16

对于桶表关键点的理解是如何去抽样?对于此会单独写一篇博文来阐述.
--测试1/2个bucket:
set hive.enforce.bucketing = true;
create table bucket_test4(num int)
clustered by(num)
into 4 buckets;
insert overwrite table bucket_test4
select num from bucket_num;

select * from bucket_test4 tablesample(bucket 1 out of 8 on num);
--数据没有分桶,怎么采样数据?
select * from bucket_test4 where num%10>0;

5ビュー

MySQLの観点からビューを説明します。
ビューはデータベースの基本テーブルから選択されたデータで構成される論理ウィンドウです。基本テーブルとは異なり、仮想テーブルです。データベースには、ビューの定義のみが格納され、ビューに含まれるデータ項目は格納されません。これらの項目は、元の基本的なテーブル構造に引き続き格納されます。
ビューは、複数のテーブルの接続として定義することも、表示される列の一部のみ、または表示される行の一部として定義することもできます。
ビューを導入する理由:
1はSQLステートメントを簡素化できます
2データセキュリティを向上させます
3ユーザーはさまざまな角度からデータを理解できます
4ビューは独立した論理テーブル
ですビューを導入する利点:
開発者がデータに集中できるようにする必要なデータに必要はありませんそれらの不要なデータと無駄な時間を調べることで、開発効率も向上します。

Hiveビュー
Hiveビューはデータを格納しません。つまり、現在のバージョンはマテリアライズドビューをサポートしていません。
1)補助テーブルを作成します

create table emp(name string,age int,gender string)
row format delimited fields terminated by ',';

データのインポート

load data local inpath '/root/sutdent.txt' into table emp;

2)ビューを作成します

create view test_view 
as
select * from emp

3)ビューデータを表示する

hive (default)> select * from test_view;
OK
lisa	18	女
Elia	22	女
jack	19	男
tom	17Time taken: 0.403 seconds, Fetched: 4 row(s)

4)ビューを削除します

drop view test_view;   --跟删除表不一样

5)ビューを使用してコピーすることもできます

--只是复制了表结构,并无数据
create table test_view2
like test_view

6)ハイブビューで注意すべき点:

  • ビューは読み取り専用です。ビューの場合、メンバーデータのTBLPROPERTIES属性情報のみを変更できます。
ALTER VIEW test_view SET TBLPROPERTIES(‘crated_at’='some_timestamp'
  • ビューは、挿入ステートメントまたはロードコマンドのターゲットテーブルとして使用できません。
  • ドロップでビューを削除 見る test_view;

7)ビューのビューメタデータ情報(他のデータモデルに適用可能)の
説明

hive (default)> desc test_view;
OK
name                	string              	                    
age                 	int                 	                    
gender              	string              	                    
Time taken: 0.136 seconds, Fetched: 3 row(s)

拡張された説明

hive (default)> describe extended test_view;
OK
name                	string              	                    
age                 	int                 	                    
gender              	string              	                    
	 	 
Detailed Table Information	Table(tableName:test_view, dbName:default, owner:root, createTime:1557252551, lastAccessTime:0, retention:0, sd:StorageDescriptor(cols:[FieldSchema(name:name, type:string, comment:null), FieldSchema(name:age, type:int, comment:null), FieldSchema(name:gender, type:string, comment:null)], location:null, inputFormat:org.apache.hadoop.mapred.TextInputFormat, outputFormat:org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat, compressed:false, numBuckets:-1, serdeInfo:SerDeInfo(name:null, serializationLib:null, parameters:{}), bucketCols:[], sortCols:[], parameters:{}, skewedInfo:SkewedInfo(skewedColNames:[], skewedColValues:[], skewedColValueLocationMaps:{}), storedAsSubDirectories:false), partitionKeys:[], parameters:{transient_lastDdlTime=1557252551}, viewOriginalText:select * from emp, viewExpandedText:select `emp`.`name`, `emp`.`age`, `emp`.`gender` from `default`.`emp`, tableType:VIRTUAL_VIEW, rewriteEnabled:false)	
Time taken: 0.331 seconds, Fetched: 5 row(s)

おすすめ

転載: blog.csdn.net/u013963379/article/details/89893788