Hive の外部テーブルにCSVファイルを連携

Prev Next

Classic環境で利用できます。

Hiveの外部テーブルは、Hiveでテーブルの作成時に外部キーワードで作成するテーブルです。 Hiveの外部テーブルは、hive.metastore.warehouse.dir属性が指し示すディレクトリにデータを保存せず、テーブルの作成時に設定したパスにデータを保存します。

既にHadoopにあるデータに基づいてテーブルを作成するため、スキーマを設定するだけで作成できます。

参考

Hiveを使用するガイドでもHiveの外部テーブル関連の例を確認できます。

このガイドでは、Object Storageに保管したCSVデータをCloud Hadoopで提供するHiveの外部テーブルと連携して使用する方法を説明します。

サンプルデータの準備

Hiveの外部テーブルのテストを行うために、サンプルデータとして気象庁気象データ公開ポータルから提供する気温データをダウンロードします。

サンプルデータを準備する方法は以下のとおりです。

  1. 気象庁気象データ公開ポータルにアクセスし、メインページで気候統計分析 > 統計分析 > 条件別統計を順にクリックします。

  2. 以下のように検索の条件を設定し、 [検索] ボタンをクリックします。

    • 分類:地上
    • 地域/支店:ソウルまたは釜山
    • 要素:気温
    • 期間:を選択し、2011年~2021年に設定
    • 条件:のチェックボックスにチェック
      hadoop-chadoop-use-ex10_1-1_ko
  3. 結果グラフ右下の [CSV] ボタンをクリックし、CSVファイルをダウンロードします。
    hadoop-chadoop-use-ex10_1-2_ko

  4. 上記の2~3を繰り返し、ソウル釜山地域の気温データをそれぞれダウンロードします。

  5. ダウンロードしたCSVファイルの内容を確認します。 一番上からヘッダの内容が12行あり、気温データは13行目から始まることがわかります。
    hadoop-chadoop-use-ex10_2-3_ko

参考

ハングルの文字化け現象は、エンコードを変更すると解決できます。 詳細内容は、Hiveの外部テーブルの作成ハングルの文字化け現象に関する参考事項を確認します。

  1. 以下のコマンドを使用し、ダウンロードしたCSVファイルで不要なヘッダ部分を削除してファイル名を変更します。
    $ sed 1,12d extremum_20211021101126.csv > data1.csv
    $ sed 1,12d extremum_20211020212220.csv > data2.csv
    

Object Storageにデータアップロード

Object Storageにデータをアップロードする方法は以下のとおりです。

  1. Object Storageにlive-test-bucketバケットを作成します。
  2. 作成したバケットにhivedataディレクトリを作成し、そこにサンプルデータ(CSV)ファイルをアップロードします。
    hadoop-chadoop-use-ex10_2-4_ko
参考

バケットの作成に関する詳細は、Object Storageご利用ガイドをご参照ください。

Hiveの外部テーブルの作成

Hiveの外部テーブルを作成する方法は以下のとおりです。

  1. Cloud HadoopクラスタのエッジノードにSSHでアクセスします。

  2. 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の外部テーブルを削除する方法は以下のとおりです。

  1. 作成されたHiveの外部テーブルを、以下のコマンドを用いて削除します。
    • 以下は、先ほど作成したHiveの外部テーブル(weather)を削除する例です。
DROP TABLE weather;
  1. 削除されたテーブルに対してSELECTクエリを実行します。 エラーは発生しますが、正常にテーブルが削除されたことが確認できます。
SELECT * FROM weahter;

Error: Error while compiling statement: FAILED: SemanticException [Error 10001]: Line 1:14 Table not found 'weahter' (state=42S02,code=10001)

cloudhadoop-objectstorage-filefolder_ko

参考

Hiveの外部テーブルが削除された場合でも、Object StorageのCSVファイルは削除されず、安全に保管されます。