ハイブビッグデータテクノロジー(ハイブコマンド--- DDLデータ定義)


ハイブビッグデータテクノロジー(ハイブコマンド)



1. DDLデータ定義



1.1データベースの作成


1)データベースを作成し、HDFS上のデフォルト・データベース・ストレージ・パスは/user/hive/warehouse/*.dbあります。

       create database db_hive;

裁判官が存在しない場合は2)、すでにエラーが存在するデータベースを作成するの増加は避けてください。(標準文言)

       create database if not exists db_hive;

3)データベースを作成し、HDFSに保存されている場所のデータベースを指定します

       create database db_hive2 location '/db_hive2.db';

2.2クエリのデータベース


2.2.1ディスプレイのデータベース
1。表示データベース

       show databases;

2。データベースクエリの表示をフィルタします

       show databases like 'db_hive*';

2.2.2 Viewデータベースは詳細
1。表示データベース情報

       desc database db_hive;

2。拡張ディスプレイデータベースの詳細、

      desc database extended db_hive;

2.2.3は、現在のデータベースを切り替えます

       use db_hive;

2.3データベース修正
ユーザは、データベースキーを提供したALTER DATABASEコマンドDBPROPERTIESを使用することができます-属性値の値を、属性情報は、このデータベースでは説明しました。他のメタデータ情報データベースには、データベースが置かれているデータベース・ディレクトリの名前と場所を含む、不変です。

       alter database db_hive set dbproperties('createtime'='20170830');

2.4データベースの削除
1。削除空のデータベース

       drop database db_hive2;

2。あなたが削除するとデータベースが存在する場合があるかどうかを判断するために、データベースを最大限に活用する存在しません。

       drop database if exists db_hive2;

3。データベースが空でない場合は、削除することを強制、カスケードコマンドを使用することができます

      drop database db_hive cascade;

2.5创建表
1建表语法
CREATE [EXTERNAL]表[NOTが存在する場合]テーブル名
[(COL_NAMEのDATA_TYPE [COMMENTのcol_comment]、...)]
[コメントのtable_comment]
[PARTITIONED BY(COL_NAMEのDATA_TYPE [COMMENTのcol_comment]、...)]
[ CLUSTERED BY(COL_NAME、COL_NAME、...)
[SORTED BY(COL_NAME [ASC | DESC]、...)] num_bucketsバケットINTO]
[行形式のROW_FORMAT]
[FILE_FORMAT]として保存され
、[LOCATIONのhdfs_path]

2。フィールドの説明
(1)指定した名前を持つテーブルを作成するために、テーブルを作成します。同じテーブル名が既に存在する場合は、例外がスローされ、そうでないが、この例外を無視するオプションを存在している場合、ユーザーは使用することができます。
テーブルの構造は、実際のデータ点(LOCATION)へのパスを指定しながら、(2)外部キーワードは、ユーザが外部表を作成することを可能にする場合、ハイブは、内部テーブルを作成し、データウェアハウスのデータポイントのパスに移動し、外部を作成する場合テーブルには、場合にのみデータパスを記録し、場所は、データに変更を加えることはありません。削除するには、テーブル、内部テーブルおよびデータのメタデータが一緒に削除され、外部のテーブルデータのみを削除しないでください、メタデータを削除します。
(3)COMMENT:テーブルおよび列にコメントを追加。
(4)PARTITIONED BYパーティションテーブルを作成する
(5)CLUSTERED BY部品表のキットを作成する
(6)SORTEDによって使用されない
(図7)ROW FORMAT
DELIMITED [コレクションcharでTERMINATED商品] [フィールドはBY CHAR TERMINATED]
[charでTERMINATED MAPキー] [charでTERMINATED LINES]
| SERDEのserde_name [WITH SERDEPROPERTIES(PROPERTY_NAME = PROPERTY_VALUE、PROPERTY_NAME = PROPERTY_VALUE、...)]
ユーザーがカスタムSerDeテーブルを構築したり、使用することができた場合、内蔵SerDe。あなたが行形式またはROWのFORMAT DELIMITEDを指定しない場合は、独自のSerDeを使用します。テーブルの構成において、ユーザは、指定の表に記載されているユーザーは、カスタムSerDeを指定しながら、テーブルの列を指定する必要があり、ハイブの表は、特定のデータ列SerDeによって決まります。
SerDeはシリアル化および逆シリアル化するためのもの、シリアライズ/ Deserilizeの短いです。
(8)記憶されたストレージ・ファイル・タイプを指定する
共通ストアファイルタイプ:SEQUENCEFILE(バイナリシーケンスファイル)、TEXTFILE(テキスト)、rcfileの(柱状記憶フォーマットファイル)
ファイルは、プレーンテキストデータである場合、AS TEXTFILE STOREDを使用することができます。あなたは、格納されたAS SEQUENCEFILEを使用して圧縮データに必要がある場合。
(9)LOCATION:指定位置テーブルは、HDFSに格納されています。
(10)のような、ユーザが既存のテーブルの構造をコピーすることを可能にするが、データをコピーしません。

2.5.1管理表
1。理論的な
テーブルは、時にはまた、内部テーブルと呼ばれる、デフォルトでは、いわゆる管理テーブルを作成しています。このため、テーブルの、ハイブは(多かれ少なかれ)になり、データのライフサイクルを制御します。上記で定義したハイブは、これらのテーブルは、構成項目hive.metastore.warehouse.dir(例えば、/ユーザ/ハイブ/倉庫)のサブディレクトリに格納されたデータをデフォルト設定されます。我々は、管理テーブルを削除すると、ハイブは、テーブル内のデータを削除します。経営陣は、共有データへのテーブルや他のツールには適していません。
2。以下の場合実用的な操作
共通テーブルを作成する(1)

create table if not exists student2(
id int, name string
)
row format delimited fields terminated by '\t'
stored as textfile
location '/user/hive/warehouse/student2';

(2)(クエリの結果は、新たに作成されたテーブルに追加される)クエリ結果に基づいて、テーブルを作成します

       create table if not exists student3 as select id, name from student;

(3)既存のテーブル構造に基づいてテーブルを作成します

       create table if not exists student4 like student;

タイプ(4)ルックアップテーブル

       desc formatted student2;

2.5.2外部表
1。理論は、
テーブルには、その全額出資のハイブは、このデータではないのでことを、外側のテーブルですので。このデータを削除しないテーブルを削除しますが、情報のメタデータ記述が削除されます。
2。管理と外側のテーブルの利用シナリオは、
毎日のウェブサイトのログを定期的にHDFSテキストファイルに流れ込む収集されます。内部にSELECT + INSERTを中間テーブルに使用される統計分析の多数の外部テーブル(元のログテーブル)を行って、内部テーブルを使用して、結果を表に格納され、データテーブルに基づいて。
3。ケースの実用的な操作
(1)生データ
わずか
するテーブルステートメントの(2)建設
分割テーブルを作成します

create external table if not exists default.dept(
deptno int,
dname string,
loc int
)
row format delimited fields terminated by '\t';

Employeeテーブルを作成します。

create external table if not exists default.emp(
empno int,
ename string,
job string,
mgr int,
hiredate string, 
sal double, 
comm double,
deptno int)
row format delimited fields terminated by '\t';

(3)は、テーブルが作成を参照してください。

       show tables;

外部表にデータに導入された(4)
データをインポート

        load data local inpath '/opt/module/datas/dept.txt' into table default.dept;
        load data local inpath '/opt/module/datas/emp.txt' into table default.emp;

クエリ結果

       select * from emp;
       select * from dept;

(5)表示フォーマットのデータ

       desc formatted dept;

2.5.3管理テーブル及び交換の外側テーブル
タイプ(1)ルックアップ・テーブル

       desc formatted student2;

(2)内部テーブル外側のテーブルstudent2を変更します

       alter table student2 set tblproperties('EXTERNAL'='TRUE');

タイプ(3)ルックアップテーブル

       desc formatted student2;

(4)内部テーブル外側のテーブルstudent2を変更します

       alter table student2 set tblproperties('EXTERNAL'='FALSE');

タイプ(5)ルックアップテーブル

       desc formatted student2;

注:( '外部' = 'TRUE')と( 'EXTERNAL' = 'FALSE')固定文言、大文字と小文字を区別!


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


パーティションテーブルは、実際のファイルシステムHDFSフォルダ上の別のファイルに対応している、フォルダにはすべてのデータファイルのパーティションです。ハイブのパーティションを分割ディレクトリでは、サービスに応じて小さなデータ・セットへの大規模なデータセットを必要としています。クエリクエリは、WHERE句の式で必要とされる指定されたパーティションを選択すると、このような問合せの効率は多くのことを改善します。
2.6.1基本的な操作のパーティションテーブル
1。パーティションテーブルの導入(日付に従って、ログ管理の必要性)

       /user/hive/warehouse/log_partition/20170702/20170702.log
       /user/hive/warehouse/log_partition/20170703/20170703.log
       /user/hive/warehouse/log_partition/20170704/20170704.log

2。パーティションテーブルの構文を作成します。

create table dept_partition(
deptno int, dname string, loc string
)
partitioned by (month string)
row format delimited fields terminated by '\t';

3。パーティションテーブルにデータをロードします

load data local inpath '/opt/dept.txt' into table default.dept_partition partition(month='201709');
load data local inpath '/opt/dept.txt' into table default.dept_partition partition(month='201708');
load data local inpath '/opt/dept.txt' into table default.dept_partition partition(month='201707');

4。照会のパーティションテーブルのデータ
単一パーティションのクエリ

select * from dept_partition where month='201709';

マルチパーティション共同問い合わせ

select * from dept_partition where month='201709'
union
select * from dept_partition where month='201708'
union
select * from dept_partition where month='201707';

5。地区を追加し
、単一のパーティションを作成します

alter table dept_partition add partition(month='201706') ;

複数のパーティションを作成します。

alter table dept_partition add partition(month='201705') partition(month='201704');

6。削除パーティション
の削除個々のパーティション

alter table dept_partition drop partition (month='201704');

削除複数のパーティション(プラス*** NOTE ***)

alter table dept_partition drop partition (month='201705'), partition (month='201706');

7。どのように多くのパーティションのパーティションテーブルを見ます

show partitions dept_partition;

8。パーティションテーブルの構造を見ます

desc formatted dept_partition;

2.6.2パーティションテーブル(注)
1。セカンダリ・パーティション表の作成

create table dept_partition2
(deptno int, dname string, loc string)
partitioned by (month string, day string)
row format delimited fields terminated by '\t';

2。通常の負荷データ
セカンダリパーティションテーブルにデータをロードする(1)

load data local inpath '/opt/dept.txt' into table
default.dept_partition2 partition(month='201709', day='13');

(2)分割されたデータのクエリ

select * from dept_partition2 where month='201709' and day='13';

3。データを直接ディレクトリパーティション、パーティションテーブルにアップロードされたデータは、関連する3つの方法で生成させている
(1)の方法:修理アップロードデータの後に
アップロードデータ

dfs -mkdir -p /user/hive/warehouse/dept_partition2/month=201709/day=12;
dfs -put /opt/dept.txt  /user/hive/warehouse/dept_partition2/month=201709/day=12;

クエリデータ(クエリデータだけでアップロードすることはできません)

select * from dept_partition2 where month='201709' and day='12';

修理オーダーを実行

msck repair table dept_partition2;

再びクエリデータ

select * from dept_partition2 where month='201709' and day='12';

(2)第二の方法:データ・パーティションをアップロードした後に追加され
たデータをアップロードします

 dfs -mkdir -p /user/hive/warehouse/dept_partition2/month=201709/day=11;
 dfs -put /opt/dept.txt  /user/hive/warehouse/dept_partition2/month=201709/day=11;

パーティションの実行を追加

alter table dept_partition2 add partition(month='201709',day='11');

クエリデータ

select * from dept_partition2 where month='201709' and day='11';

(3)3つの方法:フォルダを作成した後、パーティションにデータをロード
ディレクトリを作成するために

dfs -mkdir -p /user/hive/warehouse/dept_partition2/month=201709/day=10;

アップロードデータ

load data local inpath '/opt/dept.txt' into table dept_partition2 partition(month='201709',day='10');

クエリデータ

select * from dept_partition2 where month='201709' and day='10';

2.7テーブルを変更します


2.7.1名前の変更表
1。文法

       ALTER TABLE table_name RENAME TO new_table_name;

2。実用的な操作ケース

       alter table dept_partition2 rename to dept_partition3;

2.7.2追加、変更、およびパーティションテーブルが削除
2.6.1パーティションテーブルの基本的な操作を参照してください。
2.7.3追加/修正/列置換情報
1。構文
更新カラム
ALTER TABLEテーブル名CHANGE [COLUMN] col_old_name
付加および置換列
ALTERテーブルtable_nameのADD | COLUMNS REPLACE(
注:ADDは、新規の代表でありますフィールドによって、カラム(カラムの前にパーティション)の背後の位置にあるすべてのフィールドは、すべてのフィールドを示す置換テーブルで置き換えます。
2。体操ケース
(1)のルックアップテーブル構造

       desc dept_partition;

(2)は、列を追加します

       alter table dept_partition add columns(deptdesc string);

(3)ルックアップテーブルの構造

       desc dept_partition;

(4)更新列

       alter table dept_partition change column deptdesc desc int;

(5)ルックアップテーブルの構造

       desc dept_partition;

(6)カラムを取り付け

       alter table dept_partition replace columns(deptno string, dname string, loc string);

(7)ルックアップテーブル構造

       desc dept_partition;

2.8削除テーブル

       drop table dept_partition;
リリース7件のオリジナルの記事 ウォンの賞賛2 ビュー1716

おすすめ

転載: blog.csdn.net/weixin_45553177/article/details/104254276