Optimización de la operación SQL de Hive, podemos comenzar desde los siguientes aspectos
Introducción a la dirección de optimización.
Escena 1. Problema de deduplicación
Escenario 2. Reducir el número de TRABAJOS de cierta manera
Escenario 3. Controlar razonablemente el número de paralelos
Escenario 4. Controle el número de nodos / archivos en la tarea
Escenario 5. Problema de clasificación
Escenario 6. Reduzca el costo de cómputo y el costo de transmisión de datos de Reducir poniendo más presión en el lado del Mapa
Escenario 7. Problema de sesgo de datos
Escena 8. Problema de recorte de datos
Escenario 9. Reduzca el número de IO
Veamos este problema en detalle.
Lista detallada de direcciones de optimización
CONSEJOS: Algunos detalles de optimización, la longitud del caso es demasiado larga, se iniciará un artículo separado.
Escena 1. Problema de deduplicación
1) UNION: la diferencia entre UNION ALL, cómo elegir
2) DISTINTA forma alternativa GRUPO POR
Enlace del artículo: https://blog.csdn.net/u010003835/article/details/105493563
Escenario 2. Reducir la cantidad de TRABAJO
1) Use UNION ALL hábilmente para reducir el número de TRABAJOS
2) Use la misma condición JOIN de varias tablas para reducir el número de TRABAJOS
Enlace del artículo: https://blog.csdn.net/u010003835/article/details/105493938
Escenario 3. Control paralelo razonable
Uso razonable del control de parámetros en paralelo.
Para la siguiente declaración
1) UNIR TODO
2) ÚNETE
Enlace del artículo: https://blog.csdn.net/u010003835/article/details/105494048
Escenario 4. Controle el número de nodos / archivos en la tarea
1) Control de cantidad del mapeador
2) control de cantidad reductor
3) Controla el número de archivos que sale Mapper y Reducer
Enlace del artículo: https://blog.csdn.net/u010003835/article/details/105494261
Escenario 5. Problema de clasificación
1) Use ORDER BY y SORT BY razonablemente, y elija entre los dos
2) Limite la salida ordenada usando LIMIT
Enlace del artículo: https://blog.csdn.net/u010003835/article/details/105494790
Escenario 6. Reduzca el costo computacional y el costo de transmisión de datos del reductor al permitir que el MAP finalice más tareas.
1) El camino de MAP JOIN
2) MAP AGGR, preagregación en el lado del Mapa
Escenario 7. Problema de sesgo de datos
1) Desviación de datos causada por un valor nulo
2) Debido a los tipos de datos inconsistentes, los problemas de conversión causados, lo que resulta en un sesgo de datos
3) Los datos comerciales en sí se distribuyen de manera desigual, lo que resulta en un sesgo de datos
Escena 8. Problema de recorte de datos
1) Recorte de número de registro
Desarrollar a través de las ventajas de la partición y la tabla de cubo
ii) Elimine los registros inválidos a través de las condiciones de filtrado, de modo que los datos inválidos se eliminen en la etapa del mapa
2) Recorte de columna
Eliminar los datos de columna no calculados no válidos
ii. Usar almacenamiento columnar
Escenario 9. Reduzca el número de IO
1) Insertar desde varias tablas DESDE A INSERTAR B SELECCIONAR a, ... INSERTAR C SELECCIONAR a, ...
2) Ingrese una vez, use WITH TABLE AS (...) varias veces
Echemos un vistazo a estas nueve direcciones de optimización por separado.
Tabla de prueba y datos de prueba
+----------------------------------------------------+
| createtab_stmt |
+----------------------------------------------------+
| CREATE TABLE `datacube_salary_org`( |
| `company_name` string COMMENT '????', |
| `dep_name` string COMMENT '????', |
| `user_id` bigint COMMENT '??id', |
| `user_name` string COMMENT '????', |
| `salary` decimal(10,2) COMMENT '??', |
| `create_time` date COMMENT '????', |
| `update_time` date COMMENT '????') |
| PARTITIONED BY ( |
| `pt` string COMMENT '????') |
| ROW FORMAT SERDE |
| 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' |
| WITH SERDEPROPERTIES ( |
| 'field.delim'=',', |
| 'serialization.format'=',') |
| STORED AS INPUTFORMAT |
| 'org.apache.hadoop.mapred.TextInputFormat' |
| OUTPUTFORMAT |
| 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' |
| LOCATION |
| 'hdfs://cdh-manager:8020/user/hive/warehouse/data_warehouse_test.db/datacube_salary_org' |
| TBLPROPERTIES ( |
| 'transient_lastDdlTime'='1586310488') |
+----------------------------------------------------+
+-----------------------------------+-------------------------------+------------------------------+--------------------------------+-----------------------------+----------------------------------+----------------------------------+-------------------------+
| datacube_salary_org.company_name | datacube_salary_org.dep_name | datacube_salary_org.user_id | datacube_salary_org.user_name | datacube_salary_org.salary | datacube_salary_org.create_time | datacube_salary_org.update_time | datacube_salary_org.pt |
+-----------------------------------+-------------------------------+------------------------------+--------------------------------+-----------------------------+----------------------------------+----------------------------------+-------------------------+
| s.zh | engineer | 1 | szh | 28000.00 | 2020-04-07 | 2020-04-07 | 20200405 |
| s.zh | engineer | 2 | zyq | 26000.00 | 2020-04-03 | 2020-04-03 | 20200405 |
| s.zh | tester | 3 | gkm | 20000.00 | 2020-04-07 | 2020-04-07 | 20200405 |
| x.qx | finance | 4 | pip | 13400.00 | 2020-04-07 | 2020-04-07 | 20200405 |
| x.qx | finance | 5 | kip | 24500.00 | 2020-04-07 | 2020-04-07 | 20200405 |
| x.qx | finance | 6 | zxxc | 13000.00 | 2020-04-07 | 2020-04-07 | 20200405 |
| x.qx | kiccp | 7 | xsz | 8600.00 | 2020-04-07 | 2020-04-07 | 20200405 |
| s.zh | engineer | 1 | szh | 28000.00 | 2020-04-07 | 2020-04-07 | 20200406 |
| s.zh | engineer | 2 | zyq | 26000.00 | 2020-04-03 | 2020-04-03 | 20200406 |
| s.zh | tester | 3 | gkm | 20000.00 | 2020-04-07 | 2020-04-07 | 20200406 |
| x.qx | finance | 4 | pip | 13400.00 | 2020-04-07 | 2020-04-07 | 20200406 |
| x.qx | finance | 5 | kip | 24500.00 | 2020-04-07 | 2020-04-07 | 20200406 |
| x.qx | finance | 6 | zxxc | 13000.00 | 2020-04-07 | 2020-04-07 | 20200406 |
| x.qx | kiccp | 7 | xsz | 8600.00 | 2020-04-07 | 2020-04-07 | 20200406 |
| s.zh | enginer | 1 | szh | 28000.00 | 2020-04-07 | 2020-04-07 | 20200407 |
| s.zh | enginer | 2 | zyq | 26000.00 | 2020-04-03 | 2020-04-03 | 20200407 |
| s.zh | tester | 3 | gkm | 20000.00 | 2020-04-07 | 2020-04-07 | 20200407 |
| x.qx | finance | 4 | pip | 13400.00 | 2020-04-07 | 2020-04-07 | 20200407 |
| x.qx | finance | 5 | kip | 24500.00 | 2020-04-07 | 2020-04-07 | 20200407 |
| x.qx | finance | 6 | zxxc | 13000.00 | 2020-04-07 | 2020-04-07 | 20200407 |
| x.qx | kiccp | 7 | xsz | 8600.00 | 2020-04-07 | 2020-04-07 | 20200407 |
+-----------------------------------+-------------------------------+------------------------------+--------------------------------+-----------------------------+----------------------------------+----------------------------------+-------------------------+
Escena 1. Problema de deduplicación
1) UNION: la diferencia entre UNION ALL, cómo elegir
2) DISTINTA forma alternativa GRUPO POR
Escenario 2. Reducir la cantidad de TRABAJO
1) Use UNION ALL hábilmente para reducir el número de TRABAJOS
2) Use la misma condición JOIN de varias tablas para reducir el número de TRABAJOS
Escenario 3. Control paralelo razonable
Uso razonable del control de parámetros en paralelo.
Para la siguiente declaración
1) UNIR TODO
2) ÚNETE
Escenario 4. Controle el número de nodos / archivos en la tarea
1) Control de cantidad del mapeador
2) control de cantidad reductor
3) Controla el número de archivos que sale Mapper y Reducer
Escenario 5. Problema de clasificación
1) Use ORDER BY y SORT BY razonablemente, y elija entre los dos
2) Limite la salida ordenada usando LIMIT
Escenario 6. Reduzca el costo computacional y el costo de transmisión de datos del reductor permitiendo que el MAP finalice más tareas
1) El camino de MAP JOIN
2) MAP AGGR, preagregación en el lado del Mapa
Escenario 7. Problema de sesgo de datos
1) Desviación de datos causada por un valor nulo
2) Debido a los tipos de datos inconsistentes, los problemas de conversión causados, lo que resulta en un sesgo de datos
3) Los datos comerciales en sí se distribuyen de manera desigual, lo que resulta en un sesgo de datos
Escena 8. Problema de recorte de datos
1) Recorte de número de registro
Desarrollar a través de las ventajas de la partición y la tabla de cubo
ii) Elimine los registros inválidos a través de las condiciones de filtrado, de modo que los datos inválidos se eliminen en la etapa del mapa
2) Recorte de columna
Eliminar los datos de columna no calculados no válidos
ii. Usar almacenamiento columnar
Escenario 9. Reduzca el número de IO
1) Insertar desde varias tablas DESDE A INSERTAR B SELECCIONAR a, ... INSERTAR C SELECCIONAR a, ...
2) Ingrese una vez, use WITH TABLE AS (...) varias veces
Burbujeante