31、HiveのDDLデータ定義

この記事では主にHiveのデータベース定義言語について説明します。関連するコンテンツをもっと見るには、「繭を壊して蝶になる-ビッグデータ」の列に注目してください。


目次

1つは、データベースです。

1.1データベースを作成する

1.2データベースの表示

1.3データベースの詳細を表示する

1.4データベースの切り替え

1.5データベースを変更する

1.6データベースを削除する

第二に、データシート

2.1テーブルを作成する

2.2 内部表

2.2.1例

2.3 外部表

2.3.1例

2.4内部テーブルと外部テーブルの相互変換

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

2.6テーブルの変更

2.6.1テーブル名を変更する

2.6.2列情報の変更

2.7テーブルを削除する


 

1つは、データベースです。

1.1データベースを作成する

CREATE DATABASE [IF NOT EXISTS] database_name
[COMMENT database_comment]  # 数据库注释
[LOCATION hdfs_path]  # 指定数据库存放在hdfs上的位置
[WITH DBPROPERTIES (property_name=property_value, ...)];  # 属性参数

1.2データベースの表示

show databases;

show databases like 'xz*';

1.3データベースの詳細を表示する

desc database xzw;

desc database extended xzw;

1.4データベースの切り替え

1.5データベースを変更する

ユーザーは、ALTER DATABASEコマンドを使用して、データベースのキーと値のペアの属性値を設定し、このデータベースの属性情報を記述することができます。データベース名やデータベースが配置されているディレクトリの場所など、データベースの他のメタデータ情報は変更できません。

alter database xzw set dbproperties('createtime'='20201213');

1.6データベースを削除する

drop database [if exists] database_name;

カスケードコマンドを使用して、データベースを強制的に削除することもできます。

drop database database_name cascade;

第二に、データシート

2.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]
[TBLPROPERTIES (property_name=property_value, ...)]
[AS select_statement]

表のフィールドは次のとおりです。

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

(2)EXTERNAL:キーワードにより、ユーザーは外部テーブルを作成できます。テーブルを作成するときに、実際のデータへのパス(LOCATION)を指定できます。テーブルが削除されると、内部テーブルのメタデータとデータが削除されます。外部テーブルはメタデータのみを削除し、データは削除しません。

(3)コメント:テーブルと列にメモを追加します。

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

(5)CLUSTERED BY:バケットテーブルを作成します。

(6)並べ替え:一般的には使用されません。バケット内の1つ以上の列が個別に並べ替えられます。

(7)行形式の区切り[charで終了するフィールド] [charで終了するコレクションアイテム] [charで終了するマップキー] [charで終了する行] | SERDE serde_name [WITH SERDEPROPERTIES(property_name = property_value、property_name =)]: SerDeをカスタマイズするか、テーブルを作成するときに組み込みのSerDeを使用できます。ROWFORMATまたはROWFORMAT DELIMITEDが指定されていない場合、組み込みのSerDeが使用されます。テーブルを作成するとき、ユーザーはテーブルの列も指定する必要があります。テーブルの列を指定するとき、ユーザーはカスタムSerDeも指定します。HiveはSerDeを使用してテーブルの特定の列データを決定します。SerDeはSerialize / Deserilizeの略語で、HiveはSerdeを使用して行オブジェクトをシーケンスおよび逆シリアル化します。

(8)STORED ASは、ストレージファイルタイプを指定します。一般的に使用されるストレージファイルタイプ:SEQUENCEFILE(バイナリシーケンスファイル)、TEXTFILE(テキスト)、RCFILE(列ストレージ形式ファイル)。ファイルデータがプレーンテキストの場合は、STORED ASTEXTFILEを使用できます。データを圧縮する必要がある場合は、STORED ASSEQUENCEFILEを使用してください。

(9)LOCATION:HDFS上のテーブルの保存場所を指定します。

(10)AS:クエリステートメントに続いて、クエリ結果に基づいてテーブルを作成します。

(11)LIKEを使用すると、ユーザーは既存のテーブル構造をコピーできますが、データはコピーされません。

2.2 内部表

管理テーブルとも呼ばれる内部テーブルは、デフォルトで作成されるテーブルです。デフォルトでは、Hiveはこれらのテーブルのデータを構成アイテムhive.metastore.warehouse.dirで定義されたディレクトリーのサブディレクトリーに保管します。内部テーブルを削除すると、Hiveはこのテーブルのデータも削除します。

2.2.1例

1.内部テーブルを作成します 

create table if not exists inner_table(
id int,
name string
)
row format delimited fields terminated by '\t';

2.次のコマンドでテーブルタイプを表示します 

=

2.3 外部表

テーブルは外部テーブルであるため、Hiveはこのデータを完全に所有しているとは考えていません。したがって、テーブルを削除してもこのデータは削除されませんが、テーブルを説明するメタデータ情報は削除されます。

2.3.1例

1.外部テーブルを作成します。渡す場合、テーブル作成ステートメントの後にlocation属性が続き、HDFS上のデータの保存場所を指定します。

create external table outer_table(
id int,
name string
)
row format delimited fields terminated by '\t';

2.次の方法でテーブルのタイプを表示します

 

2.4内部テーブルと外部テーブルの相互変換

内部テーブルと外部テーブルは、次のコマンドを使用して相互に変換できます。

内部表转外部表:
alter table test set tblproperties('EXTERNAL'='TRUE');

外部表转内部表:
alter table test set tblproperties('EXTERNAL'='FALSE');

上記のコードの括弧内の内容は固定された表現であり、自由に小文字に変更することはできないことに注意してください。

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

パーティションテーブルは、実際にはHDFSファイルシステム上の独立したフォルダーに対応しており、パーティションのすべてのデータファイルはこのフォルダーの下にあります。Hiveのパーティションはサブディレクトリであり、ビジネスニーズに応じて大きなデータセットを小さなデータセットに分割します。クエリを実行するときは、WHERE句の式を使用してクエリに必要な指定のパーティションを選択すると、パーティション化によってクエリの効率が大幅に向上します。注:パーティションのフィールドをテーブルの既存のフィールドにすることはできません。

create table partition_tab(
id int,
name string
)
partitioned by (rq string)
row format delimited fields terminated by '\t';

1.次のコマンドを使用して、データをパーティションテーブルにロードします。

load data local inpath '/root/files/stu.txt' into table xzw.partition_tab partition(rq='202012');

2.次のコマンドを使用して、パーティションテーブルのデータをクエリします。

select * from partition_tab where rq='202012';

3.パーティションを増やします

增加单个分区:
alter table partition_tab add partition(rq='202011');

增加多个分区:
alter table partition_tab add partition(rq='202011') partition(rq='202010');

4.パーティションを削除します

删除单个分区:
alter table partition_tab drop partition (rq='202010');

删除多个分区:
alter table partition_tab drop partition (rq='202010'), partition (rq='202011');

5.パーティションテーブルにパーティションがいくつあるかを確認します

show partitions partition_tab;

6.パーティションテーブルはセカンダリパーティションを作成できます

create table partition_tab(
id int,
name string
)
partitioned by (rq string, loc string)
row format delimited fields terminated by '\t';

7.パーティションテーブルをデータにリンクするいくつかの方法

(1)まず、hdfsに対応するパーティションにデータをアップロードしてから、パーティションテーブルを修復します。修復コマンドは次のとおりです。

msck repair table partition_tab;

(2)最初にデータをアップロードしてから、パーティションを追加します。

2.6テーブルの変更

2.6.1テーブル名を変更する

ALTER TABLE table_name RENAME TO new_table_name;

2.6.2列情報の変更

1、更新列
ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_name column_type [COMMENT col_comment] [FIRST|AFTER column_name]

2、增加列
ALTER TABLE table_name ADD COLUMNS (col_name data_type [COMMENT col_comment], ...) 

3、替换列
ALTER TABLE table_name REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...) 

2.7テーブルを削除する

drop table tab_name;

 

上記は、この記事のHive DDLデータ定義の全内容です。プロセスでどのような問題が発生しましたか。メッセージを残して、どのような問題が発生したかを確認させてください。

おすすめ

転載: blog.csdn.net/gdkyxy2013/article/details/111090569