S-JIS[2011-08-10/2012-02-02] 変更履歴

HiveQL SELECT

HiveQLHiveのSQLっぽい独自言語)のSELECT文に関するメモ。


「SELECT *」と「SELECT 項目」の違い

Hiveでは「SELECT *」と「SELECT 項目指定」では挙動が異なる。

create文でテーブルを作った段階では、データ(ファイル)が存在していても、その中の整合性は問われない。
「select * from テーブル」では、Hive自身がファイルの中身を項目定義に合わせて解釈し、その値を表示する。[/2011-08-11]
一方、「select 項目 from テーブル」では、MapReduce(Map処理)を実行して解釈を行い、結果を表示する。

INSERT〜SELECTでは「SELECT *」でもMapReduceが実行される。[2011-08-11]


FROMの位置

Hiveでは、FROM句を先頭に持ってくることが出来る。

select 〜 from テーブル where 条件;
↓↑等価
from テーブル select 〜 where 条件;

LIMIT

HiveではLIMITで取得件数を絞ることが出来る。

select 〜 from テーブル limit 件数;

UNION

HiveではUNION ALLが使える。[2011-08-11]
ただし副問合せにする必要がある。(また、副問合せに必ず名前を付ける必要がある)

select * from (
  select 〜 from テーブル union all
  select 〜 from テーブル union all
  select 〜 from テーブル
) 副問合せ名;

参考: Hive wikiのLanguageManual Union


CROSS JOIN

HiveではCROSS JOIN(2テーブルの全レコードの組み合わせの取得)の構文は用意されていないようだ。[2012-02-02]
(SQLなら、FROM句にテーブルをカンマ区切りで並べるとCROSS JOINになる)

単なるJOINを利用して、ONに無条件で結合するような式を入れればCROSS JOINの代わりになる。(→参考

select * from テーブルA join テーブルB on (1 = 1);

HiveQLへ戻る / Hive目次へ戻る / 技術メモへ戻る
メールの送信先:ひしだま