2012-06-15 13 views
9

Czy istnieje sposób na uzyskanie numeru wiersza dla każdego rekordu w BigQuery? (Z specyfikacji, nie widziałem nic na ten temat) Istnieje funkcja NTH(), ale dotyczy to powtarzających się pól.Numer wiersza w BigQuery?

Istnieje kilka scenariuszy, w których numer wiersza nie jest potrzebny w BigQuery, na przykład użycie funkcji TOP() lub LIMIT. Jednak potrzebuję go do symulacji niektórych funkcji analitycznych, takich jak łączna suma(). W tym celu muszę zidentyfikować każdy rekord z kolejnym numerem. Jakiekolwiek obejście tego problemu?

Z góry dziękuję za pomoc!

Leo

Odpowiedz

0

Nie ujawniamy identyfikatora wiersza. Czy możesz po prostu dodać je do swoich danych podczas importowania?

+0

Dzięki za odpowiedź Ryana. Nawet gdybyśmy mogli zaimportować identyfikator wiersza w naszym imporcie, nie byłoby to użyteczne, ponieważ potrzebujemy numeru wiersza po zastosowaniu funkcji grupowej względem oryginalnych danych. –

+0

Szukasz numeru wiersza wyniku, a nie numeru wiersza reprezentującego każdy wiersz danych podstawowych? –

+1

Dodanie _rodzina id_ podczas dołączania danych do tabeli nie brzmi praktycznie ... – user454322

0

Pomyślałem, że może uda mi się obejść brak funkcji ROW_NUMBER(), łącząc tabelę ze sobą na < =, a następnie wykonując obliczenia (*) na wynikach (tak to czasem robisz w MySQL). Okazuje się, że BigQuery obsługuje tylko połączenia w prostej linii "=".

Foliowane ponownie. Myślę, że to niemożliwe w BQ.

19

Dobra wiadomość: BigQuery ma teraz funkcję row_number.

Prosty przykład:

SELECT [field], ROW_NUMBER() OVER() 
FROM [table] 
GROUP BY [field] 

bardziej złożony przykład praca:

SELECT 
    ROW_NUMBER() OVER() row_number, 
    contributor_username, 
    count, 
FROM (
    SELECT contributor_username, COUNT(*) count, 
    FROM [publicdata:samples.wikipedia] 
    GROUP BY contributor_username 
    ORDER BY COUNT DESC 
    LIMIT 5) 
+0

Dodano jako funkcję okna: https://cloud.google.com/bigquery/query-reference –

+0

W jaki sposób filtrujemy to ROW_NUMBER kolumna? (tj. ROW_NUMBER()> 10 itd.) – Praxiteles

+0

Zapytanie dodatkowe. W razie potrzeby proszę napisać nowe pytanie, aby uzyskać pełną odpowiedź! –

Powiązane problemy