ビッグバーナキュラーはビッグデータハイブの知識ポイントを詳細に説明しています、ラオス劉は本当に気配りがあります(2)

ここに画像の説明を挿入

Lao Liuはあえて自分の文章がどれほど優れているかを言うことはしませんでしたが、レビューの内容をできるだけ平易な英語で詳細に説明することを約束し、資料に機械的な方法を使用することを拒否しました。理解!

1.ハイブの知識ポイント(2)

ここに画像の説明を挿入
ポイント12:ハイブバケットテーブル

ハイブの知識ポイントは主に練習です。多くの人は、基本的なコマンドを覚える必要はないと考えています。ただし、基本的なコマンドを地上で構築する場合は、基本的なコマンドがどれほど基本的であっても、よく練習してもっと練習する必要があります。

ハイブでは、バケット化はパーティションのよりきめ細かい分割です。その中で、パーティションはデータのストレージパス用であり、バケットはデータファイル用です。LaoLiuは、2つの関連する画像を比較して、上記の違いを理解します。

1つ
ここに画像の説明を挿入
目は、テーブルのパーティション分割後の変更
ここに画像の説明を挿入
です。2つ目は、テーブルのパーティション分割後の変更です。これら2つの図から、パーティション分割とバケット化の違いを大まかに理解できます。

これらの2つの写真を見たので、ビニングが何であるかが大まかに明らかになるはずです。

バケットとは何ですか?

バケット化とは、特定の列属性値のハッシュ値に従ってデータコンテンツ全体を区別することであり、同じハッシュ値を持つデータは同じファイルに入ります。

説明のために:たとえば、3つのバケットに分割されたname属性に従って、つまり、name属性値のハッシュ値はモジュロ3であり、データはモジュロ結果に従ってバケットに分割されます。

モジュロ結果が0のデータレコードはファイルに保存されます。

モジュロ結果が1のデータレコードはファイルに保存されます。

モジュラス結果が2
のデータレコードはファイルに保存され、モジュラス結果が3のデータレコードはファイルに保存されます。
バケットテーブルのケースが多すぎるため、プラクティスを検索できます。

ポイント13:ハイブがテーブル構造を変更する

実際、この点については何も言うことはありません。情報に記載されており、LaoLiuもそれについて話しました。いくつかのコマンドを覚えておいてください。

修改表的名称
alter table stu3 rename to stu4;

表的结构信息
desc formatted stu4;

ポイント14:ハイブデータのインポート

テーブルが作成された後、データをテーブルにインポートする必要があるため、この部分は非常に重要です。データをインポートするための基本的なコマンドを使用することさえできない場合、それは間違いなく修飾されていません。これは非常に重要な基礎!

1.ロードを通じてデータをロードします(書き留める必要があります)

通过load方式加载数据
load data local inpath '/kkb/install/hivedatas/score.csv' overwrite into table score3 partition(month='201806');

2.クエリでデータをロードします(書き留める必要があります)

通过查询方式加载数据
create table score5 like score;
insert overwrite table score5 partition(month = '201806') select s_id,c_id,s_score from score;

ポイント15:ハイブデータのエクスポート

1.エクスポートを挿入

将查询的结果导出到本地
insert overwrite local directory '/kkb/install/hivedatas/stu' select * from stu;

将查询的结果格式化导出到本地
insert overwrite local directory '/kkb/install/hivedatas/stu2' row format delimited fields terminated by  ',' select * from stu;

将查询的结果导出到HDFS上(没有local)
insert overwrite  directory '/kkb/hivedatas/stu'  row format delimited fields terminated by  ','  select * from stu;

ポイント16:静的パーティションと動的パーティション

Hiveには2種類のパーティションがあり、1つは静的パーティション、つまり通常のパーティションです。もう1つは動的パーティション分割です。

静的パーティション:パーティションテーブルをロードするときは、クエリによってデータをパーティションテーブルにロードします。パーティションフィールドの値を指定する必要があります。

これは、2つの違いを示すための小さな例です。

1、创建分区表
use myhive;
create table order_partition(
order_number string,
order_price  double,
order_time string
)
partitioned BY(month string)
row format delimited fields terminated by '\t';

2、准备数据
cd /kkb/install/hivedatas
vim order.txt 
10001    100 2019-03-02
10002    200 2019-03-02
10003    300 2019-03-02
10004    400 2019-03-03
10005    500 2019-03-03
10006    600 2019-03-03
10007    700 2019-03-04
10008    800 2019-03-04
10009    900 2019-03-04

3、加载数据到分区表
load data local inpath '/kkb/install/hivedatas/order.txt' overwrite into table order_partition partition(month='2019-03');

4、查询结果数据    
select * from order_partition where month='2019-03';
结果为:
10001   100.0   2019-03-02      2019-03
10002   200.0   2019-03-02      2019-03
10003   300.0   2019-03-02      2019-03
10004   400.0   2019-03-03      2019-03
10005   500.0   2019-03-03      2019-03
10006   600.0   2019-03-03      2019-03
10007   700.0   2019-03-04      2019-03
10008   800.0   2019-03-04      2019-03
10009   900.0   2019-03-04      2019-03

動的パーティション:手動で指定しなくても、要件に応じてテーブルのさまざまなパーティションにデータを自動的にインポートします。

一度に複数のパーティションからデータを挿入する必要がある場合は、パーティションフィールドを指定する代わりに、動的パーティションを使用できます。システムは自動的にクエリを実行します。

動的パーティションの数には制限があり、既存のテーブルから作成する必要があります。

首先必须说的是,动态分区表一定是在已经创建的表里来创建
1、创建普通标
create table t_order(
    order_number string,
    order_price  double, 
    order_time   string
)row format delimited fields terminated by '\t';

2、创建目标分区表
create table order_dynamic_partition(
    order_number string,
    order_price  double    
)partitioned BY(order_time string)
row format delimited fields terminated by '\t';

3、准备数据
cd /kkb/install/hivedatas
vim order_partition.txt
10001    100 2019-03-02 
10002    200 2019-03-02
10003    300 2019-03-02
10004    400 2019-03-03
10005    500 2019-03-03
10006    600 2019-03-03
10007    700 2019-03-04
10008    800 2019-03-04
10009    900 2019-03-04

4、动态加载数据到分区表中
要想进行动态分区,需要设置参数
开启动态分区功能
set hive.exec.dynamic.partition=true; 
设置hive为非严格模式
set hive.exec.dynamic.partition.mode=nonstrict; 
insert into table order_dynamic_partition partition(order_time) select order_number,order_price,order_time from t_order;

5、查看分区
show partitions order_dynamic_partition;

ここに画像の説明を挿入
静的パーティションと動的パーティションの例はほとんど同じなので、理解しましょう。

ポイント17:ハイブの基本的なクエリ構文

Lao Liuは以前、ハイブの基本的なクエリ構文が非常に重要であると述べました。多くの人は、それをまったく覚える必要はないと考えています。必要なときにメモを見るだけです。しかし、Lao Liuの見解では、これは非常に重要です。間違った考え。

基盤が強くなく、地面が揺れているということわざがありますが、少なくとも、一般的に使用されるクエリ構文を習得する必要があります。

1.基本的な構文クエリ:

ここに画像の説明を挿入
limitステートメントとwhereステートメントは頻繁に使用されるため、別々に取り出してください。覚えておいてください。

limit 语句
select  * from score limit 5;

次はwhereステートメントです。これはwhereステートメントが非常に重要であることを示すために個別に取り出されています。whereステートメントを使用して、条件を満たさない行を除外します。

select  * from score where s_score > 60;

2.グループ文

ステートメントによるグループ化

group byステートメントは通常、1つ以上の列の結果をグループ化し、各グループで集計操作を実行するために集計関数で使用されます。注意すべき重要な点の1つは、集計関数max、min、avgを除いて、selectフィールドはgroupbyフィールドの後に選択する必要があるということです。

2つの小さな例を挙げてください。

(1)计算每个学生的平均分数
select s_id,avg(s_score) from score group by s_id;

(2)计算每个学生最高的分数
select s_id,max(s_score) from score group by s_id;

声明を持っている

声明を出すこととどこにあるかとの違いについて話させてください

①テーブル内の列のデータをクエリする場所。クエリ結果の列がデータを選択する場所があります。

②グループ化関数は、どこからでも記述できません。また、グループ化関数は、作成後に使用できます。

③Havingは、groupatingstatisticsステートメントによるグループ化にのみ使用されます。

2つの小さな例を挙げてください。

求每个学生的平均分数
select s_id,avg(s_score) from score group by s_id;

求每个学生平均分数大于60的人
select s_id,avg(s_score) as avgScore from score group by s_id having avgScore > 60;

3.結合ステートメント
ここに画像の説明を挿入
等価結合

通常のSQLJOINステートメントはハイブでサポートされていますが、同等の結合のみがサポートされており、非同等の結合はサポートされていません。

結合を使用する場合、テーブルにエイリアスを付けるかどうかを指定できます。エイリアシングの利点は、クエリを簡素化でき、便利なことです。

根据学生和成绩表,查询学生姓名对应的成绩
select * from stu left join score on stu.id = score.s_id;

合并老师与课程表
select * from teacher t join course c on t.t_id = c.t_id;

内部結合

2つのテーブルが内部結合の場合、両方のテーブルに結合条件に一致するデータがある場合にのみ、データが保持され、結合のデフォルトは内部結合です。

select * from teacher t inner join course c  on t.t_id = c.t_id;

左外部結合

左外部結合を実行すると、結合の左側にあるテーブル内でwhere句に一致するすべてのレコードが返されます。

查询老师对应的课程
select * from teacher t left outer join course c  on t.t_id = c.t_id;

右外部結合

右外部結合を実行すると、結合の右側にあるテーブル内でwhere句を満たすすべてのレコードが返されます。

查询老师对应的课程
select * from teacher t right outer join course c  on t.t_id = c.t_id;

4.並べ替え

グローバル注文による注文

order byを使用して並べ替える場合、ascは昇順を意味し、これがデフォルトです。descは降順を意味します。

查询学生的成绩,并按照分数降序排列
select * from score  s order by s_score desc ;

2.ハイブの概要

ハイブの知識ポイント(2)はほぼ共有されていますが、この部分は実践に偏っており、優れた実践が必要です。
Lao Liuの見解では、バケットテーブルと静的パーティション分割および動的パーティション分割の概念を覚えておく必要があります。残りはハイブの基本的なクエリ操作です。コマンドが多すぎるため、LaoLiuは一般的に使用されるコマンドの一部のみを共有しました。ステートメント、グループ化ステートメント、結合ステートメントなどを記憶する必要がある場所。
最後に、何か問題があると感じた場合は、公式アカウントに連絡することができます:コミュニケーションに懸命に取り組んでいるLaoLiu。ビッグデータの開発に興味のある学生の皆様のお役に立てれば幸いです。

文章が良いと思うなら、Lao Liuに親指を立ててください!

おすすめ

転載: blog.csdn.net/qq_36780184/article/details/111041263