El combate real de la tabla de particiones en el modo de diseño Hive

Tabla de contenido

0 tabla de particiones

1 Operación básica de la tabla de particiones

2 partición secundaria

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

hive (default)> create table dept_partition2(

               deptno int, dname string, loc string

               )

               partitioned by (day string, hour string)

               row format delimited fields terminated by '\t';

 

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?

Supongo que te gusta

Origin blog.csdn.net/godlovedaniel/article/details/110775274
Recomendado
Clasificación