Uso detallado de la vista lateral de Hive y explotar

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
seleccione explotar (Array (1,2,3)) de t
resultado devuelto es:
Inserte la descripción de la imagen aquí
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
formatoInserte la descripción de la imagen aquí

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.
Inserte la descripción de la imagen aquí
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:
Inserte la descripción de la imagen aquí

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
Inserte la descripción de la imagen aquí
. 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 ~

14 artículos originales publicados · Me gusta1 · Visitas 684

Supongo que te gusta

Origin blog.csdn.net/qq_33891419/article/details/103297121
Recomendado
Clasificación