Resumen colmena habilidades de procesamiento de datos (a)

Este artículo es un resumen de la actividad real de cálculo de escenarios problemas encontrados.
Muchos artículo parámetros de ajuste de la colmena, este artículo no se describe en términos similares.
El artículo describe la escena en las estadísticas se puede utilizar mediante la combinación de algunas funciones de la colmena, que mejoran en gran medida la eficiencia computacional del método.

 

Seleccionar un diferentes valores de los campos en la tabla en la columna

 

Demostración descripción de la escena:
Un negocio ejemplar:
 
tabla A ( 
ID int, 
bigint create_date 
)

  

Log Tabla B:
la tabla B ( 
int id, 
tipo de cadena, 
lat doble, 
GNL doble 
)
 
El valor de tipo 'TYPE_1', 'TYPE_2', 'type_3'.

 

Espero conseguir finalmente los resultados
tabla C ( 
ID int, 
create_date, 
type_1_lat, 
type_1_lng, 
type_2_lat, 
type_2_lng, 
type_3_lat, 
type_4_lng 
)

  

 

type_1_lat valor lat representa un valor para TYPE_1

 

Método uno:

 

seleccionar 
a. *, 
b1.lat, 
b1.lng, 
b2.lat, 
b2.lng, 
b3.lat, 
b3.lng 
de 
A un 
LEFT JOIN ( 
seleccionar 
* 
de 
B 
donde type = 'TYPE_1' 
) b1 en a.id = b1.id 
unirse a izquierda ( 
seleccionar 
* 
de 
B 
, donde type = 'TYPE_2' 
) b2 = b2.id en a.id 
izquierda join ( 
seleccionar 
* 
de 
B 
, donde type = 'TYPE_1' 
) b3 en a.id = b3.id

  

Esto realmente sería un programa, pero creemos que, si type_N, la tabla de registro en una gran cantidad de datos, la ejecución sin parar combinación izquierda, todavía hay una gran cantidad de operación shuffle en la computación distribuida, la eficiencia será cada vez bajar.
Incluso con la optimización de parámetros colmena, no cambia el caso en que un gran número de izquierda se unen, esta optimización es un espacio limitado.

 

Un cambio en el pensamiento, Método dos:

 

con c como ( 
seleccione 
a. *, 
si (b.type = 'TYPE_1', b.lat, '') como type_1_lat, 
si b.type = ( 'TYPE_1', b.lng, '') como type_1_lng, 
si (b.type = 'TYPE_2', b.lat, '') como type_2_lat, 
si (b.type = 'TYPE_2', b.lng, '') como type_2_lng, 
si b.type = 'type_3' (, b .lat, '') como type_3_lat, 
si (b.type = 'type_3', b.lng, '') como type_3_lng 
de 
a a 
izquierda se unen a 
B b en a.id = b.id 
) 



seleccione 
ID, 
CONCAT_WS (' ', collect_list (type_1_lat)) como type_1_lat, 
CONCAT_WS ( '', collect_list (type_1_lng)) como type_1_lng, 
CONCAT_WS ( '', collect_list (type_2_lat)) como type_2_lat,
CONCAT_WS ( '', collect_list (type_2_lng)) como type_2_lng,
CONCAT_WS ( '', collect_list (type_3_lat)) como type_3_lat, 
CONCAT_WS ( '', collect_list (type_3_lng)) como type_3_lng 
de 
c 
grupo por id

  

Hablar de las ideas, es una forma inteligente de bits.
En sub type_1_lat ejemplo.
El primer paso es equivalente a la conexión de las dos tablas hacen toda la izquierda, pero el valor de la fila en TYPE_1, todas las demás columnas deben ser de ningún valor, en lugar de utilizar una cadena vacía.
La segunda sección de acuerdo con la operación de polimerización de la identificación, el significado de cada operación de las dos funciones puede ser interpretado como un primer conjunto de combinado type_1_lat columna, la columna dentro de la caja de recogida, sólo un valor, la otra cadena vacía,
A continuación, todos los valores en la costura con la cadena vacía, el resultado final sigue siendo de valor type_1_lat. Otras columnas son la misma razón.
 
 
Por favor, corríjanme ~
 
 

 

Supongo que te gusta

Origin www.cnblogs.com/eric-ln/p/12610030.html
Recomendado
Clasificación