La gran lengua vernácula explica los puntos de conocimiento de la colmena de big data, Lao Liu está realmente atento (3)

Inserte la descripción de la imagen aquí

Prólogo: Lao Liu no se atreve a decir qué tan buena es su escritura, pero sí se atreve a asegurarse de explicar el contenido de su reseña en gran lengua vernácula tanto como sea posible, ¡y se niega a usar métodos mecánicos en los materiales para tener su propia comprensión!

1. Puntos de conocimiento de la colmena (3)

A partir de este artículo, decidí hacer algunos cambios. Lao Liu compartió principalmente los puntos de conocimiento clave de cada módulo de big data en su blog y explicó estos contenidos clave en detalle. Los puntos de conocimiento completos de cada módulo se comparten con el público cuenta: Trabajador Lao Liu. Cuando tenga la oportunidad, use el método de video para analizar y resumir los puntos de conocimiento compartidos cada vez, y luego publique un artículo para obtener una explicación detallada.

Inserte la descripción de la imagen aquí
Ahora comencemos con el texto principal, es la misma oración. Aunque estas son funciones de uso común de Hive, a muchas personas no les importa, pero encontraremos muchas necesidades comerciales para usar estas funciones en el desarrollo diario. Al menos debemos estar familiarizados con algunas funciones de uso común.

El despiece, la fila a la columna y la columna a la fila de este artículo son los puntos clave, y necesita dominar sus ejemplos. Debido a la preferencia de Hive por las operaciones prácticas, Lao Liu solo explicó estos puntos clave de conocimiento en detalle.

2. Vista lateral y explosión en colmena.

¿Por qué se usa explotar?

En el proceso de desarrollo real, se encontrarán muchas estructuras complejas de matriz o mapa. Dividiremos estas estructuras complejas de una columna en varias filas de acuerdo con algunos requisitos comerciales. En este momento, debemos usar explotar. Quizás todavía no lo entiendes muy bien. Ahora solo damos un ejemplo para ilustrar este exploit. Asegúrate de practicar con Lao Liu. Si no puedes practicar, ¡es como no aprender nada!

需求:现在有数据格式如下
zhangsan    child1,child2,child3,child4 k1:v1,k2:v2
lisi    child5,child6,child7,child8  k3:v3,k4:v4

字段之间使用\t分割,需求将所有的child进行拆开成为一列

+----------+--+
| mychild  |
+----------+--+
| child1   |
| child2   |
| child3   |
| child4   |
| child5   |
| child6   |
| child7   |
| child8   |
+----------+--+

将map的key和value也进行拆开,成为如下结果

+-----------+-------------+--+
| mymapkey  | mymapvalue  |
+-----------+-------------+--+
| k1        | v1          |
| k2        | v2          |
| k3        | v3          |
| k4        | v4          |
+-----------+-------------+--+

El primer paso: primero creamos una base de datos y usamos la base de datos recién creada

create database hive_explode;
use hive_explode;

Paso 2: Después de crear la base de datos, debemos comenzar a crear la tabla de colmena.

createtable hive_explode.t3(name string,children array<string>,address Map<string,string>) 
row format delimited fields terminated by '\t'  
collection items terminated by ','  
map keys terminated by ':' stored as textFile;

Atención, todos deben mirar con atención. Debido a nuestras necesidades, necesitamos crear el nombre, que está en forma de cadena, pero el niño está en forma de matriz y la dirección está en forma de mapa. Aunque Lao Liu no habló de eso , este es realmente importante. De acuerdo con los separadores en estas funciones compuestas, nuestro código dividido se escribe así:

La forma de espacio habitual es

row format delimited fields terminated by '\t' 

La forma dividida en la matriz es

collection items terminated by ',' 

La forma dividida en el mapa es

map keys terminated by ':' 

¡Recuerde la diferencia aquí!

Paso 3: cargar datos

cd  /kkb/install/hivedatas/

vim maparray
数据内容格式如下
zhangsan    child1,child2,child3,child4 k1:v1,k2:v2
lisi    child5,child6,child7,child8 k3:v3,k4:v4

Luego use hive para cargar los datos

load data local inpath '/kkb/install/hivedatas/maparray' into table hive_explode.t3;

Después de importar los datos, podemos ver la situación en la tabla.

Inserte la descripción de la imagen aquí
Paso 4: antes de importar los datos a la tabla, el siguiente paso es dividir los datos

Divida a todos los niños en una columna

SELECT explode(children) AS myChild FROM hive_explode.t3;

Inserte la descripción de la imagen aquí
Luego divide la clave y el valor del mapa

SELECT explode(address) AS (myMapKey, myMapValue) FROM hive_explode.t3;

Inserte la descripción de la imagen aquí
Dado que la vista lateral se usa a menudo en fila a columna y columna a fila, no hablaremos solo de la vista lateral.

3. Fila a columna

En primer lugar, lo que quiero decir sobre la fila a columna y la columna a fila es que son muy, muy importantes y encontrarán muchas necesidades para la conversión de columnas.

Sin embargo, fila a columna y columna a fila no convierten una fila en una columna y una columna en una fila. Muchos materiales tienen sus propias opiniones sobre fila a columna y columna a fila, y son a menudo lo contrario.

Lao Liu vino de Shang Silicon Valley. Ignoremos este concepto y descubramos su uso.

Fila a columna: Significa cambiar los datos de varias columnas en una sola columna.

Use un ejemplo para demostrar la fila a la columna.

Inserte la descripción de la imagen aquí
Luego se trata de clasificar a las personas con la misma constelación y tipo de sangre juntos, y los resultados son los siguientes:

射手座,A            老王|冰冰
白羊座,A            孙悟空|猪八戒
白羊座,B            宋宋

Esto también involucra la función concat, hablemos primero de la función de conexión:

concat (): devuelve el resultado de la cadena de entrada concatenada, admite cualquier número de cadenas de entrada;

concat_ws (): Esto es para agregar un separador entre las cadenas conectadas;

collect_set (): Desduplica un campo y genera un campo de tipo de matriz.

A continuación, todo lo que tenemos que hacer es crear una tabla para importar los datos.

1. Cree un archivo, preste atención a los datos usando \ t para dividir

cd /kkb/install/hivedatas
vim constellation.txt

孙悟空    白羊座 A
老王    射手座 A
宋宋    白羊座 B       
猪八戒    白羊座 A
凤姐    射手座 A

2. Cree una tabla de colmena y cargue datos

create table person_info(name string,constellation string,blood_type string)  
row format delimited fields terminated by "\t";

3. Cargar datos

load data local inpath '/kkb/install/hivedatas/constellation.txt' into table person_info;

Puede consultar la situación después de importar la tabla, seleccione * de person_info.

Inserte la descripción de la imagen aquí
4. Consultar datos

Tenga en cuenta que, según nuestras necesidades, el resultado de la consulta requiere la operación concat_ws.

select t1.base, concat_ws('|', collect_set(t1.name)) name from (select name, concat(constellation, "," , blood_type) base from person_info) t1 group by t1.base;

Lao Liu explicó que dado que la constelación y el tipo de sangre están conectados por una coma, deberíamos escribir el código así

concat(constellation, "," , blood_type)

El siguiente paso es averiguar a todas las personas según la condición de que la constelación sea igual al tipo de sangre.

select name, concat(constellation, "," , blood_type) base from person_info

Nombre esta tabla temporal t1, y luego convierta varias filas en una fila de acuerdo con las necesidades de las personas a las que se consulta. Dado que los nombres están conectados por |, deberíamos escribir el código así.

concat_ws('|', collect_set(t1.name))

El resultado final de la consulta es así

select t1.base, concat_ws('|', collect_set(t1.name)) name from t1 group by  t1.base;

Inserte la descripción de la imagen aquí

4. De columna a fila

De columna a fila, están involucradas dos funciones muy importantes: explosión y vista lateral.

explotar: divide la estructura compleja de matriz o mapa en una columna de colmena en varias filas.

Vista lateral: generalmente se utiliza para dividir una fila de datos en varias filas de datos, sobre esta base, los datos divididos se pueden agregar.

por ejemplo:

El contenido de los datos es el siguiente y los campos se dividen entre \ t

cd /kkb/install/hivedatas

vim movie.txt
《疑犯追踪》    悬疑,动作,科幻,剧情
《Lie to me》    悬疑,警匪,动作,心理,剧情
《战狼2》    战争,动作,灾难

Expanda los datos de la matriz en la clasificación de películas y los resultados son los siguientes:

《疑犯追踪》    悬疑
《疑犯追踪》    动作
《疑犯追踪》    科幻
《疑犯追踪》    剧情
《Lie to me》    悬疑
《Lie to me》    警匪
《Lie to me》    动作
《Lie to me》    心理
《Lie to me》    剧情
《战狼2》    战争
《战狼2》    动作
《战狼2》    灾难

Esta es una conversión típica de una línea a varias líneas, utilizando una combinación de vista lateral y explosión.

El primer paso que debemos hacer es crear una tabla basada en las características de la tabla y las características de los datos en la tabla, la categoría debe crearse como un tipo de matriz.

create table movie_info(movie string, category array<string>) 
row format delimited fields terminated by "\t" 
collection items terminated by ",";

Lo siguiente es cargar los datos

load data local inpath "/kkb/install/hivedatas/movie.txt" into table movie_info;

Finalmente, consulte la tabla según las necesidades, dado que la categoría es del tipo arreglo, ahora necesita expandir la categoría con la vista lateral, y luego puede consultar los datos.

select movie, category_name  from  movie_info 
lateral view explode(category) table_tmp as category_name;

Entre ellos, table_tmp es el nombre de la tabla y category_name es el nombre de la columna.

Inserte la descripción de la imagen aquí

5. Resumen

Lao Liu habló principalmente de fila a columna y de columna a fila, así como de las dos funciones de explosión y vista lateral, y las demostró con dos casos respectivamente. Todos deben practicar con los casos. Simplemente no practique. Bai Xue.

Finalmente, el punto de conocimiento completo de la colmena (3) está en la cuenta pública: Lao Liu, que trabaja duro. Si siente que algo está mal, puede comunicarse con Lao Liu para comunicarse. Espero ser útil para los estudiantes interesados ​​en el desarrollo de big data y espero recibir su orientación.

Si crees que la escritura es buena, ¡dale un pulgar hacia arriba a Lao Liu!

Supongo que te gusta

Origin blog.csdn.net/qq_36780184/article/details/111410134
Recomendado
Clasificación