Tabla de contenido
1 Operación básica de la tabla de particiones
3 Ajuste dinámico de partición
0 tabla de particiones
La tabla de particiones en realidad corresponde a una carpeta independiente en el sistema de archivos HDFS, y todos los archivos de datos de la partición se encuentran en esta carpeta. La partición en Hive es el subdirectorio , que divide un gran conjunto de datos en pequeños conjuntos de datos de acuerdo con las necesidades comerciales. En la consulta, la partición especificada requerida por la consulta se selecciona a través de la expresión en la cláusula WHERE, y la eficiencia de la consulta mejorará mucho.
1 Operación básica de la tabla de particiones
1 ) Introduzca la tabla de particiones (el registro debe administrarse de acuerdo con la fecha y simularse con la información del departamento)
dept_20200401.log
dept_20200402.log
dept_20200403.log
2 ) Cree la sintaxis de la tabla de particiones
hive (default)> create table dept_partition(
deptno int, dname string, loc string
)
partitioned by (day string)
row format delimited fields terminated by '\t';
Nota: El campo de partición no puede ser información que ya exista en la tabla. El campo de partición se puede considerar como una pseudocolumna de la tabla. |
3 ) Cargue datos en la tabla de particiones
- preparación de datos
dept_20200401.log
10 CONTABILIDAD 1700
20 INVESTIGACIÓN 1800
dept_20200402.log
30 VENTAS 1900
40 OPERACIONES 1700
dept_20200403.log
50 PRUEBA 2000
60 DEV 1900
- Descargar datos
hive (default)> load data local inpath '/opt/module/hive/datas/dept_20200401.log' into table dept_partition partition(day='20200401');
hive (default)> load data local inpath '/opt/module/hive/datas/dept_20200402.log' into table dept_partition partition(day='20200402');
hive (default)> load data local inpath '/opt/module/hive/datas/dept_20200403.log' into table dept_partition partition(day='20200403');
Nota: al cargar datos en la tabla de particiones, debe especificar la partición
4 ) Consultar los datos en la tabla de particiones
Consulta de partición única
hive (default)> select * from dept_partition where day='20200401';
Consulta conjunta de múltiples particiones
hive (default)> select * from dept_partition where day='20200401'
union
select * from dept_partition where day='20200402'
union
select * from dept_partition where day='20200403';
hive (default)> select * from dept_partition where day='20200401' or
day='20200402' or day='20200403';
5 ) Aumentar la partición
Crea una sola partición
hive (default)> alter table dept_partition add partition(day='20200404');
Crea múltiples particiones al mismo tiempo
hive (default)> alter table dept_partition add partition(day='20200405') partition(day='20200406');
6 ) Eliminar la partición
Eliminar una sola partición
hive (default)> alter table dept_partition drop partition (day='20200406');
Eliminar varias particiones al mismo tiempo
hive (default)> alter table dept_partition drop partition (day='20200404'), partition(day='20200405');
7 ) Ver cuántas particiones tiene la tabla de particiones
hive> show partitions dept_partition;
8 ) Ver la estructura de la tabla de particiones
hive> desc formatted dept_partition;
# Partition Information
# col_name data_type comment
month string
2 partición secundaria
Pensando: ¿Cómo dividir los datos de registro en un día?
1 ) Cree una tabla de particiones secundaria
|
2 ) Datos de carga normal
(1) Cargar datos en la tabla de particiones secundaria
hive (default)> load data local inpath '/opt/module/hive/datas/dept_20200401.log' into table
dept_partition2 partition(day='20200401', hour='12');
(2) Consultar datos de partición
hive (default)> select * from dept_partition2 where day='20200401' and hour='12';
3 ) datos cargados directamente en la partición del directorio , de modo que la tabla de particiones y los datos asociados se generen de tres maneras
(1) Método 1: reparación después de cargar datos
Subir datos
hive (default)> dfs -mkdir -p
/user/hive/warehouse/mydb.db/dept_partition2/day=20200401/hour=13;
hive (default)> dfs -put /opt/module/datas/dept_20200401.log /user/hive/warehouse/mydb.db/dept_partition2/day=20200401/hour=13;
Consultar datos (los datos que se acaban de cargar no se pueden consultar)
hive (default)> select * from dept_partition2 where day='20200401' and hour='13';
Ejecutar comando de reparación
hive> msck repair table dept_partition2;
Consultar datos de nuevo
hive (default)> select * from dept_partition2 where day='20200401' and hour='13';
(2) Método 2: agregue la partición después de cargar los datos
Subir datos
hive (default)> dfs -mkdir -p
/user/hive/warehouse/mydb.db/dept_partition2/day=20200401/hour=14;
hive (default)> dfs -put /opt/module/hive/datas/dept_20200401.log /user/hive/warehouse/mydb.db/dept_partition2/day=20200401/hour=14;
Ejecutar agregar partición
hive (default)> alter table dept_partition2 add partition(day='201709',hour='14');
Consultar datos
hive (default)> select * from dept_partition2 where day='20200401' and hour='14';
(3) Método 3: cargue los datos en la partición después de crear la carpeta
Crea un directorio
hive (default)> dfs -mkdir -p
/user/hive/warehouse/mydb.db/dept_partition2/day=20200401/hour=15;
Subir datos
hive (default)> load data local inpath '/opt/module/hive/datas/dept_20200401.log' into table
dept_partition2 partition(day='20200401',hour='15');
Consultar datos
hive (default)> select * from dept_partition2 where day='20200401' and hour='15';
3 Ajuste dinámico de partición
En una base de datos relacional, al insertar datos en una tabla particionada, la base de datos insertará automáticamente los datos en la partición correspondiente según el valor del campo de partición. Hive también proporciona un mecanismo similar, llamado Partición dinámica (Partición dinámica), pero, Para usar la partición dinámica de Hive, debe configurarla en consecuencia.
1 ) Abra la configuración del parámetro de partición dinámica
(1) Abra la función de partición dinámica (predeterminado verdadero, abierto)
hive.exec.dynamic.partition=true
(2) Establecer en modo no estricto (el modo de partición dinámica, el valor predeterminado es estricto, lo que significa que al menos una partición debe designarse como partición estática, y el modo no estricto significa que todos los campos de partición pueden usar particiones dinámicas .)
hive.exec.dynamic.partition.mode=nonstrict
(3) En todos los nodos que realizan RM, ¿cuántas particiones dinámicas se pueden crear como máximo? 1000 por defecto
hive.exec.max.dynamic.partitions=1000
(4) En cada nodo que realiza MR , cuántas particiones dinámicas se pueden crear como máximo. Este parámetro debe configurarse de acuerdo con los datos reales. Por ejemplo, si los datos de origen contienen datos de un año, es decir, el campo de día tiene 365 valores, entonces este parámetro debe configurarse para que sea mayor que 365. Si se usa el valor predeterminado de 100, se informará un error.
hive.exec.max.dynamic.partitions.pernode=100
(5) El número máximo de archivos HDFS que se pueden crear en todo el trabajo de MR. Por defecto 100000
hive.exec.max.created.files=100000
(6) Si se lanza una excepción cuando se genera una partición vacía. Generalmente no es necesario configurarlo. Falso predeterminado
hive.error.on.empty.partition=false
2 ) Práctica de casos
Requisito: Inserte los datos de la tabla dept en la partición correspondiente de la tabla de destino dept_partition según la región (campo loc).
(1) Cree la tabla de particiones de destino
hive (default)> create table dept_partition_dy(id int, name string) partitioned by (loc int) row format delimited fields terminated by '\t';
(2) Configurar partición dinámica
set hive.exec.dynamic.partition.mode = nonstrict;
hive (default)> insert into table dept_partition_dy partition(loc) select deptno, dname, loc from dept;
(3) Ver la situación de la partición de la tabla de particiones de destino
hive (default)> show partitions dept_partition;
Pensando: ¿Cómo coincide la tabla de particiones de destino con el campo de partición?