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

Prev Next

最新のコンテンツが反映されていません。早急にアップデート内容をご提供できるよう努めております。最新のコンテンツ内容は韓国語ページをご参照ください。

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のテストを行うために、サンプルデータとして気象庁気象データ公開ポータルから提供する気温データを使用します。

サンプルデータを準備する方法は、次の通りです。

  1. ソウルのデータ釜山のデータをダウンロードします。
  • サンプルデータの検索条件の情報は、次の通りです。
    • 分類: 地上
    • 地域/支店: ソウルまたは釜山
    • 要素: 気温
    • 期間: を選択し、2011년 ~ 2021년に設定
    • 条件: のチェックボックスにチェック
  1. ダウンロードした csvファイルの内容を確認します。一番上からヘッダの内容が12行あり、気温データは13行目から始まることがわかります。
    hadoop-chadoop-use-ex10_2-3_ko
参考

ハングルの文字化け現象は、エンコードを変更すると解決できます。詳細は、Hive External Table作成ハングルの文字化け現象に関する参考事項を確認してください。

  1. 以下のコマンドを使用し、ダウンロードした csvファイルで不要なヘッダ部分を削除してファイル名を変更します。
    $ sed 1,12d extremum_20230620155750.csv > data1.csv
    $ sed 1,12d extremum_20230620155821.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 External Table作成

Hive External Tableを作成する方法は、次の通りです。

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

  2. 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を削除する方法は、次の通りです。

  1. 作成された Hive External Tableの次のコマンドを用いて削除します。
    • 以下は、先ほど作成した Hive External Table(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 External Tableが削除された場合でも、Object Storageの csvファイルは削除されず、安全に保存されます。