ハイブ - DDLデータ定義

1.データベースを作成します。

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

hive > create database db_hive;

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

hive > create database db_hive;

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Database db_hive already exists

hive > create database if not exists db_hive;

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

hive > create database db_hive2 location '/db_hive2.db';

2、データベースを照会

2.1ディスプレイのデータベース

1。表示データベース

hive> show databases;

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

hive> show databases like 'db_hive*';

OK

db_hive

db_hive_1

2.2 Viewデータベースの詳細

1。表示データベース情報

hive> desc database db_hive;

OK

db_hive hdfs://hadoop102:9000/user/hive/warehouse/db_hive.db atguiguUSER

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

hive> desc database extended db_hive;

OK

db_hive hdfs://hadoop102:9000/user/hive/warehouse/db_hive.db atguiguUSER

40.3.3 切换当前数据库

hive (default)> use db_hive;

2 .3現在のデータベースを切り替えます

hive > use db_hive;

3、データベースを変更

        このデータベースに記載された情報を、属性値の値属性-ユーザーがキーDBPROPERTIESにデータベースを設定するには、ALTER DATABASEコマンドを使用することができます。他のメタデータ情報データベースには、データベースが置かれているデータベース・ディレクトリの名前と場所を含む、不変です。現在使用中のデータベースを変更し、使用して終了

ハイブ(デフォルト)>( 'CREATETIME' = '20170830')データベースdb_hiveセットdbpropertiesを変更します。

ハイブの変更はにつながる見ます

hive> desc database extended db_hive;

db_name comment location owner_name owner_type parameters

db_hive hdfs://master:8020/user/hive/warehouse/db_hive.db root USER {createtime=20170830}

4、データベースを削除

1。空のデータベースを削除します。

hive>drop database db_hive2;

2。あなたが存在しないデータベースを削除する場合が存在する場合は、データベースの最適な使用が存在するかどうかを判断します

hive> drop database db_hive;

FAILED: SemanticException [Error 10072]: Database does not exist: db_hive

hive> drop database if exists db_hive2;

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

hive> drop database db_hive;

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. InvalidOperationException(message:Database db_hive is not empty. One or more tables exist.)

hive> drop database db_hive cascade;

5.テーブルを作成します。

1。テーブルの構文を構築するには

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name

[(col_name data_type [COMMENT col_comment], ...)]

[COMMENT table_comment]

[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]

[CLUSTERED BY (col_name, col_name, ...)

[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]

[ROW FORMAT row_format]

[STORED AS file_format]

[LOCATION hdfs_path]

2。フィールドの説明

(1)テーブル名が指定されたテーブルを作成し、CREATE。同じテーブル名が既に存在する場合は、例外がスローされ、そうでないが、この例外を無視するオプションを存在している場合、ユーザーは使用することができます。

テーブルの構造は、実際のデータ点(位置)へのパスを指定しながら、(2)外部キーワードは、ユーザが外部表を作成することを可能にする外部を作成した場合、ハイブが内部テーブルを作成するときに、データウェアハウスのデータポイントのパスに移動しますテーブル、レコードのみデータパス、場所は、データに変更を加えることはありません内部テーブルとデータのメタデータが一緒に削除され、テーブルを削除し、外部表メタデータのみを削除し、データを削除しないでください。

(3)COMMENT:テーブルおよび列にコメントを追加。

(4)PARTITIONED BYは、パーティションテーブルを作成します

(5)サブバケットテーブルを作成BY CLUSTERED

(6)使用しないでソート

(7)行形式

DELIMITED [charでTERMINATED FIELDS] [charでTERMINATEDコレクションアイテム]

        [charでTERMINATED MAPのKEYS] [charでTERMINATED LINES]

   | [SERDEPROPERTIES(PROPERTY_NAME = PROPERTY_VALUE、PROPERTY_NAME = PROPERTY_VALUE、...)WITH] SERDEのserde_name

ときにユーザーがカスタムSerDeテーブルを構築したり、内蔵のSerDeを使用することができます。あなたが行形式またはROWのFORMAT DELIMITEDを指定しない場合は、独自のSerDeを使用します。テーブルの構成において、ユーザは、指定されたテーブルにリストされたユーザは、特定のデータ列SerDeによって決定カスタムSerDe、ハイブテーブルを指定しながら、テーブルの列を指定する必要があります。

SerDeはシリアル化および逆シリアル化するためのもの、短いシリアライズ/ Deserilizeです。

(8)指定された保存ファイルの種類として保存され

共通ストアファイルの種類:SEQUENCEFILE(バイナリシーケンスファイル)、TEXTFILE(テキスト)、のrcfile(柱状保存形式)

データファイルはプレーンテキストである場合は、TEXTFILEとして格納を使用することができます。あなたはSEQUENCEFILEとして格納されて使用してデータを圧縮する必要がある場合。

(9)場所:ロケーションテーブルをHDFSに格納されている指定します。

(10)のような、ユーザが既存のテーブルの構造をコピーすることを可能にするが、データをコピーしません。

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)ルックアップテーブル

hive > desc formatted student2;

Table Type:             MANAGED_TABLE  

5.2 外部表

1。理論

        表が外部表であるためように、その完全所有ハイブは、このデータではありません。このデータを削除しないテーブルを削除しますが、情報のメタデータ記述が削除されます。

2。使用シナリオの管理と外側のテーブル

        収集し、毎日ウェブサイトのログを定期的にHDFSテキストファイルに流れ込みます。統計分析の多数の外部テーブル(元のログテーブル)を行うに基づいて結果テーブルに格納されている内部テーブルを使用して、テーブルに使用される中間データテーブルは、内部への挿入+ SELECT。

3。ケース実用的な操作

        作成部署と従業員が外のテーブルであり、テーブル内のデータをインポートします。

    (1)生データ

dept.txt
10	ACCOUNTING	1700
20	RESEARCH	1800
30	SALES	1900
40	OPERATIONS	1700

emp.txt
7369	SMITH	CLERK	7902	1980-12-17	800.00		20
7499	ALLEN	SALESMAN	7698	1981-2-20	1600.00	300.00	30
7521	WARD	SALESMAN	7698	1981-2-22	1250.00	500.00	30
7566	JONES	MANAGER	7839	1981-4-2	2975.00		20
7654	MARTIN	SALESMAN	7698	1981-9-28	1250.00	1400.00	30
7698	BLAKE	MANAGER	7839	1981-5-1	2850.00		30
7782	CLARK	MANAGER	7839	1981-6-9	2450.00		10
7788	SCOTT	ANALYST	7566	1987-4-19	3000.00		20
7839	KING	PRESIDENT		1981-11-17	5000.00		10
7844	TURNER	SALESMAN	7698	1981-9-8	1500.00	0.00	30
7876	ADAMS	CLERK	7788	1987-5-23	1100.00		20
7900	JAMES	CLERK	7698	1981-12-3	950.00		30
7902	FORD	ANALYST	7566	1981-12-3	3000.00		20
7934	MILLER	CLERK	7782	1982-1-23	1300.00		10

table文の(2)建設

Departmentテーブルの作成

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)テーブル作成を参照してください。

ハイブ>ショーテーブル。

OK

TAB_NAME

DEPT

EMP

(4)外部のテーブルデータに

データのインポート

ハイブ>負荷データテーブルdefault.deptにローカルINPATH「/opt/module/datas/dept.txt」;

ハイブ>負荷データテーブルdefault.empにローカルINPATH「/opt/module/datas/emp.txt」;

クエリ結果

ハイブ> EMPから選択*;

ハイブ> DEPTから選択*;

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

ハイブ> DESCフォーマットさDEPT。

テーブルタイプ:EXTERNAL_TABLE

5.3 管理テーブルと交換外側テーブル

だけではないに完全に準拠し、単一引用符、厳密に大文字と小文字を区別し、使用することができ、それが唯一のKVを追加することなく、有効になります

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

ハイブ> DESCフォーマットさstudent2。

テーブルタイプ:MANAGED_TABLE

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

変更テーブルstudent2セットtblproperties( '外部' = 'TRUE');

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

ハイブ> DESCフォーマットさstudent2。

テーブルタイプ:EXTERNAL_TABLE

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

変更テーブルstudent2セットtblproperties(「外部」=「偽」)。

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

ハイブ> DESCフォーマットさstudent2。

テーブルタイプ:MANAGED_TABLE

          注意:( 'EXTERNAL' = ' TRUE ')( 'EXTERNAL' = 'false'に ) 大文字小文字を区別し、固定文言を!

6、パーティションテーブル

        パーティションテーブルは、実際のファイルシステムHDFSフォルダ上の別のファイルに対応している、フォルダにはすべてのデータファイルのパーティションです。ハイブのパーティションのサブディレクトリで、サービスに応じた小さなデータセットに大きなデータセットの必要性。クエリクエリは、WHERE句の式で必要とされる指定されたパーティションを選択すると、このような問合せの効率は多くのことを改善します。

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。パーティションテーブルの構文を作成します。

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

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

ハイブ>負荷データテーブルdefault.dept_partitionパーティションにローカルINPATH「/opt/module/datas/dept.txt」(月=「201709」)。

ハイブ>負荷データテーブルdefault.dept_partitionパーティションにローカルINPATH「/opt/module/datas/dept.txt」(月=「201708」)。

ハイブ>負荷データテーブルdefault.dept_partitionパーティションにローカルINPATH「/opt/module/datas/dept.txt」(月=「201707」)。

4。クエリデータパーティションテーブル

単一パーティションのクエリ

ハイブ> * dept_partitionからどこヶ月=「201709」を選択します。

マルチパーティション共同問い合わせ組合(ソート)または3つの方法で

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

_u3.deptno      _u3.dname       _u3.loc _u3.month
10      ACCOUNTING      NEW YORK        201707
10      ACCOUNTING      NEW YORK        201708
10      ACCOUNTING      NEW YORK        201709
20      RESEARCH        DALLAS  201707
20      RESEARCH        DALLAS  201708
20      RESEARCH        DALLAS  201709
30      SALES   CHICAGO 201707
30      SALES   CHICAGO 201708
30      SALES   CHICAGO 201709
40      OPERATIONS      BOSTON  201707
40      OPERATIONS      BOSTON  201708
40      OPERATIONS      BOSTON  201709

5。地区を追加

単一のパーティションを作成します。

ハイブは、テーブルdept_partitionは、パーティションを追加変更>(月= '201706');

複数のパーティション作成 をスペースで区切って

ハイブは、テーブルdept_partitionは、パーティションを追加変更>(月= '201705')パーティション(月= '201704');

6。パーティションを削除

単一のパーティションを削除するには

ハイブ>テーブルdept_partitionドロップパーティション(月=「201704」)を改変すること。

複数のパーティションの削除  カンマで区切って

ハイブ>表dept_partitionドロップパーティション(月= '201705')、パーティション(月= '201706')を変化させます。

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

ハイブ>ショーパーティションのdept_partition。

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

ハイブ> DESCフォーマットさdept_partition。

 

#パーティション情報          

#COL_NAMEのDATA_TYPEコメント             

月の文字列    

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)二次パーティションテーブルにデータをロードするの

ハイブ>負荷データテーブルにローカルINPATH「/opt/module/datas/dept.txt」

 default.dept_partition2パーティション(月= '201709'、日= '13' );

(2)データのクエリを分配

ハイブ> SELECT * FROM dept_partition2どこから月= '201709' と日= '13' ;

3。データは直接、ディレクトリパーティションにアップロードされるので、パーティションテーブルと3通りの方法で生成された関連するデータ

(1)一つの方法:データ復旧をアップロードした後

データをアップロード 

ハイブ> DFS -mkdir -p

  /ユーザ/ハイブ/倉庫/ dept_partition2 /月= 201709 /日= 12。

ハイブ> DFS -put /opt/module/datas/dept.txt/user/hive/warehouse

/ dept_partition2 /月= 201709 /日= 12;

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

ハイブ> SELECT * FROM dept_partition2どこから月= '201709' と日= '12' ;

修理オーダーを実行

ハイブ> MSCK修理テーブルdept_partition2。

再びデータを照会

ハイブ> SELECT * FROM dept_partition2どこから月= '201709' と日= '12' ;

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

データをアップロード

ハイブ> DFS -mkdir -p

 /ユーザ/ハイブ/倉庫/ dept_partition2 /月= 201709 /日= 11。

ハイブ> DFS -put /opt/module/datas/dept.txt /ユーザー/ハイブ/倉庫/ dept_partition2 /月= 201709 /日= 11;

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

ハイブ>は、テーブルdept_partition2は、パーティション(月=「201709」を追加、変更します、

 日= '11' );

クエリデータ

ハイブ> SELECT * FROM dept_partition2どこから月= '201709' と日= '11' ;

(3)3つの方法:分割負荷にデータをアップロードした後、

ディレクトリを作成します

ハイブ> DFS -mkdir -p

 /ユーザ/ハイブ/倉庫/ dept_partition2 /月= 201709 /日= 10。

データをアップロード

ハイブ>負荷データテーブルにローカルINPATH「/opt/module/datas/dept.txt」

 dept_partition2パーティション(月= '201709'、日= '10' );

クエリデータ

ハイブ> SELECT * FROM dept_partition2どこから月= '201709' と日= '10' ;

7テーブルを変更します。

7.1テーブルの名前を変更します

1。文法

new_table_name TOテーブルtable_nameのRENAMEをALTER

2。実用的な操作ケース

ハイブ> dept_partition3するテーブルdept_partition2リネームを改変すること。

7.2パーティションテーブルを追加、修正、削除

    基本的な操作のパーティションテーブルの上に6.1を参照してください。

7.3列情報を交換/修正/追加

1。文法

列を更新

テーブルtable_nameのALTER CHANGE  [COLUMN] col_old_name col_new_name COLUMN_TYPE [COMMENTのcol_comment] [| COLUMN_NAME AFTER FIRST]を

付加および置換コラム

テーブルtable_nameのALTER ADDを| REPLACE  COLUMNS(COL_NAMEのDATA_TYPE [COMMENTのcol_comment]を、...)

注:ADDは新しい分野の代表である、列(列の前にパーティション)の後ろの位置にあるすべてのフィールド、REPLACEは、すべてのフィールドを示す置換テーブルです。

2。実用的な操作ケース

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

ハイブ>降順dept_partition。

(2)の列を追加

ハイブ>は、テーブルdept_partitionが列(deptdesc文字列)を追加変更します。

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

ハイブ>降順dept_partition。

(4)列を更新

ハイブ> DESC int型deptdescテーブルdept_partition変更列を変更。

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

ハイブ>降順dept_partition。

(6)交換カラム

ハイブ>テーブルdept_partitionが列(DEPTNO列、DNAMEを交換変えます

 文字列、LOC列);

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

ハイブ>降順dept_partition。

8、テーブルを削除

ハイブ>ドロップテーブルdept_partition。

 

 

 

 

おすすめ

転載: blog.csdn.net/qq_41544550/article/details/92133602