HiveQL(HiveのSQLっぽい独自言語)のSELECT文に関するメモ。
|
|
Hiveでは「SELECT *」と「SELECT 項目指定」では挙動が異なる。
create文でテーブルを作った段階では、データ(ファイル)が存在していても、その中の整合性は問われない。
「select * from テーブル」では、Hive自身がファイルの中身を項目定義に合わせて解釈し、その値を表示する。[/2011-08-11]
一方、「select 項目 from テーブル」では、MapReduce(Map処理)を実行して解釈を行い、結果を表示する。
(INSERT〜SELECTでは「SELECT *」でもMapReduceが実行される。[2011-08-11])
Hiveでは、FROM句を先頭に持ってくることが出来る。
select 〜 from テーブル where 条件; ↓↑等価 from テーブル select 〜 where 条件;
HiveではLIMITで取得件数を絞ることが出来る。
select 〜 from テーブル limit 件数;
HiveではUNION ALLが使える。[2011-08-11]
ただし副問合せにする必要がある。(また、副問合せに必ず名前を付ける必要がある)
select * from ( select 〜 from テーブル union all select 〜 from テーブル union all select 〜 from テーブル ) 副問合せ名;
参考: Hive wikiのLanguageManual Union
HiveではCROSS JOIN(2テーブルの全レコードの組み合わせの取得)の構文は用意されていないようだ。[2012-02-02]
(SQLなら、FROM句にテーブルをカンマ区切りで並べるとCROSS JOINになる)
単なるJOINを利用して、ONに無条件で結合するような式を入れればCROSS JOINの代わりになる。(→参考)
select * from テーブルA join テーブルB on (1 = 1);