次にSELECT文の書式と使い方を見てみましょう。
[insert_clause] SELECT [ALL|DISTINCT] select_list FROM [table_source|join_source] [WHERE where_condition] [GROUP BY col_list] [ORDER BY col_list] [CLUSTER BY col_list] select_list: expression, expression, ... table_source : table_name [table_sample] [alias] | ( select_statement ) alias
まずは、最も簡単なテーブルprefを検索してみましょう。カラムの指定には、必ずエイリアスを指定するようにしてください。ワイルドカード「*」も同様です。
hive> SELECT p.* FROM pref p; OK 1 北海道 2 青森県 3 岩手県 …略… 44 大分県 45 宮崎県 46 鹿児島県 47 沖縄県 Time taken: 0.106 seconds
では、パーティションを設定したテーブルzipの検索はどのように行うのでしょうか。
テーブルに設定したパーティションは、SELECT文ではあたかも1つのカラムのように扱います。つまりWHERE句で対象としたいパーティションを設定すればいいのです。
例えば、2008年12月26日版のテーブルzipを検索したい場合は、次のようにします。
hive> SELECT z.zip, z.pref, z.city, z.town FROM zip z WHERE z.ver = '2008-12-26'; Total MapReduce jobs = 1 … 略… 4200051 22 静岡市葵区 南田町 4200905 22 静岡市葵区 南沼上 4200868 22 静岡市葵区 宮ケ崎町 4200822 22 静岡市葵区 宮前町 4200857 22 静岡市葵区 御幸町 4200053 22 静岡市葵区 弥勒 4212217 22 静岡市葵区 森腰 4211402 22 静岡市葵区 諸子沢 4200028 22 静岡市葵区 屋形町 4211409 22 静岡市葵区 八草 4200906 22 静岡市葵区 薬師 4200013 22 静岡市葵区 八千代町 Time taken: 21.275 seconds
ここからがHiveの本領発揮です。日本中の町名から「銀座」だけ検索してみます。
hive> SELECT z.zip, z.pref, z.city, z.town FROM zip z > WHERE z.ver = '2008-12-26' AND z.town LIKE '銀座'; Total MapReduce jobs = 1 …略… OK 4240817 22 静岡市清水区 銀座 4480845 23 刈谷市 銀座 7450032 35 周南市 銀座 7700916 36 徳島市 銀座 8040076 40 北九州市戸畑区 銀座 0691331 1 夕張郡長沼町 銀座 3220052 9 鹿沼市 銀座 3600032 11 熊谷市 銀座 3670052 11 本庄市 銀座 1040061 13 中央区 銀座 3940022 20 岡谷市 銀座 3950031 20 飯田市 銀座 Time taken: 20.79 seconds
HiveではLIKE式のほかにもREGEXP式もサポートしています。もちろんLIKE式ではワイルドカード「%」も使えますし、REGEXP式でも各種正規表現が使えます。
Hiveはテーブルの結合もサポートしています。以下に構文を示します。テーブルは2つだけでなく3つでも4つでも結合することが可能です。
join_source: table_source join_clause table_source join_clause table_source ... join_clause: [LEFT OUTER|RIGHT OUTER|FULL OUTER] JOIN ON (equality_expression, equality_expression, ...) equality_expression: expression = expression
具体例でHiveによるテーブルの結合を見てみましょう。
先ほど実行した「銀座」を抽出するSELECT文は、都道府県が数値なので分かりにくいものです。そこで都道府県データテーブルprefを結合して、より読みやすくしてみましょう。
hive> SELECT z.zip, p.pref, z.city, z.town FROM zip z > LEFT OUTER JOIN pref p ON (p.id = z.pref) > WHERE z.ver = '2008-12-26' AND z.town REGEXP '銀座'; Total MapReduce jobs = 1 …略… Ended Job = job_200901011221_0005 OK 0691331 北海道 夕張郡長沼町 銀座 3670052 埼玉県 本庄市 銀座 3600032 埼玉県 熊谷市 銀座 1040061 東京都 中央区 銀座 3950031 長野県 飯田市 銀座 3940022 長野県 岡谷市 銀座 4240817 静岡県 静岡市清水区 銀座 4480845 愛知県 刈谷市 銀座 7450032 山口県 周南市 銀座 7700916 徳島県 徳島市 銀座 8040076 福岡県 北九州市戸畑区 銀座 3220052 栃木県 鹿沼市 銀座 Time taken: 69.588 seconds
Copyright © ITmedia, Inc. All Rights Reserved.