HiveQLはSQL-92準拠のクエリ言語を提供し、Hadoop上でデータ分析を行うための主要ツールとして利用されます。以下にテーブル操作の具体的な実装例を示します。
テーブル定義の実装
USE development;
DROP TABLE IF EXISTS user_profile;
CREATE TABLE user_profile(
user_id INT,
full_name STRING,
birth_year INT,
skills ARRAY<STRING>,
metrics MAP<STRING,FLOAT>,
location STRUCT<road:STRING,block:INT>
)
PARTITIONED BY (prefecture STRING, district STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY ':'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
このDDL定義では、基本データ型に加えてARRAY(スキルリスト)、MAP(メトリクス値)、STRUCT(住所情報)の複合型を使用しています。パーティションキーとして都道府県と市区町村を指定し、テキストファイル形式で保存します。
Linux端末で以下のコマンドを実行:
hive -f schema_definition.hql
Hiveコンソールから構造確認を行うには:
DESCRIBE user_profile;
ファイルからのデータ投入 /home/data/user_dataに以下のデータを準備:
1001 Yamada Taro 1995 Java,Python,C++ Height:172.5,Weight:68.3 Main St,5 Tokyo Chiyoda
1002 Sato Hanako 1998 Scala,Spark SQL Width:160.2,Weight:55.8 Sub Ave,12 Tokyo Chiyoda
データ投入コマンド:
LOAD DATA LOCAL INPATH '/home/data/user_data' INTO TABLE user_profile PARTITION(prefecture='Tokyo', district='Chiyoda');
LOCAL指定によりローカルファイルシステムから読み込み、パーティション指定に応じて都道府県・市区町村情報が自動付与されます。
クエリによるデータ移行 同様の構造のuser_backupテーブルを作成後:
INSERT OVERWRITE TABLE user_backup PARTITION(prefecture='Tokyo', district='Chiyoda')
SELECT user_id, full_name, birth_year, skills, metrics, location
FROM user_profile WHERE birth_year > 1990;
パーティション列を除く全列を明示的に指定する必要があります。
データのエクスポート ローカルディレクトリへの出力例:
INSERT OVERWRITE LOCAL DIRECTORY '/home/export/user_2023'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
SELECT * FROM user_profile;
出力先ディレクトリにCSV形式でデータをエクスポートします。各レコードは改行区切りで保存されます。