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 ~