Hiveテーブルの作成とデータのインポート・エクスポート方法

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形式でデータをエクスポートします。各レコードは改行区切りで保存されます。

タグ: Hive Hadoop hql data-import data-export

6月6日 19:52 投稿