La Red de Conocimientos Pedagógicos - Currículum vitae - Tabla de particiones de Hive

Tabla de particiones de Hive

Tabla de particiones de Hive:

Representación física del campo de partición:

Tabla de particiones de Hive, su rendimiento real es en realidad crear una nueva carpeta debajo de la carpeta donde está almacenada la tabla de Hive.

El formato del nombre de la carpeta es campo de partición = valor de campo.

Ventajas de la partición:

Cuando los datos en la tabla particionada son grandes, algunos datos se pueden especificar en la tabla de consulta.

Notas al configurar el campo de partición de la tabla:

1: No tome muchos valores para el campo de partición, porque esto hará que aparezcan muchas carpetas pequeñas debajo de la carpeta de la tabla.

2. Generalmente, los campos que aparecen en SQL se pueden utilizar como campos de partición. (Se puede utilizar como referencia para seleccionar campos de partición)

Compruebe si la tabla es una tabla particionada:

Nombre de la tabla en formato desc

Tabla particionada, Habrá información de particiones.

Insertar datos en la tabla de particiones:

Esta situación se divide en:

1: Insertar datos en la tabla y especificar el nombre de la partición insertada.

2. La inserción de datos en la tabla no especifica explícitamente el nombre de los datos insertados, pero determina automáticamente los datos en función del valor de un campo en los datos insertados.

Qué partición insertar. Esto se llama partición dinámica.

¿Cómo habilitar la función de partición dinámica de Hive?

¿Configuración? hive . exec .dynamic I .partition = true;

Partición dinámica de Hive: hay dos modos:

Modo estricto y no estricto

Modo estricto :

Al particionar dinámicamente, una partición debe ser estática.

Modo no estricto, independientemente de si la partición es estática.

¿Cómo configurar el modo de partición dinámica?

establecer colmena .exec .modo dinámico = no estricto

El modo predeterminado es el modo estricto.

Al insertar datos, especifique claramente el valor de la partición a insertar:

Demostración SQL:

1: Cambie los datos en la ruta "ruta" [local] Cargar en la tabla xxx partición (partición _ campos partición _ tipo)

2: Insertar una partición (partición_campos tipo_partición) en la tabla table_a

seleccione * de table_b [... ];

Al utilizar insertar, debe prestar atención al número coincidente de campos antes y después de la tabla.

Si los campos antes y después de la tabla no coinciden, se informará un error.

Al insertar datos en una tabla particionada, se creará una partición basada en el valor de un determinado campo de los datos.

Y decide en qué partición se insertarán los datos.

Demostración de SQL:

Partición dinámica:

Primero, se deben configurar dos parámetros:

¿Configuración? hive .exec .dynamic I .partition = true;

establece hive .dynamic .partition = no estricto.

Entonces puedes usar la partición dinámica.

La inferencia del valor de la partición se determina en función del último campo de la consulta posterior, y solo hay una partición.

Entonces es el último campo de la consulta. Si hay dos campos, haga coincidir el campo del último al primero.

Inserte la partición pp de la tabla (` fecha `) y seleccione nombre, edad, ` fecha ` del par

¿Demostración de SQL aquí?

Utilice el campo "Fecha" de par como valor de la partición "Fecha" en la tabla pp.

Algunas particiones dinámicas:

Hay varias particiones, pero el valor de la partición anterior es estático y el valor de la última partición es incierto.

Similar a la partición (país = 'China', ciudad)

Lo que hay que tener en cuenta aquí es el orden, la partición estática primero y la partición dinámica al final.

Luego hay múltiples particiones, particiones completamente dinámicas:

Cuando la partición es completamente dinámica, la tabla detrás de la consulta de selección se usa para hacer coincidir los datos de la partición.

,

Problemas encontrados en el uso real de la partición dinámica:

Un escenario de uso de la partición dinámica;

En primer lugar, cargar los datos en una tabla A y luego convierta esa tabla en otra tabla nuevamente.

En la tabla B, cuando la tabla A se convierte en la tabla B, se utiliza la partición dinámica.

Porque cuando se usa load para cargar datos directamente, para la tabla de particiones, los datos cargados solo pueden especificar un nombre de partición fijo.

No se pueden cargar datos usando la partición dinámica.

El problema correspondiente es:

Si la tabla A contiene muchos archivos, cuando se utiliza la partición dinámica,

entonces, en la tabla B, se generarán muchos archivos pequeños. . documento.

Los motivos son los siguientes:

Si hay 200 archivos de datos en la tabla A,

entonces, cuando se particiona dinámicamente, se pueden generar 200 mapas.

Entonces puede haber múltiples valores de partición en los datos contenidos en el mapa.

Entonces un mapa generará múltiples archivos.

Entonces la consecuencia es que se generarán muchos archivos pequeños en cada partición de la nueva tabla B.

Para resumir: el impacto negativo es que se pueden generar muchos archivos pequeños.

Solución:

Dado que los trabajos mapredue después de la conversión de partición dinámica no se reducen, el número es difícil de controlar.

Entonces el método que podemos adoptar es aumentar manualmente la cantidad reducida.

Puedes utilizar distribuido por para aumentar el número de reducción.

Insertar partición (' nombre_partición ') en la tabla table_a

Seleccionar *? De table_b

Distribuido por nombre de partición

Sin embargo, de esta manera, la cantidad de datos contenidos entre los reductores puede ser desigual.

Entonces la solución es:

Distribuido por rand()

Utilice hash para particionar aleatoriamente, de modo que los datos se distribuyan y reduzcan uniformemente.

Luego, cada reducción generará archivos con el número de valores de partición.

Ejemplo: El número de valores para una partición con un número de reducción de 200 es 24.

Entonces el número final de archivos generados es 200* 24 archivos.

De hecho, puede analizar el plan de ejecución de SQL a través de exlpain. En este caso,

Puedes comprobar si hay una operación de reducción.

Consultar información de partición de la tabla:

Mostrar el nombre de la tabla de particiones

Agregar partición a la tabla de particiones:

alterar tabla tabla _ nombre agregar partición (pfield = pvalue,...)

Si hay varias particiones en la tabla, al agregar una partición, también habrá varias particiones.

Aumentar juntos.

Eliminar partición:

alterar tabla tabla _ nombre soltar partición(pfield=pval)

Modificar información de partición:

Modificaciones de información de partición Se puede dividir en modificaciones de los nombres de las particiones y modificaciones de los datos de las particiones.

Modificar nombre de partición

alterar tabla tabla _ nombre partición(p campo = pvalor)cambiar nombre a partición(p campo = pvalor)

Modificación de datos de partición:

alterar tabla tabla _ nombre partición(pfield = pvalue)establecer ubicación ' datos _ ubicación '