最近はBigQueryでばかりクエリを書いていたので、HiveQLで書く必要性に駆られたときに、その方言の違いにだいぶ苦戦した。

なので苦労したことの備忘録。

テキストはシングルクォーテーションで囲む

BigQueryでは特に気にしたことはなかった。

他人のクエリをコピーした場合など、"あいうえお" と 'かきくけこ' の両方が混在することなどザラ。

(それもどうかと思うけど)

select
  id
, case
    when id = 1 then "株式会社A" -- ダブルクォーテーションでもOK
    when id = 2 then '株式会社B'
  end as company_name

これがHiveだと、シングルクォーテーションで囲む必要があるっぽい。

select
  id
, case
    when id = 1 then '株式会社A' -- シングルクォーテーションで囲む
    when id = 2 then '株式会社B' -- シングルクォーテーションで囲む
  end as company_name

サブクエリには命名が必要

よく集計で行うサブクエリを使った処理を書くと、こんな感じのエラーが返される。

cannot recognize input near '' '' '' in subquery source hive

調べてみると、サブクエリには命名が必須っぽい。

どういうことかというと、BigQueryの場合は以下の書き方でも一応実行できる。

SELECT
  hogehoge
, sum_hugehuge

FROM
  (
	SELECT
    hogehoge
	, sum(hugehuge) as sum_hugehuge
  )

これがHiveだと、以下のように参照するエイリアスが1つであっても命名が必須っぽい。

これを怠ると、上記のエラーが出て怒られる。

SELECT
  hogehoge
, sum_hugehuge

FROM
  (
	SELECT
    hogehoge
	, sum(hugehuge) as sum_hugehuge
  ) AS sub -- サブクエリに名前をつける
Powered by Fruition