2015-02-25 4 views
3

Учитывая набор данных Google BigQuery с col_1 .... col_m, как вы можете использовать Google BigQuery SQL для возврата набора данных, где нет дубликатов ... [ col1, col3, col7], так что когда в [col1, col3, col7] есть строки с дубликатами, возвращается первая строка из этих дубликатов, а остальные строки, которые имеют повторяющиеся поля в этих столбцах, удаляются?Google BigQuery - имитировать Pandas removeDuplicates() в Google BigQuery SQL

Пример: removeDuplicates ([col1, col3])

col1 col2 col3 
    ---- ---- ---- 
r1: 20 25 30 
r2: 20 70 30 
r3: 40 70 30 

возвращается

col1 col2 col3 
    ---- ---- ---- 
r1: 20 25 30 
r3: 40 70 30 

Чтобы сделать это с помощью питона панд легко. Для кадра данных (т. Е. Матрицы) вы вызываете функцию pandas removedDuplicates([field1, field2, ...]). Однако removeDuplicates не указывается в контексте Google Big Query SQL.

Моя догадкой с тем, как сделать это в Google Big Query является использование rank() функции:

https://cloud.google.com/bigquery/query-reference#rank

Я ищу лаконичное решение, если оно существует.

ответ

5

Вы можете группировать все столбцы, из которых вы хотите удалить дубликаты, и использовать FIRST() из других. То есть, removeDuplicates([col1, col3]) бы перевести

SELECT col1, FIRST(col2) as col2, col3 
FROM table 
GROUP EACH BY col1, col3 

Обратите внимание, что в BigQuery SQL, если у вас есть более миллиона различных значений для col1 и col3, вам потребуется EACH ключевое слово.

+0

Perfect. Это более элегантно, чем решение, использующее rank(). – cgnorthcutt