- 印刷する
- PDF
Hive の外部テーブルにCSVファイルを連携
- 印刷する
- PDF
Classic環境で利用できます。
Hiveの外部テーブルは、Hiveでテーブルの作成時に外部キーワードで作成するテーブルです。 Hiveの外部テーブルは、hive.metastore.warehouse.dir
属性が指し示すディレクトリにデータを保存せず、テーブルの作成時に設定したパスにデータを保存します。
既にHadoopにあるデータに基づいてテーブルを作成するため、スキーマを設定するだけで作成できます。
Hiveを使用するガイドでもHiveの外部テーブル関連の例を確認できます。
このガイドでは、Object Storageに保管したCSVデータをCloud Hadoopで提供するHiveの外部テーブルと連携して使用する方法を説明します。
サンプルデータの準備
Hiveの外部テーブルのテストを行うために、サンプルデータとして気象庁気象データ公開ポータルから提供する気温データをダウンロードします。
サンプルデータを準備する方法は以下のとおりです。
気象庁気象データ公開ポータルにアクセスし、メインページで気候統計分析 > 統計分析 > 条件別統計を順にクリックします。
以下のように検索の条件を設定し、 [検索] ボタンをクリックします。
- 分類:地上
- 地域/支店:ソウルまたは釜山
- 要素:気温
- 期間:日を選択し、
2011年~2021年
に設定 - 条件:月と日のチェックボックスにチェック
結果グラフ右下の [CSV] ボタンをクリックし、CSVファイルをダウンロードします。
上記の2~3を繰り返し、
ソウル
と釜山
地域の気温データをそれぞれダウンロードします。ダウンロードしたCSVファイルの内容を確認します。 一番上からヘッダの内容が12行あり、気温データは13行目から始まることがわかります。
ハングルの文字化け現象は、エンコードを変更すると解決できます。 詳細内容は、Hiveの外部テーブルの作成のハングルの文字化け現象に関する参考事項を確認します。
- 以下のコマンドを使用し、ダウンロードしたCSVファイルで不要なヘッダ部分を削除してファイル名を変更します。
$ sed 1,12d extremum_20211021101126.csv > data1.csv $ sed 1,12d extremum_20211020212220.csv > data2.csv
Object Storageにデータアップロード
Object Storageにデータをアップロードする方法は以下のとおりです。
- Object Storageに
live-test-bucket
バケットを作成します。 - 作成したバケットに
hivedata
ディレクトリを作成し、そこにサンプルデータ(CSV)ファイルをアップロードします。
バケットの作成に関する詳細は、Object Storageご利用ガイドをご参照ください。
Hiveの外部テーブルの作成
Hiveの外部テーブルを作成する方法は以下のとおりです。
Cloud HadoopクラスタのエッジノードにSSHでアクセスします。
- クラスタノードにSSHでアクセスする方法に関する詳しい内容は、SSHでクラスタノードにアクセスガイドをご参照ください。
Hiveクライアントコマンドを利用して外部テーブルを作成します。
weather
テーブルが作成されると、SELECT
クエリを実行してデータを確認できます。
CREATE EXTERNAL TABLE weather ( no STRING, area STRING, day STRING, avg FLOAT, max FLOAT, maxTime STRING, min FLOAT, minTime STRING, diff FLOAT ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE LOCATION 's3a://live-test-bucket/hivedata'; SELECT count(*) FROM weather; +-------+ | _c0 | +-------+ | 7913 | +-------+ SELECT * FROM weather WHERE day = '2011-01-01'; +-------------+---------------+--------------+--------------+--------------+------------------+--------------+------------------+---------------+ | weather.no | weather.area | weather.day | weather.avg | weather.max | weather.maxtime | weather.min | weather.mintime | weather.diff | +-------------+---------------+--------------+--------------+--------------+------------------+--------------+------------------+---------------+ | 159 | 釜山 | 2011-01-01 | -1.1 | 4.1 | 14:55 | -5.8 | 06:40 | 9.9 | | 108 | ソウル | 2011-01-01 | -6.8 | -2.9 | 14:57 | -10.4 | 01:54 | 7.5 | +-------------+---------------+--------------+--------------+--------------+------------------+--------------+------------------+---------------+
ハングルの文字化け現象
ハングルの文字化け現象は、気象庁から提供するデータがutf-8
ではなくeuc-kr
で提供されたために発生した現象です。 以下のようにHiveの外部テーブルのエンコードをeuc-kr
に変更すると、文字化けすることなく正しく表示されます。
ALTER TABLE weather SET TBLPROPERTIES('serialization.encoding'='euc-kr');
SELECT * FROM weather WHERE day = '2011-01-01';
+-------------+---------------+--------------+--------------+--------------+------------------+--------------+------------------+---------------+
| weather.no | weather.area | weather.day | weather.avg | weather.max | weather.maxtime | weather.min | weather.mintime | weather.diff |
+-------------+---------------+--------------+--------------+--------------+------------------+--------------+------------------+---------------+
| 159 | 釜山 | 2011-01-01 | -1.1 | 4.1 | 14:55 | -5.8 | 06:40 | 9.9 |
| 108 | ソウル | 2011-01-01 | -6.8 | -2.9 | 14:57 | -10.4 | 01:54 | 7.5 |
+-------------+---------------+--------------+--------------+--------------+------------------+--------------+------------------+---------------+
Hiveの外部テーブルの削除
Hiveの外部テーブルを削除する方法は以下のとおりです。
- 作成されたHiveの外部テーブルを、以下のコマンドを用いて削除します。
- 以下は、先ほど作成したHiveの外部テーブル(
weather
)を削除する例です。
- 以下は、先ほど作成したHiveの外部テーブル(
DROP TABLE weather;
- 削除されたテーブルに対してSELECTクエリを実行します。 エラーは発生しますが、正常にテーブルが削除されたことが確認できます。
SELECT * FROM weahter;
Error: Error while compiling statement: FAILED: SemanticException [Error 10001]: Line 1:14 Table not found 'weahter' (state=42S02,code=10001)
Hiveの外部テーブルが削除された場合でも、Object StorageのCSVファイルは削除されず、安全に保管されます。