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

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

    • PDF

    Article Summary

    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ファイルは削除されず、安全に保存されます。


    この記事は役に立ちましたか?

    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.