ETL de Hive: carga de JSON, XML, ejemplos de datos de texto

⚡ Resumen inteligente

Hive ETL convierte archivos de texto, XML y JSON en tablas consultables cargándolos en Hive y extracal procesar valores con xpath() y get_json_object(), se proporciona a los analistas una interfaz SQL sobre datos semiestructurados de Hadoop.

  • 🧱 Cargas estructuradas: Un archivo de texto delimitado se convierte en una tabla con ROW FORMAT DELIMITED más FIELDS TERMINATED BY, luego LOAD DATA LOCAL INPATH.
  • 🏷️ XML extracción: Cada documento XML se almacena en una única columna de tipo STRING, y la función xpath() extrae los valores de las etiquetas con nombre.
  • 🔑 JSON extracción: La función get_json_object() lee una expresión JSONPath por llamada, por lo que cada campo necesita su propia llamada.
  • 🪜 Cargas útiles anidadas: Los archivos JSON complejos se cargan exactamente de la misma manera, y la jerarquía se recorre mediante expresiones JSONPath con puntos.
  • 📍 Reglas de ruta: La palabra clave LOCAL lee desde el sistema de archivos de Linux, mientras que omitirla resuelve la ruta en HDFS.
  • 🎯 Donde encaja: Hive se adapta mejor al almacenamiento por lotes y a los procesos ETL semiestructurados que a las búsquedas de registros de baja latencia.

Hive ETL: Carga de datos JSON, XML y de texto

Hive como herramienta ETL y de almacenamiento de datos sobre la plataforma Hadoop El ecosistema proporciona funcionalidades como modelado de datos, manipulación de datos, procesamiento de datos y consulta de datos.tracLa creación de tablas en Hive implica la creación de tablas en Hive y la carga de datos estructurados y semiestructurados, así como la consulta de datos en función de los requisitos.

Para el procesamiento por lotes, vamos a escribir scripts personalizados definidos utilizando scripts map y reduce personalizados en un lenguaje de scripting. Esto proporciona una SQL entorno similar y soporte para consultas sencillas.

Trabajar con datos estructurados usando Hive

Los datos estructurados significan que los datos están en el formato adecuado de filas y columnas. Esto es más como RDBMS datos con filas y columnas adecuadas.

Aquí vamos a cargar datos estructurados presentes en archivos de texto en Hive.

Paso 1) En este paso, estamos creando la tabla "employees_guru" con nombres de columnas como Id., Nombre, Edad, Dirección, Salario y Departamento de los empleados con tipos de datos.

Creación de la tabla employees_guru y carga del archivo Employees.txt en Hive.

En la captura de pantalla anterior, podemos observar lo siguiente:

  1. Creación de tabla “empleados_guru”
  2. Cargando datos del archivo Employees.txt en la tabla “employees_guru”.

Paso 2) En este paso, mostramos el contenido almacenado en esta tabla mediante el comando "Seleccionar". Podemos observar el contenido de la tabla en la siguiente captura de pantalla.

Salida de la consulta Select que muestra las filas de la tabla Hive employees_guru

Fragmento de código de ejemplo

Consultas a realizar

1) Create table employees_guru(Id INT, Name STRING, Age INT, Address STRING, Salary FLOAT, Department STRING)
> Row format delimited
> Fields terminated by ',';
2) load data local inpath '/home/hduser/Employees.txt' into TABLE employees_guru;
3) select * from employees_guru;

Trabajar con datos semiestructurados usando Hive (XML, JSON)

Hive realiza funcionalidades ETL en el ecosistema Hadoop actuando como un Herramienta ETLPuede resultar difícil implementar MapReduce en algunos tipos de aplicaciones; Hive puede reducir esa complejidad y proporciona la mejor solución para aplicaciones de TI en el sector del almacenamiento de datos.

Los datos semiestructurados como XML y JSON se pueden procesar con menos complejidad usando Hive. Primero veremos cómo podemos usar Hive para XML.

XML a tabla de Hive

En esto, cargaremos datos XML en tablas de Hive y recuperaremos los valores almacenados dentro de las etiquetas XML.

Paso 1) Creación de la tabla “xmlsample_guru” con una columna str de tipo de datos string.

Creación de la tabla xmlsample_guru y carga del archivo test.xml en Hive.

En la captura de pantalla anterior, podemos observar lo siguiente:

  1. Creación de tabla “xmlsample_guru”
  2. Cargando datos del archivo test.xml en la tabla “xmlsample_guru”.

Paso 2) Usando el XPath Mediante el método xpath(), podremos obtener los datos almacenados dentro de las etiquetas XML.

Consulta xpath() que devuelve los valores ename y esal de la columna XML.

En la captura de pantalla anterior, podemos observar lo siguiente:

  1. Utilizando el método xpath() estamos obteniendo los valores almacenados en /emp/esal/ y /emp/ename/.
  2. Valores presentes dentro de las etiquetas XML. En este paso, mostramos los valores reales almacenados bajo las etiquetas XML en la tabla “xmlsample_guru”.

Tenga en cuenta que xpath() devuelve una matriz de cadenas; xpath_string(), xpath_int() y xpath_double() devuelven un único valor tipado.

Paso 3) En este paso, obtendremos y mostraremos el XML sin procesar de la tabla “xmlsample_guru”.

Documentos XML sin procesar almacenados en la columna str de xmlsample_guru

En la captura de pantalla anterior, podemos observar lo siguiente:

  • Los datos XML reales que se muestran con etiquetas.
  • Si observamos una sola etiqueta, vemos que tiene "emp" como etiqueta principal y "ename" y "esal" como etiquetas secundarias.

Code retazo:

Consultas a realizar

1) create table xmlsample_guru(str string);                                                                                                   2) load data local inpath '/home/hduser/test.xml' overwrite  into table xmlsample_guru;
3) select xpath(str,'emp/ename/text()'), xpath(str,'emp/esal/text()') from xmlsample_guru;

JSON (JavaNotación de objetos de script)

Los datos de redes sociales y sitios web suelen almacenarse en formato JSON. Al intentar obtener datos de servidores en línea, estos devuelven archivos JSON. Utilizando Hive como almacén de datos, podemos cargar datos JSON en tablas de Hive mediante la creación de esquemas.

JSON a tabla de Hive

En este proceso, vamos a cargar datos JSON en tablas de Hive y recuperaremos los valores almacenados en el esquema JSON.

Paso 1) En este paso, vamos a crear una tabla JSON llamada “json_guru”. Una vez creada, cargamos y mostramos el contenido del esquema.

Creación de json_guru, carga de test.json y visualización del esquema JSON.

En la captura de pantalla anterior, podemos observar lo siguiente:

  1. Creación de tabla “json_guru”
  2. Cargando datos de test.json en la tabla “json_guru”.
  3. Visualización del esquema real del archivo JSON almacenado en la tabla json_guru.

Paso 2) Utilizando el método get_json_object() podemos obtener los valores de datos almacenados en la jerarquía JSON.

La función get_json_object() genera una lista de códigos de barras, nombres de usuario y salarios de json_guru.

En la captura de pantalla anterior, podemos observar lo siguiente:

  1. Usando get_json_object(str,'$.ecode') puede obtener los valores de ecode de la tabla json_guru. De manera similar, usando get_json_object(str,'$.ename') y get_json_object(str,'$.sal') obtendrá los valores de ename y sal de la tabla json_guru.
  2. Valores almacenados dentro de la jerarquía JSON en json_guru

Debido a que get_json_object() analiza el documento una vez por llamada, json_tuple() es más económico cuando se necesitan varias claves, y un JSON SerDe asigna el documento a columnas tipificadas en el momento de la carga.

Code retazo

Consultas a realizar

1) create table json_guru(str string);
2) load data inpath 'home/hduser/test.json' into table json_guru;
3) select * from json_guru;
4) select get_json_object(str,'$.ecode') as ecode, get_json_object(str,'$.ename') as ename ,get_json_object(str,'$.sal') as salary from json_guru;

JSON complejo a tabla de Hive

En este proceso, vamos a cargar datos JSON complejos en tablas de Hive y recuperaremos los valores almacenados en el esquema JSON.

Paso 1) Creando complexjson_guru con un campo de una sola columna.

Creando complexjson_guru y cargando emp.json en la tabla Hive.

En la captura de pantalla anterior, podemos observar lo siguiente:

  1. Creación de la tabla complexjson_guru con un único campo de columna de tipo de datos cadena.
  2. Cargando datos en complexjson_guru desde el archivo JSON complejo emp.json

Paso 2) Mediante el uso de get_json_object podemos recuperar el contenido real que está almacenado dentro de la jerarquía de archivos JSON.

En la siguiente captura de pantalla, podemos ver el resultado de los datos almacenados en complexjson_guru.

Extracted ecode y valores de clave anidados del documento JSON complejo

Paso 3) En este paso, mediante el comando “Select” podemos ver los datos JSON complejos almacenados en la tabla “complexjson_guru”.

Seleccione la salida que muestra filas JSON complejas sin procesar en complexjson_guru

Fragmento de código de ejemplo

Consultas a realizar

1) create table complexjson_guru(json string);
2) load data inpath 'home/hduser/emp.json' into table complexjson_guru;
3) select get_json_object(json,'$.ecode') as ecode ,get_json_object(json,'$.b') as code, get_json_object(json,'$.c') from complexjson_guru;
4) select * from complexjson_guru;

Hive en proyectos en tiempo real: cuándo y dónde usarlo

Cuándo y dónde usar Hive en el ecosistema Hadoop:

Cuando

  • Al trabajar con funciones estadísticas fuertes y potentes en el ecosistema Hadoop
  • Al trabajar con procesamiento de datos estructurados y semiestructurados
  • Como herramienta de almacenamiento de datos con Hadoop
  • Ingesta de datos en tiempo real con HBase, donde se puede utilizar Hive.

Donde

  • Para facilitar su uso como herramienta ETL y de almacenamiento de datos.
  • Proporcionar un entorno de tipo SQL y realizar consultas como SQL utilizando HiveQL.
  • Para utilizar e implementar scripts de mapeo y reducción personalizados según los requisitos específicos del cliente.

Preguntas Frecuentes

LOCAL copia el archivo desde el sistema de archivos de la máquina cliente. Sin LOCAL, Hive trata la ruta como HDFS y mueve el archivo, por lo que una ruta relativa se resuelve en el directorio principal HDFS del usuario.

La función json_tuple() suele ser más rápida: analiza el documento una sola vez y devuelve varias claves juntas, mientras que get_json_object() vuelve a analizar la cadena para cada campo. Utilice get_json_object() para un solo valor.

No. Una sola columna STRING más las funciones JSON funcionan. Un SerDe como org.apache.hive.hcatalog.data.JsonSerDe es adecuado para consultas de producción repetidas, mapeoping Las teclas se insertan en las columnas escritas una sola vez, en lugar de en cada lectura.

Normalmente se trata de un archivo con formato legible: Hive espera un documento JSON completo por línea, por lo que un documento dividido en varias líneas genera filas no válidas. Una clave mal escrita o un error de mayúsculas/minúsculas en JSONPath produce el mismo efecto.

La función xpath() siempre devuelve una matriz de cadenas. En su lugar, utilice una variante tipada: xpath_string(), xpath_int(), xpath_long(), xpath_float(), xpath_double() o xpath_boolean(). Cada una devuelve un escalar de ese tipo.

La opción externa es más segura para los datos de aterrizaje sin procesar, debido a la caída.ping La tabla deja los archivos en su lugar. Una tabla administrada elimina su directorio de datos al eliminarla (DROP), lo cual es conveniente para tablas temporales, pero perjudicial para archivos compartidos.

Las herramientas de aprendizaje automático analizan archivos de muestra para inferir tipos, identificar claves dispersas y proponer columnas de partición a partir de patrones de consulta. Considere el resultado como un borrador: los tipos y las particiones aún deben verificarse con volúmenes reales.

Genera sentencias CREATE TABLE, comandos LOAD DATA y expresiones JSONPath a partir de un registro de ejemplo pegado en el editor. No puede acceder al clúster, por lo que es necesario verificar primero los nombres, las rutas y la ortografía de las claves.

Resumir este post con: