- 印刷する
- PDF
Hive の外部テーブルにCSVファイルを連携
- 印刷する
- PDF
VPC環境で利用できます。
Hive External Tableは、Hiveでテーブルの作成時に Externalキーワードで作成するテーブルです。Hive External Tableは、hive.metastore.warehouse.dir
プロパティが示すディレクトリにデータを保存せず、テーブルの作成時に設定したパスにデータを保存します。
既に Hadoopにあるデータに基づいてテーブルを作成するため、スキーマを設定するだけで作成できます。
Hive を使用するガイドでも Hive External Table関連のユースケースを確認できます。
このガイドでは、Object Storageに保存した csvデータを Cloud Hadoopで提供する Hiveの External Tableと連携して使用する方法を説明します。
サンプルデータの準備
Hive External Tableのテストを行うために、サンプルデータとして気象庁気象データ公開ポータルから提供する気温データを使用します。
サンプルデータを準備する方法は、次の通りです。
- サンプルデータの検索条件の情報は、次の通りです。
- 分類: 地上
- 地域/支店: ソウルまたは釜山
- 要素: 気温
- 期間: 日を選択し、
2011년 ~ 2021년
に設定 - 条件: 月と日のチェックボックスにチェック
- ダウンロードした csvファイルの内容を確認します。一番上からヘッダの内容が12行あり、気温データは13行目から始まることがわかります。
ハングルの文字化け現象は、エンコードを変更すると解決できます。詳細は、Hive External Table作成のハングルの文字化け現象に関する参考事項を確認してください。
- 以下のコマンドを使用し、ダウンロードした csvファイルで不要なヘッダ部分を削除してファイル名を変更します。
$ sed 1,12d extremum_20230620155750.csv > data1.csv $ sed 1,12d extremum_20230620155821.csv > data2.csv
Object Storageにデータアップロード
Object Storageにデータをアップロードする方法は、次の通りです。
- Object Storageに
live-test-bucket
バケットを作成します。 - 作成したバケットに
hivedata
ディレクトリを作成し、そこにサンプルデータ(csv)ファイルをアップロードします。
バケット作成に関する詳細は、Object Storageご利用ガイドをご参照ください。
Hive External Table作成
Hive External Tableを作成する方法は、次の通りです。
Cloud Hadoopクラスタエッジノードに SSHでアクセスします。
- クラスタノードに SSHでアクセスする方法に関する詳細は、SSHでクラスタノードにアクセスガイドをご参照ください。
Hiveクライアントコマンドを利用して External Tableを作成します。
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 External Tableのエンコードを 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 External Table削除
Hive External Tableを削除する方法は、次の通りです。
- 作成された Hive External Tableの次のコマンドを用いて削除します。
- 以下は、先ほど作成した Hive External Table(
weather
)を削除する例です。
- 以下は、先ほど作成した Hive External Table(
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 External Tableが削除された場合でも、Object Storageの csvファイルは削除されず、安全に保存されます。