CUBE SUGAR CONTAINER

技術系のこと書きます。

Apache Hive

Apache Hive で SELECT した結果から ARRAY を作る

Apahe Hive を使っていて、テーブルから SELECT してきた結果から ARRAY 型のカラムを作る方法が分からなくて調べた。 結論から先に述べると COLLECT_LIST() を使えば良い。 使った環境は次の通り。 $ cat /etc/redhat-release CentOS Linux release 7.5.180…

Apache Hive 1.x の INSERT 文の仕様でハマった話

今回は、タイトルの通り Apache Hive の 1.x を使っていたとき INSERT 文の仕様でハマった話。 先に概要を説明しておくと Apache Hive の 1.x と 2.x ではサポートする構文が変わっている。 具体的には 1.x では INSERT INTO ... SELECT 文で後続に FROM ...…

Apache Hive の Vectorization 機能を試す

今回は Apache Hive の Vectorization 機能を使ってパフォーマンスが向上するか試してみる。 Apache Hive では、通常 HDFS に保存されたデータを一行ずつ処理する。 それに対し Vectorization 機能を使うと、状況は限られるものの複数行をまとめて処理できる…

Apache Hive で圧縮形式のデータを扱う

Apache Hive のテーブルを構成するデータは、デフォルトでは無圧縮になっている。 しかし、設定を変更することで圧縮形式のデータも扱うことができる。 そこで、今回は Apache Hive で圧縮形式のデータを扱ってみることにする。 データを圧縮することには、…

Apache Hive を HiveServer2 経由で操作する

Apache Hive を操作する方法としては、以前から hive というコマンドラインツールが提供されている。 ただ、この方法だと hive コマンドがインストールされたホストでしか Apache Hive を操作できない。 また、Hadoop エコシステムを形成する別のソフトウェ…

Apache Hive のメタストアに MariaDB を使う

Apache Hive はテーブルのスキーマ定義などメタデータを RDBMS に保存する。 デフォルトでは Java で書かれた組み込み RDBMS の Apache Derby が使われる。 今回は、その Apache Derby の代わりに MariaDB (MySQL) を使う方法について。 使った環境は次の通…

Apache Hive を使ったテーブルのサンプリング

Apache Hive では、大規模なデータセットに対してクエリを実行すると完了までに長い時間がかかる。 そこで、全体から一部を抽出した標本に対してクエリを実行する場合がある。 今回は、その標本を抽出する方法 (サンプリング) について扱う。 使った環境は次…

Apache Hive の MAP 型を試す

前回に引き続き Apache Hive の複合型の一つ MAP 型を試してみる。 blog.amedama.jp MAP 型は一般的なプログラミング言語でいうマップや辞書といったデータ構造に相当する。 これを使うとテーブルのカラムに任意のキーで値を格納できる。 環境は次の通り。 $…

Apache Hive の STRUCT 型を試す

Apache Hive には基本となる文字列や数値以外にも複合型 (Complex Type) というデータタイプがある。 以前、その中の一つとして ARRAY 型をこのブログでも扱った。 blog.amedama.jp 今回は、それに続いて複合型の中で STRUCT 型というデータタイプを試してみ…

Apache Hive の Partition 機能を使ってみる

今回は Apache Hive の Partition 機能を使ってみる。 Partition 機能を用いない場合、クエリを発行するとテーブルを構成するファイル群にフルスキャンがかかる。 それに対し、Partition 機能を用いるとクエリによってはスキャンするファイルの範囲を制限で…

Apache Hive の ARRAY 型を試す

Apache Hive には ARRAY 型というデータタイプがある。 これは一般的なプログラミング言語でいえば配列に相当するもの。 ようするに、文字列や数値といったデータを一つのレコードに複数格納できる。 リレーショナルデータベースのアンチパターンであるジェ…

SQL: NULLIF() 関数を使ってゼロ除算を防ぐ

RDBMS によってはゼロ除算をするとエラーになってしまうものがある。 例えば PostgreSQL とかがそう。 $ psql --version psql (PostgreSQL) 9.6.3 次のようにゼロ除算をするとエラーになって結果が得られない。 これは SQL を使って演算するときに問題となる…

Apache Hive を JDBC 経由で操作する

以前、Apache Hive の環境構築についてこのブログで書いた。 blog.amedama.jp 上記では Hive を操作するのに、同梱されたシェルを使っていた。 今回は JDBC (Java Database Connectivity) を使って操作する例を示す。 環境については先ほど紹介したエントリ…

CentOS7 で Apache Hive を使ってみる

今回は Apache Hadoop 上で動作する MapReduce アプリケーションの一つ Apache Hive を使ってみる。 Apache Hive を使うと Hadoop/HDFS の上で HiveQL という SQL のサブセットが使えるようになる。 実行したクエリは MapReduce のジョブに変換されて Hadoop…