Sobre la función de explosión
explode () es en realidad una función de generación de tabla definida por el usuario UDTF, y la definición oficial de la función de generación de tabla es aceptar cero o más entradas y producir múltiples columnas o filas de salida, al igual que el significado de explotar, generar explosiones El efecto es difundir los datos.
explode () generalmente acepta una matriz de tipo Array como parámetro de entrada, itera sobre los elementos en los datos y luego devuelve varias filas de resultados. Por ejemplo: el
resultado devuelto es:
Para un mejor uso práctico y la comprensión de todos, utilizo una producción Formato de campo, el formato son los datos del rastreador de un sitio web, el siguiente
formato
Esta columna es un objeto json, que tiene muchos elementos, entre los cuales el elemento de característica es la descripción de la característica, con '' como separador, el formato es el siguiente.
Lo que queremos hacer es analizar cada característica en este campo de característica en varias líneas, pero ahora esto El feture está en el objeto json, por lo que primero llamamos a get_json_object para analizar el json, de la siguiente manera:
select
get_json_object(result_contxt, '$.feature') as feature
from
testtable
where
p_day = '20191208'
El resultado de la consulta es:
Sin embargo, la función de explosión o UDTF tiene dos restricciones de uso. Primero, normalmente no podemos consultar otras columnas de la declaración que contiene UDTF, como se indica a continuación.
select
explode(split(t.feature,' '))
,url
from
(select
get_json_object(result_contxt, '$.feature') as feature
,url
from
testtable
where
p_day = '20191208'
)
执行 sql 异常 Error al compilar la instrucción: FAILED: SemanticException 1:55 Solo se admite una única expresión en la cláusula SELECT con UDTF. Se encontró un error cerca del token 'url'
En segundo lugar, UDTF no puede integrarse en otras funciones, como sigue
select
distinct(explode(split(t.feature,' ')))
from
(select
get_json_object(result_contxt, '$.feature') as feature
,url
from
testtable
where
p_day = '20191208'
)
执行 sql 异常 Error al compilar la instrucción: FAILED: SemanticException [Error 10081]: los UDTF no se admiten fuera de la cláusula SELECT, ni se anidan en expresiones
Entonces, la pregunta es, ¿cómo puede consultar varias columnas al mismo tiempo cuando usa explosión o UDTF, entonces necesita la vista lateral-lateral para lograr la función
Como sigue
select
features_1,
url
from
(select
get_json_object(result_contxt, '$.feature') as feature
,url
from
testtable
where
p_day = '20191208'
) t
lateral view explode(split(feature,' ')) tempview as features_1
La vista temporal aquí es el nombre de la tabla temporal, que está relacionada con el resultado de la subconsulta anterior. El resultado de la consulta es el siguiente
. El uso de la vista lateral es la siguiente . En el desarrollo real, la vista lateral puede transferir fácilmente las filas del UDTF a los resultados. En combinación con otras consultas, también puede realizar operaciones de fusión de dos columnas y otras operaciones. Por supuesto, también puede usar union all. Las necesidades específicas determinan el uso específico, que también tiene una cierta relación con los hábitos personales ~