Fehler in der Struktur : Zugrunde liegende Fehler: org.apache.hadoop.hive.ql.exec.UDFArgumentTypeException: Ein oder mehrere Argumente erwartet
Ich versuche zu übersetzen, einige PL/SQL-Skript im hive, und ich Stand vor einem Fehler eines HiveQL-Skript.
Der Fehler ist dieser :
FAILED: SemanticException Failed to breakup Windowing invocations into Groups. At least 1 group must only depend on input columns. Also check for circular dependencies.
Underlying error: org.apache.hadoop.hive.ql.exec.UDFArgumentTypeException: One or more arguments are expected.
Ich denke, dass der Fehler kommt aus diesem Teil von script :
SELECT
mag.co_magasin,
dem.id_produit as id_produit_orig,
pnvente.dt_debut_commercial as dt_debut_commercial,
COALESCE(pnvente.id_produit,dem.id_produit) as id_produit,
min(
CASE WHEN dem.co_validation IS NULL THEN 0 ELSE 1 END
) as flg_demarque_valide,
sum(CASE WHEN dem.co_validation IS NULL THEN 0 ELSE cast(dem.mt_revient_ope AS INT) END)
as me_dem_con_prx_cs,
0 as me_dem_inc_prx_cs,
0 as me_dem_prov_stk_cs,
sum(CASE WHEN dem.co_validation IS NULL THEN 0 ELSE cast(dem.qt_demarque AS INT) END)
as qt_dem_con,
0 as qt_dem_inc,
0 as qt_dem_prov_stk,
RANK() OVER (PARTITION BY mag.co_magasin, dem.id_produit ORDER BY pnvente.dt_debut_commercial DESC, COALESCE(pnvente.id_produit,dem.id_produit) DESC) as rang
from default.calendrier cal
INNER JOIN default.demarque_mag_jour dem
ON CASE WHEN dem.co_societe = 1 THEN 1 ELSE 2 END = '${hiveconf:in_co_societe}'
AND dem.dt_jour = cal.dt_jour
LEFT OUTER JOIN default.produit_norm pn
ON pn.co_societe = dem.co_societe
AND pn.id_produit = dem.id_produit
LEFT OUTER JOIN default.produit_norm pnvente
ON pnvente.co_societe = pn.co_societe
AND pnvente.co_produit_rfu = pn.co_produit_lip
AND pnvente.co_type_motif='05'
INNER JOIN default.kpi_magasin mag
ON mag.co_societe = '${hiveconf:in_co_societe}'
AND mag.id_magasin = dem.id_magasin
WHERE cal.dt_jour = '${hiveconf:in_dt_jour}'
AND NOT (dem.co_validation IS NULL AND cal.dt_jour > from_unixtime(unix_timestamp()-3*60*60*24, 'ddmmyyyy'))
-- JYP 4.4
AND dem.co_operation_magasin IN ('13','14','32')
GROUP BY
mag.co_magasin,
dem.id_produit,
pnvente.dt_debut_commercial,
COALESCE(pnvente.id_produit,dem.id_produit)
Aber ich finde keine Lösung auf dem web.
Dank für deine Hilfe 🙂
- ich traf den gleichen Fehler gestern, da haben wir ein UDAF namens Rang zu.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich in den gleichen Fehler.
rank()
groß - /Kleinschreibung ist im hive und die Fehlermeldung geben nichts Weg. Versuchen SieRANK()
zurank()
.Meine Vermutung ist, dass es hat zu tun mit der coalesce-in Ihrem Rang. Analytische Funktionen funktionieren, sind aber eingeschränkter in HiveQL. Ich würde versuchen, alle Ihre Verknüpfungen und Summen in eine innere Abfrage, und führen Sie dann den Rang in einer äußeren Abfrage. Oft ist dies erforderlich, da HiveQL nicht immer Folgen die gleiche Reihenfolge der Operationen, die Sie erwarten würden von einem typischen SQL-Sprache. Betrachten Sie eine Tabelle auf Basis von Aktien Informationen:
Betrachten Sie nun die folgende Abfrage:
Würden Sie erwarten, dass die folgenden Ergebnisse:
Aber würden Sie tatsächlich in HiveQL:
Um die richtigen Ergebnisse, die Sie haben, um die Gruppe, indem Sie in einem inneren Abfrage und die analytische Funktion in der äußeren Abfrage:
So in der Zusammenfassung ist es immer gut zu denken über die Reihenfolge der Operationen bei der Verwendung von analytischen Funktionen und Holen Sie sich die Daten, die Sie arbeiten mit, um zu seiner einfachsten form, bevor Sie die analytische Funktion.
sum(count(*)) over (partition by exchange)
.Lustig genug, ich traf diesen gleichen Fehler heute. Das problem für mich war, dass einer der Spalten war ich mit meiner analytische Funktion wurde kein Gültiger Spalte. W/O zu wissen, was die Spalten Ihrer Tabellen geben es ist unmöglich für mich, dies zu beweisen, ist Ihr problem, aber Sie möchten sicherstellen, dass alle Spalten in Ihrem RANG gültig sind.
Sieht nicht wie eine gültige "Hive" - Abfrage zu mir. Denken Sie daran hive-query-language ist sehr begrenzt im Vergleich zu SQL. Zum Beispiel "IN" wird nicht unterstützt. Ein weiteres Beispiel RANK() OVER (...) - das ist nicht entweder unterstützt. In anderen Worten versucht, RDBMS SQL direkt im Bienenstock meist nicht funktionieren.