Posterior a buscar en diferentes repositorios y páginas webs de internet al terminar encontramos la solución que te mostraremos pronto.
Solución:
A continuación en realidad: o) funciona
#standardSQL
DELETE FROM `yourproject.yourdataset.duplicates`
WHERE STRUCT(id, loadTime) NOT IN (
SELECT AS STRUCT id, MAX(loadTime) loadTime
FROM `yourproject.yourdataset.duplicates`
GROUP BY id)
Nota: se supone que loadTime también es único, lo que significa que si para una identificación dada hay más de un registro con el último loadTime, todos se conservarán
De la documentación de sintaxis, el argumento para DELETE
necesita ser una mesa, y no hay provisión para usar una WITH
cláusula. Esto tiene sentido dado que no puede eliminar de lo que es esencialmente una vista lógica (un CTE). Puede expresar lo que quiere poniendo la lógica dentro del filtro, por ejemplo
DELETE
FROM duplicates AS d
WHERE (SELECT ROW_NUMBER() OVER (PARTITION BY id ORDER BY loadTime DESC)
FROM `duplicates` AS d2
WHERE d.id = d2.id AND d.loadTime = d2.loadTime) > 1;
Esta tiene que ser la forma más fácil:
create or replace table `myproject.mydataset.duplicates` as (
select distinct *
from `myproject.mydataset.duplicates`)
si tienes un array tipo de datos, intente esto:
-- build a test table with a duplicate and an array datatype column --
create or replace table DW.pmoTest as (
select 1 as ID, 'peter' as firstname,ARRAY[1, 2, 3] as int_array, current_date as createdate
union all
select 1 as ID, 'peter' as firstname,ARRAY[1, 7, 3] as int_array, current_date as createdate
union all
select 2 as ID, 'chamri' as firstname,ARRAY[1, 2, 39, 4] as int_array, current_date as createdate
);
-- recreate table without duplicate row
create or replace table DW.pmoTest as (
SELECT col.* FROM (
SELECT ARRAY_AGG(tbl ORDER BY createdate LIMIT 1)[OFFSET(0)] col
FROM DW.pmoTest tbl
GROUP BY ID
)
);
Aquí puedes ver las comentarios y valoraciones de los usuarios
Si para ti ha sido provechoso este post, nos gustaría que lo compartas con el resto juniors y nos ayudes a extender este contenido.