beginne ich vor kurzem Calcit Lernen (1.8.0) und ich habe folgende Anwendungsfall: inWie kann ich SqlNode Ausdruck (nicht Abfrage!) Zu RelNode konvertieren?
Ich brauche eine Liste von Zeichenketten wie „SUM(x)/SUM(y) as myRatio
“, „MAX(z) as maxZ
“ oder "CASE WHEN …
“ zu AggCall
s und es zu verwenden, zu transformieren . RelBuilder
später
So scheint wie ich folgende tun sollte:.. konvertieren string -> sQL-Knoten -> rel Knoten I String umgewandelt sql-knoten SqlParser.parseExpression
mit und versuchte Planner.rel(sqlNode)
sql-knoten zu RelNode zu konvertieren, aber ohne Glück versucht auch SqlToRelConverter
zu erstellen Ich selbst kann aber nicht herausfinden, wie man einen Validator, einen Katalogleser und einen Cluster aus einer Konfiguration erstellt, die nur mit JdbcSchema erstellt wurde.
danke! also kann ich 'SUM (x)/SUM (y) als myRatio 'in' RelNode' umwandeln, aber wie kann ich einen weiteren Ausdruck hinzufügen? zum Beispiel "SUM (x) als X". Ich erwarte, "SUM (x)/SUM (y) als myRatio" Teil von "RelNode" zu extrahieren und es zu einem Erbauer hinzuzufügen und dasselbe für "SUMME (x) als X" zu tun. Nicht sicher, ob es möglich ist ... –
Sie können SELECT SUM (x)/SUM (y) als myRatio, SUM (x) AS x, SUM (y) AS y FROM (WERTE (0, 0)) AS t konvertieren (x, y) 'genauso wie die vorherige Abfrage. Sie werden mit einem 'Aggregate' enden, um die Summen zu berechnen, dann ein' Projekt', das '$ 0/$ 1 als myRatio, $ 0 als x, $ 1 als y' berechnet. Oder, wenn Sie 'RelBuilder' verwenden, können Sie' RelBuilder.aggregate() 'aufrufen, um' SUM (x) 'und' SUM (y) 'zu erstellen, und dann' RelBuilder.project() 'aufrufen, um zu projizieren '$ 0/$ 1 als myRatio, $ 0 als x, $ 1 als y'. –