Hive External Tableに jsonファイルを連携

Prev Next

Classic環境で利用できます。

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

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

参考

Hive を使用するガイドでも Hive External Table関連のユースケースを確認できます。

このガイドでは、jsonデータを Cloud Hadoopで提供する Hiveの External Tableと連携して使用する方法について説明します。

サンプルデータの準備

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

  1. hiveユーザーに切り替えます。
$ sudo su - hive
  1. 当該データをダウンロードします。
参考

当該データは、ndjson(Newline Delimited JSON)データ形式です。

HDFSに jsonファイルをアップロード

HDFSに jsonファイルをアップロードする方法は、次の通りです。

  1. HDFSにディレクトリを作成します。
$ hdfs dfs -mkdir /user/hive/bookstat
  1. HDFSに jsonファイルをアップロードします。
$ hdfs dfs -put bookstat.json /user/hive/bookstat
  1. HDFSファイルリストを確認します。
$ hdfs dfs -ls -R /user/hive/bookstat
-rw-r--r--   2 hive hdfs        193 2023-06-28 14:41 /user/hive/bookstat/bookstat.json

json形式を使う Hive External Tableの作成

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

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

  2. Hiveクライアントコマンドを利用して External Tableを作成します。

    • データベース作成
    hive> create database book;
    
    • 作成したデータベースを使用
    hive> use book;
    
    • テーブル作成
    hive> CREATE EXTERNAL TABLE IF NOT EXISTS bookstat_serde1
    (
        statTime STRING,
        bizCode STRING,
        saleInfo STRUCT <
            bookName:STRING,
            saleCount:INT
        >
    )
    ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
    STORED AS TEXTFILE
    LOCATION '/user/hive/bookstat' ;
    

json形式を使う Hive External Tableの照会

  • テーブルが作成されると、SELECTクエリを実行してデータを確認できます。
  • テーブル照会
hive> select * from bookstat_serde1;
OK
20130710180059  BOOK    {"bookname":"book61","salecount":749}
20230628140059  BOOK    {"bookname":"book800","salecount":899}

Hive External Table削除

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

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

Error: Error while compiling statement: FAILED: SemanticException [Error 10001]: Line 1:14 Table not found 'bookstat_serde1' (state=42S02,code=10001)
  • SHOW TABLESでテーブルリストを確認
SHOW TABLES;