2016-07-15 5 views
1

Ich konnte keine Antwort auf diese spezifische BigQuery finden. Im Grunde möchte ich in der Lage sein, ROW_NUMBER in einer Abfrage zu zählen und dann die Zeilennummer mit einfachen mathematischen Operatoren (addieren, subtrahieren, usw.) ändern, ohne eine Unterabfrage zu verwenden.ROW_NUMBER() und mathematische Funktionen in BigQuery

Ich weiß, der folgende Code funktioniert, aber mir scheint es nicht notwendig, eine Unterabfrage zu verwenden, nur grundlegende mathematische Operatoren

SELECT 
    id, 
    title, 
    language, 
    rn+5 
FROM 
(
    SELECT 
    id, 
    title, 
    language, 
    ROW_NUMBER() OVER() AS rn 
    FROM [publicdata:samples.wikipedia] LIMIT 1000 
) 

jedoch anzuhängen, wenn ich versuche, auf das Pluszeichen ohne die Unterabfrage Ich erhalte eine Fehlermeldung hinzufügen

SELECT 
    id, 
    title, 
    language, 
    ROW_NUMBER() OVER() +5 AS rn_offset, 
FROM [publicdata:samples.wikipedia] LIMIT 1000 

ist das, was ich versuche, ohne eine Unterabfrage in BigQuery möglich zu tun, oder ist meine Syntax fehlerhaft?

Danke, Onji

+2

Sie haben ein abschließendes ',' vor der 'FROM'-Klausel – Siyual

+0

in BigQuery Legacy SQL-Trailing', 'vor' FROM'-Klausel ist überhaupt kein Problem! –

+0

@onji Ich kann Ihnen zustimmen, dass 'die Verwendung von Unterabfragen nur zum Anhängen mit einem Basisanpassungsoperator 'unnötig erscheint - ABER gleichzeitig sehe ich keinen praktischen Nutzen Ihres Beispiels! Was wäre der Grund für Sie, 'ROW_NUMBER()' inline mit row_number() selbst zu erhöhen. wenn es weiter verwendet wird - es sollte dort reflektiert werden, was höchstwahrscheinlich sowieso eine Unterabfrage beinhaltet. Wie auch immer - können Sie Ihren genauen "praktischen" Anwendungsfall angeben? –

Antwort

1

Dies ist eine Einschränkung von Legacy-SQL die BigQuery - verschiedene Berechnungen können nicht ohne die Verwendung eines subselect bestehen. Es ist bedauerlich, aber es ist unwahrscheinlich, dass es an dieser Stelle geändert wird. Dies ist nur ein Beispiel von vielen.

Sie können jedoch diese ohne Unterabfrage in standard SQL zu tun:

SELECT 
    id, 
    title, 
    language, 
    ROW_NUMBER() OVER() +5 AS rn_offset 
FROM `publicdata.samples.wikipedia` LIMIT 1000 

Wenn Einschränkungen wie diese nerven, während Sie Legacy-SQL verwenden, schlage ich vor, in mit Standard-SQL suchen.

+0

Das ist großartig, ich wusste nicht über die Option, Standard-SQL zu aktivieren. Ich habe gehofft, dass Google BigQuery standardisierter und weniger skurril macht. Danke Danny! – onji