generate_series () - Methode schlägt fehl, in der Rotverschiebung
Wenn ich die SQL-Abfrage ausführen:
select generate_series(0,g)
from ( select date(date1) - date(date2) as g from mytable ;
Gibt es einen Fehler:
INFO: Function "generate_series(integer,integer)" not supported.
ERROR: Specified types or functions (one per INFO message) not supported
on Redshift tables.
Aber wenn ich diese Abfrage ausführen:
select generate_series(0, g) from (select 5 as g)
Gibt es die unten Antwort:
generate_series
-----------------
0
1
2
3
4
5
(6 rows)
Warum funktioniert die zweite Abfrage funktioniert, während der erste fehlschlägt?
- Anscheinend ist der erste sub-query gibt ein
interval
keineinteger
(von wegen: "generate_series(integer, Intervall) existiert nicht") - siehe meine änderung in der Fehlermeldung.
- Sie sind nicht mit PostgreSQL. Sie sind mit Amazon Redshift.
- Da Sie diesen Bericht zu arbeiten, mit Rotverschiebung und einer Rotverschiebung ist nicht versioniert und somit die ältere version kann nicht immer von jedem genutzt werden, ich kann nicht sehen, warum diese Frage offen bleiben sollte. Ich werde die Abstimmung zu schließen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
generate_series()
Funktion wird nicht vollständig unterstützt durch die Rotverschiebung. Finden Sie die nicht Unterstützte PostgreSQL Funktionen Abschnitt des developer guide:In der spezifischen Beispiele, die zweite Abfrage wird ausgeführt, ganz auf den leader-Knoten, da Sie nicht brauchen, um Scannen eigentlichen Tabellendaten, während der erste versucht, Daten auszuwählen und als solche ausgeführt werden würde auf den compute-Knoten(s).
UPDATE:
generate_series arbeitet mit einer Rotverschiebung von jetzt.
Dies erzeugt das Datum für die letzten 30 Tage
Können Sie eine Fenster-Funktion ein ähnliches Ergebnis erzielen. Dies erfordert eine vorhandene Tabelle (wie
stv_blocklist
) zu Samen aus, die mindestens die Anzahl Zeilen, die Sie benötigen, aber nicht zu viele, die möglicherweise verlangsamen.Können Sie diese Methode verwenden, um anderen die Zeit reicht, sowie für Zwecke giesst. Diese version erzeugt alle Minuten für den vorherigen Tag, so dass Sie könnte einen left join gegen ihn und Eimer Ihre Daten.
Vielleicht habe ich erste gesehen, dass dieses hier.
Sind Sie richtig, dass dies nicht funktioniert, auf die Rotverschiebung.
Sehen hier.
Könnte man so etwas wie das
Sind Sie nicht mit PostgreSQL. Sie sind mit Amazon Redshift.
Amazon Redshift unterstützt nicht
generate_series
verwendet werden, wenn mit einer Rotverschiebung von Tabellen. Es sagt genau dort in der Fehlermeldung.Entweder echte PostgreSQL, oder wenn Sie brauchen, Rotverschiebung Funktionen, müssen Sie auch Arbeit innerhalb der Grenzen der Rotverschiebung.
Dein zweites Beispiel funktioniert, weil es verwendet keine Rotverschiebung Tabellen.
Das hier funktioniert (pg-9.3.3) Vielleicht ist Ihr Problem ist nur das Ergebnis einer Rotverschiebung-"feature"?
Warum es nicht funktioniert, wurde oben erklärt. Doch die Frage "was können wir dagegen tun?" ist offen.
Wenn Sie entwickeln ein BI-system auf jeder beliebigen Plattform (mit Generatoren unterstützt wird oder nicht), es ist sehr praktisch, um Dimensionstabellen mit der Reihenfolge von zahlen und Datumsangaben. Wie können Sie erstellen, die in einer Rotverschiebung?
Stellen Sie sich vor Sie haben eine sehr einfache Tabelle namens
calendar
:So wird die Abfrage wie folgt Aussehen:
In der Kalender-Tabelle können Sie auch die ersten Termine der Wochen -, Monats -, Quartals -, wochentags (Mo,di,etc.), das macht eine solche Tabelle sehr effektiv für Zeit-basierte Aggregationen.