1
hivecontext(1.6.0)を使用してハイブクエリを実行しようとしていますが、 'AnalysisException'が発生しています。次のようにクエリは次のとおりです。グループによるハイブクエリBy:構文解析に失敗しました
select coalesce(an, dan), case when coalesce(ts, dts) is null then null else (add_seconds(to_timestamp(concat(to_char(sub_seconds( coalesce(ts, dts),81368), 'yyyyMMdd'), '000000'), 'yyyyMMddHHmmss'), 81368)) end, sum(case when (mmm in ( 1) and mgk is null) then 1 else 0 end), sum(case when (mmm in ( 2) and mgk is null) then 1 else 0 end), sum(case when (mmm = 3 and dco_ids is not null) then 1 else 0 end), sum(case when (mmm = 3 and dco_ids is null and mgk is null) then 1 else 0 end), sum(case when (mgk is not null) then 1 else 0 end) from mrdm group by coalesce(an, dan), case when coalesce(ts, dts) is null then null else (add_seconds(to_timestamp(concat(to_char(sub_seconds( coalesce(ts, dts),81368), 'yyyyMMdd'), '000000'), 'yyyyMMddHHmmss'), 81368)) end
ハイブからの問合せに対して誤差がある:あなたがあなたのcase
文を再定義する必要はありませんので
Caused by: org.apache.spark.sql.AnalysisException: expression 'ts' is neither present in the group by, nor is it an aggregate function. Add to group by or wrap in first() (or first_value) if you don't care which value you get.;
at org.apache.spark.sql.catalyst.analysis.CheckAnalysis$class.failAnalysis(CheckAnalysis.scala:38)
at org.apache.spark.sql.catalyst.analysis.Analyzer.failAnalysis(Analyzer.scala:44)
これはHiveコード(add_seconds、sub_seconds、to_char、to_timestamp)のようではありません。このコードはどこから取得しましたか? –
@DuduMarkovitz私はどこからでもこのコードを "取得"していません。このクエリは(私たちの)コードが生成され、add_seconds、sub_seconds、to_charおよびto_timestampはカスタムUDFです。 –
パーサーがあなたのUDFが**確定的**であることを100%確信していない場合は、GROUP BY句でそれらを使用することを拒否するのがよい理由があります。サブクエリですべてのUDFと 'colaesce'をラップして、結果にGROUP BYをつけてみませんか? –