【Hive】Hive / HiveQL ~ 基本編 ~

■ はじめに

https://dk521123.hatenablog.com/entry/2020/02/25/231235

の続き。

HiveQL を書く機会が得られて、
ちょこちょこSQLと違うので、基本文法を中心にメモる。

目次

【0】データベース関連
【1】テーブル作成
【2】テーブル削除
【3】テーブル変更
 1)テーブル名変更
【4】データ保存
 1)データ追記
 2)データ上書き
【5】テーブル情報の取得
 1)DESC [FORMATTED / DESC EXTENDED]

※ HiveQL は、部分更新(UPDATE/DELETE文はない)

【0】データベース関連

作成・削除は、SQL と変わらん。

サンプル

--  DBを作る
CREATE DATABASE hello_world;

-- データベース一覧表示
SHOW DATABASES;

-- 指定したデータベースを使う
USE hello_world;

-- なかったら作る
CREATE DATABASE IF NOT EXISTS hello_world2;

-- DBを削除する
DROP DATABASE hello_world2;

【1】テーブル作成

以下の関連記事を参照のこと。

Hive / HiveQL ~ テーブル作成 ~
https://dk521123.hatenablog.com/entry/2020/11/03/000000

【2】テーブル削除

SQL と変わらず。DROP TABLEで削除。

構文

-- テーブル削除
DROP TABLE <テーブル名>;

-- あったら削除
DROP TABLE IF EXISTS <テーブル名>;

【3】テーブル変更

1)テーブル名変更

* ALTER TABLE xxx RENAME TO yyyy で行う

サンプル

ALTER TABLE old_table_name RENAME TO new_table_name;

参考文献
https://www.ne.jp/asahi/hishidama/home/tech/apache/hive/table.html#RENAME

【4】データ保存

1)データ追記

* INSERT INTO で行う

構文

-- テーブルやパーティションに対して、追加をデータ挿入
INSERT INTO TABLE <保存先のテーブル名>
[PARTITION (項目名=値, …)]
SELECT文 FROM <テーブル名>

2)データ上書き

* INSERT OVERWRITE で行う

構文

-- テーブルやパーティションに対して、元データを消してからデータ挿入
INSERT OVERWRITE TABLE <保存先のテーブル名>
[PARTITION (項目名=値, …)]
SELECT * FROM <テーブル名>

サンプル

INSERT OVERWRITE TABLE normalized_user_feedback
SELECT id, name, lower(contents)
FROM user_feedback
WHERE created_time BETWEEN '2020-08-01' AND '2020-09-01'
AND contents REGEXP "^[A-Za-z+\'-]{5,}$";
 -- 正規表現で、5文字以上でアルファベット/アポストロフィ/ハイフン以外は除外

【5】テーブル情報の取得

1)DESC [FORMATTED / DESC EXTENDED]

* DESC (DESCRIBE=説明)
* テーブルのファイルフォーマットや構成を確認する場合に使用
* オプション[FORMATTED / DESC EXTENDED]を付けると、詳細表示。
 + 違いは、formattedが、見やすいよう整形して表示する

構文

DESCRIBE <テーブル名>;
DESC <テーブル名>;
DESC FORMATTED <テーブル名>;
DESC EXTENDED<テーブル名>;

サンプル

CREATE EXTERNAL TABLE book(
  id string,
  name string,
  year int,
  page int
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS SEQUENCEFILE
LOCATION 's3://your-s3-buket/demo2/';

-- 実行
DESCRIBE book;

-- 出力結果
id                    string
name                    string
year                    int
pages                   int

参考文献
http://kiyohime.hatenablog.com/entry/2013/12/10/185406

参考文献

https://yut.hatenablog.com/entry/20111219/1324251034
http://www.ne.jp/asahi/hishidama/home/tech/apache/hive/table.html
https://dev.classmethod.jp/articles/hadoop-advent-calendar-08-hive-functions/
https://www.atmarkit.co.jp/ait/articles/0902/27/news129_3.html
https://riptutorial.com/ja/hive/example/11427/%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AE%E4%BD%9C%E6%88%90
http://kiyohime.hatenablog.com/entry/2013/12/10/185406

関連記事

Hive / HiveQL ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2019/11/25/235219
Hive / HiveQL ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/02/25/231235
Hive / HiveQL ~ テーブル作成 ~
https://dk521123.hatenablog.com/entry/2020/11/03/000000
Hive / HiveQL ~ パーティション / 基本編 ~
https://dk521123.hatenablog.com/entry/2020/07/16/224332
Hive / HiveQL ~ パーティション / あれこれ編 ~
https://dk521123.hatenablog.com/entry/2020/09/18/113637
Hive / HiveQL ~ データ圧縮あれこれ ~
https://dk521123.hatenablog.com/entry/2021/08/06/172502
Hive / HiveQL ~ CASE文 ~
https://dk521123.hatenablog.com/entry/2021/06/19/073248
Hive / HiveQL ~ JOIN文 ~
https://dk521123.hatenablog.com/entry/2021/06/16/152019
Hive / HiveQL ~ コメント文 ~
https://dk521123.hatenablog.com/entry/2021/06/25/162430
Hive / HiveQL ~ HiveQL関数 / 文字列置換編 ~
https://dk521123.hatenablog.com/entry/2020/03/10/224640
Hive / HiveQL ~ HiveQL関数・regexp_replace編 ~
https://dk521123.hatenablog.com/entry/2021/06/18/184713
Hive / HiveQL ~ HiveQL関数・文字列関数編 ~
https://dk521123.hatenablog.com/entry/2021/06/21/231033
Hive / HiveQL ~ HiveQL関数 / NULL関連編 ~
https://dk521123.hatenablog.com/entry/2021/06/22/213241
Hive / HiveQL ~ HiveQL関数 / 日時・日付操作編 ~
https://dk521123.hatenablog.com/entry/2021/02/11/233633
Hive / HiveQL ~ 設定プロパティ ~
https://dk521123.hatenablog.com/entry/2020/09/19/152136
Hive / HiveQL ~ Hiveの変数 ~
https://dk521123.hatenablog.com/entry/2021/06/24/094254
Hive / HiveQL ~ あれこれ編 ~
https://dk521123.hatenablog.com/entry/2020/03/04/225943
Hive / HiveQL ~ データをクリーニングする ~
https://dk521123.hatenablog.com/entry/2020/07/06/232350
Hiveクエリで入力ファイル名を取得するには
https://dk521123.hatenablog.com/entry/2020/11/16/162114
Hive / HiveQL ~ デバッグ編 ~
https://dk521123.hatenablog.com/entry/2020/07/29/141607
Hiveで固定値を挿入するには
https://dk521123.hatenablog.com/entry/2020/09/22/000000
Hive に関するトラブルシューティング
https://dk521123.hatenablog.com/entry/2020/11/20/174039
Hive / Partition に関するトラブルシューティング
https://dk521123.hatenablog.com/entry/2020/05/28/175428
エラー「SemanticException Cartesian products are disabled for safety reasons」が発生する
https://dk521123.hatenablog.com/entry/2021/06/12/093046
Amazon EMR に関するトラブルシューティング
https://dk521123.hatenablog.com/entry/2020/08/05/144724
EMR / DBアクセス に関するトラブルシューティング
https://dk521123.hatenablog.com/entry/2021/06/17/114611
Apache Hadoop ~ 環境設定 / Linux編 ~
https://dk521123.hatenablog.com/entry/2020/01/01/000000
全く関係ないテーブルを結合することを考える
https://dk521123.hatenablog.com/entry/2021/09/16/185552