ARRAY JOIN.
Su nombre proviene de que puede interpretarse como la ejecución de un JOIN con un array o una estructura de datos anidada. Su propósito es similar al de la función arrayJoin, pero la funcionalidad de la cláusula es más amplia.
PostgreSQL
FROM unnest(...), CROSS JOIN UNNEST(...) y LATERAL no son compatibles. Use ARRAY JOIN en su lugar. El nombre unnest (desde la versión 26.5) es un alias de llamada de función de arrayJoin (SELECT unnest(arr)), no una función de tabla.ARRAY JOIN admitidos:
ARRAY JOIN- En el caso base, los arrays vacíos no se incluyen en el resultado deJOIN.LEFT ARRAY JOIN- El resultado deJOINcontiene filas con arrays vacíos. El valor de un array vacío se establece en el valor predeterminado del tipo de elemento del array (normalmente 0, una cadena vacía o NULL).
Ejemplos básicos de ARRAY JOIN
ARRAY JOIN y LEFT ARRAY JOIN
ARRAY JOIN y LEFT ARRAY JOIN. Vamos a crear una tabla con una columna de tipo Array e insertar valores en ella:
ARRAY JOIN:
LEFT ARRAY JOIN:
ARRAY JOIN y la función arrayEnumerate
ARRAY JOIN. Permite contar algo solo una vez por cada array después de aplicar ARRAY JOIN. Ejemplo:
ARRAY JOIN) y Hits es el número de páginas vistas (las cadenas antes de ARRAY JOIN). En este caso concreto, puede obtener el mismo resultado de una forma más sencilla:
ARRAY JOIN y arrayEnumerateUniq
ARRAY JOIN y se agregan elementos de un array.
En este ejemplo, para cada ID de objetivo se calcula el número de conversiones (cada elemento de la estructura de datos anidada Goals es un objetivo alcanzado, al que nos referimos como una conversión) y el número de sesiones. Sin ARRAY JOIN, habríamos contado el número de sesiones como sum(Sign). Pero en este caso concreto, las filas se multiplicaron por la estructura anidada Goals, así que, para contar cada sesión una sola vez después de esto, aplicamos una condición al valor de la función arrayEnumerateUniq(Goals.ID).
Uso de alias
ARRAY JOIN. En este caso, se puede acceder a un elemento del array mediante ese alias, pero al propio array se accede mediante su nombre original. Ejemplo:
ARRAY JOIN con un array externo. Por ejemplo:
ARRAY JOIN. En este caso, el JOIN se realiza sobre ellos simultáneamente (la suma directa, no el producto cartesiano). Tenga en cuenta que, de forma predeterminada, todos los arrays deben tener el mismo tamaño. Ejemplo:
SETTINGS enable_unaligned_array_join = 1. Ejemplo:
ARRAY JOIN con estructuras de datos anidadas
ARRAY JOIN también funciona con estructuras de datos anidadas:
ARRAY JOIN, el significado es el mismo que el de ARRAY JOIN con todos los elementos del array que la componen. A continuación se muestran ejemplos:
JOIN o el array de origen. Ejemplo:
Detalles de implementación
ARRAY JOIN. Aunque ARRAY JOIN siempre debe especificarse antes de la cláusula WHERE/PREWHERE en una consulta, técnicamente pueden ejecutarse en cualquier orden, a menos que el resultado de ARRAY JOIN se use como filtro. El optimizador de consultas controla el orden de ejecución.
Incompatibilidad con la evaluación de funciones con cortocircuito
if, multiIf, and y or. Evita que se produzcan posibles excepciones, como la división entre cero, durante la ejecución de estas funciones.
arrayJoin siempre se ejecuta y no es compatible con la evaluación de funciones con cortocircuito. Esto se debe a que es una función especial que se procesa por separado de todas las demás funciones durante el análisis y la ejecución de la consulta, y requiere una lógica adicional que no funciona con la ejecución con cortocircuito. La razón es que el número de filas del resultado depende del resultado de arrayJoin, e implementar la ejecución diferida de arrayJoin es demasiado complejo y costoso.