Cómo anular la duplicación de filas en una tabla de BigQuery

A veces, los datos duplicados pueden causar agregados o resultados incorrectos. Probablemente necesite eliminar esas filas duplicadas antes de realizar cualquier agregación, combinación o cálculo. Hay varias formas de lidiar con los datos duplicados y puede encontrar uno de estos métodos para lidiar con las claves / columnas / filas duplicadas en esta publicación.

Caso 1; Obtenga solo una fila única por columna clave

Datos de ejemplo:

Aquí puede ver que hay algunos duplicados de filas completas, puede usar la siguiente consulta para deduplicar esta tabla:

 crear tabla dataset.table_name_dedup como (
 seleccione * excepto (fila_num) de (
 SELECCIONE
 *,
 ROW_NUMBER () SOBRE (
 PARTICIÓN POR
 DB_PK
 PEDIR POR
 DB_PK
 ) fila_num
 DESDE
 dataset.table_name) t
 DONDE row_num = 1
 )

Como habrás reconocido, estamos creando una nueva tabla en lugar de sobrescribir la tabla existente. Si desea sobrescribir la tabla existente, puede usar el mismo nombre con crear o reemplazar:

 crear o reemplazar tabla dataset.table_name como (
 seleccione * excepto (fila_num) de (
 SELECCIONE
 *,
 ROW_NUMBER () SOBRE (
 PARTICIÓN POR
 DB_PK
 PEDIR POR
 DB_PK
 ) fila_num
 DESDE
 dataset.table_name) t
 DONDE row_num = 1
 )

Caso-2; Deduplicar con un criterio como mantener lo más nuevo

Si tiene algunos criterios para la eliminación, como una columna de fecha, puede cambiar la clave de pedido como:

 crear o reemplazar tabla dataset.table_name como (
 seleccione * excepto (fila_num) de (
 SELECCIONE
 *,
 ROW_NUMBER () SOBRE (
 PARTICIÓN POR
 DB_PK
 PEDIR POR
 creation_date desc
 ) fila_num
 DESDE
 dataset.table_name) t
 DONDE row_num = 1
 )

Caso 3; Deduplicar basado en múltiples columnas

Si tiene varias claves de columna o elimina duplicados basados en algunas columnas, puede usar esas columnas dentro de la cláusula PARTITION BY:

Ejemplo: deduplicar según el nombre y el apellido

 crear o reemplazar tabla dataset.table_name como (
 seleccione * excepto (fila_num) de (
 SELECCIONE
 *,
 ROW_NUMBER () SOBRE (
 PARTICIÓN POR
 Nombre Apellido
 PEDIR POR
 creation_date desc
 ) fila_num
 DESDE
 dataset.table_name) t
 DONDE row_num = 1
 )

Hágame saber su método preferido comentando en esta publicación.


Cómo desduplicar filas en una tabla de BigQuery se publicó originalmente en Google Cloud - Community on Medium, donde las personas continúan la conversación resaltando y respondiendo a esta historia.