Athena / Presto | No se puede coincidir con la fila de ID en la autounión
Estoy tratando de obtener los bi-gramas en una columna de cuerda.
He seguido el enfoque aquí, pero Athena / Presto me está dando errores en los pasos finales.
Código fuente hasta ahora
with word_list as (
SELECT
transaction_id,
words,
n,
regexp_extract_all(f70_remittance_info, '([a-zA-Z]+)') as f70,
f70_remittance_info
FROM exploration_transaction
cross join unnest(regexp_extract_all(f70_remittance_info, '([a-zA-Z]+)')) with ordinality AS t (words, n)
where cardinality((regexp_extract_all(f70_remittance_info, '([a-zA-Z]+)'))) > 1
and f70_remittance_info is not null
limit 50 )
select wl1.f70, wl1.n, wl1.words, wl2.f70, wl2.n, wl2.words
from word_list wl1
join word_list wl2
on wl1.transaction_id = wl2.transaction_id
El problema específico que tengo está en la última línea, cuando intento unirme a los ID de transacción, siempre devuelve cero filas. Funciona si me uno solo por wl1.n = wl2.n-1
(la posición en la matriz), lo cual es inútil si no puedo restringirlo a una misma identificación.
Athena no admite la función ngrams por presto, así que me quedo con este enfoque.
¿Alguna pista de por qué esto no funciona? ¡Gracias!
Respuestas
Eso es especulación. Pero observo que su CTE está usando limit
con no order by
. Eso significa que se devuelve un conjunto arbitrario de filas.
Aunque algunas bases de datos materializan CTE, muchas no lo hacen. Ejecutan el código de forma independiente cada vez que se hace referencia a él. Supongo que el código se ejecuta de forma independiente y el conjunto arbitrario de 50 filas no tiene ID de transacción en común.
Una solución sería agregar order by transacdtion_id
la subconsulta.