Hive シリーズ - DDL データ定義
図書館運営
データベースを作成する
CREATE DATABASE [IF NOT EXISTS] database_name [COMMENT database_comment]
[LOCATION hdfs_path]
[WITH DBPROPERTIES (
property_name=property_value,
...
)
];
- データベースを作成します。HDFS 上のデータベースのデフォルトのストレージ パスは /hive/warehouse/*.db です。
create database hive_nb;
- 作成するデータベースが既に存在するというエラーを避けるため、存在しない場合の判定を追加します。(標準的な文言)
create database if not exists hive_nb;
- データベースを作成し、データベースが HDFS 上に保存される場所を指定します
create database hive_nb location '/hive_nb.db';
クエリデータベース
データベースを表示
show databases;
表示されるデータベースをフィルタリングする
show databases like 'hive_nb*';
データベースの詳細を表示する
データベース情報を表示する
desc database hive_nb;
データベースの詳細を表示、拡張
desc database extended hive_nb;
現在のデータベースを切り替える
use hive_nb;
データベースを変更する
ユーザーは、ALTER DATABASE コマンドを使用して、特定のデータベースの DBPROPERTIES のキーと値のペアのプロパティ値を設定し、このデータベースのプロパティ情報を記述することができます。
alter database hive_nb
set dbproperties('createtime'='20230313');
データベースを削除する
空のデータベースを削除する
drop database hive_nb;
削除されたデータベースが存在しない場合は、if doesn't を使用してデータベースが存在するかどうかを判断することをお勧めします。
drop database if exists hive_nb;
空ではないデータベースを削除する
データベースが空でない場合は、cascade コマンドを使用して強制的に削除できます。
drop database hive_nb cascade;
テーブル操作
テーブル作成構文
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]
フィールドの説明
-
CREATE TABLE は、指定された名前でテーブルを作成します。同じ名前のテーブルがすでに存在する場合、例外がスローされます。ユーザーは IF NOT EXISTS オプションを使用してこの例外を無視できます。
-
EXTERNAL キーワードを使用すると、ユーザーは外部テーブルを作成できます。テーブルを作成するとき、実際のデータを指すパス (LOCATION) を指定できます。テーブルを削除すると、メタデータと内部テーブルのデータが一緒に削除されます。外部テーブル データではなくメタデータのみを削除します。
-
COMMENT: テーブルと列にコメントを追加します。
-
PARTITIONED BY パーティションテーブルの作成
-
CLUSTERED BY はバケットテーブルを作成します
-
SORTED BY は一般的には使用されず、バケット内の 1 つ以上の列が追加で並べ替えられます。
-
行形式区切り [フィールドは文字で終了] [コレクション項目は文字で終了] [マップキーは文字で終了] [行は文字で終了]
| SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, …)]
ユーザーはテーブルの作成時に SerDe をカスタマイズしたり、組み込みの SerDe を使用したりできます。ROW
FORMAT または ROW FORMAT DELIMITED が指定されていない場合は、組み込みの SerDe が使用されます。テーブルを作成するとき、ユーザーはテーブルの列を指定する必要もあります。テーブルの列を指定するとき、ユーザーはカスタム SerDe も指定します。Hive は SerDe を通じてテーブルの特定の列データを決定します。
SerDe は Serialize/Deserilize の略称で、Hive は行オブジェクトのシリアル化と逆シリアル化に Serde を使用します。
- STORED AS ストレージ ファイル タイプを指定します。 一般的に使用されるストレージ ファイル タイプ: SEQUENCEFILE (バイナリ シーケンス ファイル)、TEXTFILE (テキスト)、RCFILE (カラム
ストレージ フォーマット ファイル)
ファイルデータがプレーンテキストの場合は、STORED AS TEXTFILE を使用できます。データを圧縮する必要がある場合は、STORED AS SEQUENCEFILE を使用します。
-
LOCATION : HDFS 上のテーブルの保存場所を指定します。
-
AS: クエリ結果に基づいてテーブルを作成するクエリ ステートメントが続きます。
-
LIKE を使用すると、ユーザーは既存のテーブル構造をコピーできますが、データはコピーできません。
テーブルタイプ
Hive によって管理されるテーブルは、内部テーブルと外部テーブルに分かれています。
デフォルトで作成されるテーブルはいわゆる管理テーブルであり、内部テーブルと呼ばれることもあります。この種のテーブルにより、Hive は (多かれ少なかれ) データのライフ サイクルを制御します。デフォルトでは、Hive はこれらのテーブルのデータを、構成項目 hive.metastore.warehouse.dir で定義されたディレクトリのサブディレクトリ (/hive/warehouse など) に保存します。管理テーブルを削除すると、Hive はこのテーブル内のデータも削除します。管理テーブルは他のツールとのデータ共有には適していません。
外部テーブルの場合、Hive はそれ自体がデータによって完全に所有されているとはみなしません。テーブルを削除しても、実際に保存されているデータは削除されませんが、テーブルを説明するメタデータ情報は削除されます。
外部テーブルを作成するときは、以下を追加する必要がありますexternal
create external table if not exists computer( no int,
name string, price double
)
row format delimited fields terminated by '\t';
管理テーブルと外部テーブル間の変換
ルックアップテーブルの種類
desc formatted phone;
内部テーブル電話を外部テーブルに変更する
alter table phone set tblproperties('EXTERNAL'='TRUE');
外部テーブル コンピュータを内部テーブルに変更する
alter table computer set tblproperties('EXTERNAL'='FALSE');
テーブルを変更する
テーブルの名前を変更する
文法
ALTER TABLE table_name RENAME TO new_table_name
ケース
alter table car rename to big_car;
列情報の追加/変更/置換
文法
コラムを更新
ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_name column_type [COMMENT col_comment] [FIRST|AFTER column_name]
列の追加と置換
ALTER TABLE table_name ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...)
注: ADD は新しいフィールドを追加することを意味し、フィールドの位置はすべての列の後ろ (パーティション列の前) にあり、
REPLACE はテーブル内のすべてのフィールドを置き換えることを意味します。
ケース
クエリテーブルの構造
desc car;
列を追加
alter table car add columns(desc string);
コラムを更新
alter table car change column desc desc_detail string;
列を置き換える
alter table car replace columns(no string, name string, price string);
テーブルの削除
drop table car;
記事をご覧になっている方のお役に立てれば幸いです、注目、コメント、お気に入りを忘れずによろしくお願いします