¿Qué son Apache Hive y HiveQL en Azure HDInsight?What is Apache Hive and HiveQL on Azure HDInsight?

Apache Hive es un sistema de almacenamiento de datos para Apache Hadoop.Apache Hive is a data warehouse system for Apache Hadoop. Hive hace posibles el resumen de los datos, las consultas y el análisis de datos.Hive enables data summarization, querying, and analysis of data. Las consultas de Hive se escriben en HiveQL, que es un lenguaje de consulta similar a SQL.Hive queries are written in HiveQL, which is a query language similar to SQL.

Hive le permite proyectar la estructura del proyecto en datos que en gran medida no están estructurados.Hive allows you to project structure on largely unstructured data. Después de definir la estructura, puede usar HiveQL para consultar los datos sin conocimientos de Java ni MapReduce.After you define the structure, you can use HiveQL to query the data without knowledge of Java or MapReduce.

HDInsight proporciona varios tipos de clúster, que están optimizados para cargas de trabajo específicas.HDInsight provides several cluster types, which are tuned for specific workloads. Se suelen usar los siguientes tipos de clúster para consultas de Hive:The following cluster types are most often used for Hive queries:

Tipo de clústerCluster type DescripciónDescription
Interactive QueryInteractive Query un clúster de Hadoop que proporciona funcionalidad de procesamiento analítico de baja latencia (LLAP) para mejorar los tiempos de respuesta de las consultas interactivas.A Hadoop cluster that provides Low Latency Analytical Processing (LLAP) functionality to improve response times for interactive queries. Para más información, vea el documento Uso de Hive interactivo con HDInsight (versión preliminar).For more information, see the Start with Interactive Query in HDInsight document.
HadoopHadoop un clúster de Hadoop que está optimizado para cargas de trabajo de procesamiento por lotes.A Hadoop cluster that is tuned for batch processing workloads. Para más información, consulte el documento Introducción a Apache Hadoop en HDInsight.For more information, see the Start with Apache Hadoop in HDInsight document.
SparkSpark Apache Spark tiene funcionalidad integrada para trabajar con Hive.Apache Spark has built-in functionality for working with Hive. Para más información, consulte el documento Introducción a Apache Spark en HDInsight.For more information, see the Start with Apache Spark on HDInsight document.
HBaseHBase se puede usar HiveQL para consultar datos almacenados en Apache HBase.HiveQL can be used to query data stored in Apache HBase. Para más información, consulte el documento Introducción a Apache HBase en HDInsight.For more information, see the Start with Apache HBase on HDInsight document.

Uso de HiveHow to use Hive

Utilice la siguiente tabla para descubrir distintas formas de usar Hive con HDInsight:Use the following table to discover the different ways to use Hive with HDInsight:

Use este método si desea…Use this method if you want... ... consultas interactivas...interactive queries ...procesamiento por lotes...batch processing ...desde este sistema operativo de cliente...from this client operating system
Herramientas de HDInsight para Visual Studio CodeHDInsight tools for Visual Studio Code Linux, Unix, Mac OS X o WindowsLinux, Unix, Mac OS X, or Windows
Herramientas de HDInsight para Visual StudioHDInsight tools for Visual Studio WindowsWindows
Vista de HiveHive View Cualquiera (en función del explorador)Any (browser based)
Cliente BeelineBeeline client Linux, Unix, Mac OS X o WindowsLinux, Unix, Mac OS X, or Windows
REST APIREST API   Linux, Unix, Mac OS X o WindowsLinux, Unix, Mac OS X, or Windows
Windows PowerShellWindows PowerShell   WindowsWindows

Referencia del lenguaje HiveQLHiveQL language reference

La referencia del lenguaje de HiveQL está disponible en el manual del lenguaje.HiveQL language reference is available in the language manual.

Hive y estructura de datosHive and data structure

Hive entiende cómo trabajar con los datos estructurados y semiestructurados.Hive understands how to work with structured and semi-structured data. Por ejemplo, archivos de texto donde los campos están delimitados por caracteres específicos.For example, text files where the fields are delimited by specific characters. La siguiente instrucción HiveQL crea una tabla de datos delimitados por espacios:The following HiveQL statement creates a table over space-delimited data:

CREATE EXTERNAL TABLE log4jLogs (
    t1 string,
    t2 string,
    t3 string,
    t4 string,
    t5 string,
    t6 string,
    t7 string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
STORED AS TEXTFILE LOCATION '/example/data/';

Hive también admite serializador/deserializadores (SerDe) personalizados para datos estructurados irregularmente o complejos.Hive also supports custom serializer/deserializers (SerDe) for complex or irregularly structured data. Para obtener más información, consulte el documento Uso de un SerDe de JSON personalizado con HDInsight.For more information, see the How to use a custom JSON SerDe with HDInsight document.

Para obtener más información sobre formatos de archivo compatibles con Hive, consulte el manual del lenguaje (https://cwiki.apache.org/confluence/display/Hive/LanguageManual)For more information on file formats supported by Hive, see the Language manual (https://cwiki.apache.org/confluence/display/Hive/LanguageManual)

Tablas internas frente a tablas externas de Hive.Hive internal tables vs external tables

Hay dos tipos de tablas que puede crear con Hive:There are two types of tables that you can create with Hive:

  • Internas: los datos se almacenan en el almacenamiento de datos de Hive.Internal: Data is stored in the Hive data warehouse. El almacenamiento de datos se encuentra en /hive/warehouse/ en el almacenamiento predeterminado para el clúster.The data warehouse is located at /hive/warehouse/ on the default storage for the cluster.

    Use las tablas internas cuando se cumpla alguna de las condiciones siguientes:Use internal tables when one of the following conditions apply:

    • Los datos sean temporales.Data is temporary.
    • Desee que Hive administre el ciclo de vida de la tabla y los datos.You want Hive to manage the lifecycle of the table and data.
  • Externas: los datos se almacenan fuera del almacenamiento de datos.External: Data is stored outside the data warehouse. Los datos se pueden almacenar en cualquier almacenamiento accesible desde el clúster.The data can be stored on any storage accessible by the cluster.

    Use las tablas externas cuando se cumpla alguna de las condiciones siguientes:Use external tables when one of the following conditions apply:

    • Los datos también se utilicen fuera de Hive.The data is also used outside of Hive. Por ejemplo, los archivos de datos se actualizan en otro proceso (que no bloquea los archivos).For example, the data files are updated by another process (that doesn't lock the files.)
    • Los datos deban permanecer en la ubicación subyacente, incluso después de eliminarse la tabla.Data needs to remain in the underlying location, even after dropping the table.
    • Necesite una ubicación personalizada, como una cuenta de almacenamiento no predeterminada.You need a custom location, such as a non-default storage account.
    • Un programa distinto de Hive administre el formato de datos, la ubicación, etc.A program other than hive manages the data format, location, and so on.

Para más información, consulte la entrada de blog Hive Internal and External Tables Intro (Introducción a las tablas internas y externas de Hive).For more information, see the Hive Internal and External Tables Intro blog post.

Funciones definidas por el usuario (UDF)User-defined functions (UDF)

Hive también puede extenderse a través de funciones definidas por el usuario (UDF) .Hive can also be extended through user-defined functions (UDF). Una UDF le permite implementar la funcionalidad o la lógica que no se modela con facilidad en HiveQL.A UDF allows you to implement functionality or logic that isn't easily modeled in HiveQL. Para obtener un ejemplo del uso de UDF con Hive, vea los siguientes documentos:For an example of using UDFs with Hive, see the following documents:

Datos de ejemploExample data

Hive en HDInsight tiene ya cargada una tabla interna denominada hivesampletable.Hive on HDInsight comes pre-loaded with an internal table named hivesampletable. Además, HDInsight proporciona conjuntos de datos de ejemplo que se pueden usar con Hive.HDInsight also provides example data sets that can be used with Hive. Estos conjuntos de datos se almacenan en los directorios /example/data y /HdiSamples.These data sets are stored in the /example/data and /HdiSamples directories. Estos directorios existen en el almacenamiento predeterminado del clúster.These directories exist in the default storage for your cluster.

Ejemplo de consulta de HiveExample Hive query

Las siguientes instrucciones de HiveQL proyectan columnas sobre el archivo /example/data/sample.log:The following HiveQL statements project columns onto the /example/data/sample.log file:

DROP TABLE log4jLogs;
CREATE EXTERNAL TABLE log4jLogs (
    t1 string,
    t2 string,
    t3 string,
    t4 string,
    t5 string,
    t6 string,
    t7 string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
STORED AS TEXTFILE LOCATION '/example/data/';
SELECT t4 AS sev, COUNT(*) AS count FROM log4jLogs
    WHERE t4 = '[ERROR]' AND INPUT__FILE__NAME LIKE '%.log'
    GROUP BY t4;

En el ejemplo anterior, las instrucciones de HiveQL realizan las acciones siguientes:In the previous example, the HiveQL statements perform the following actions:

.Statement DescripciónDescription
DROP TABLEDROP TABLE si la tabla ya existe, la elimina.If the table already exists, delete it.
CREATE EXTERNAL TABLECREATE EXTERNAL TABLE crea una nueva tabla externa en Hive.Creates a new external table in Hive. Las tablas externas solo almacenan la definición de Tabla en Hive.External tables only store the table definition in Hive. Los datos permanecen en la ubicación y formato originales.The data is left in the original location and in the original format.
ROW FORMATROW FORMAT indica a Hive cómo se da formato a los datos.Tells Hive how the data is formatted. En este caso, los campos de cada registro se separan mediante un espacio.In this case, the fields in each log are separated by a space.
STORED AS TEXTFILE LOCATIONSTORED AS TEXTFILE LOCATION indica a Hive dónde se almacenan los datos (el directorio example/data) y que se almacenen como texto.Tells Hive where the data is stored (the example/data directory) and that it's stored as text. Los datos pueden estar en un archivo o distribuidos en varios archivos dentro del directorio.The data can be in one file or spread across multiple files within the directory.
SELECTSELECT selecciona el número total de filas donde la columna t4 contiene el valor [ERROR] .Selects a count of all rows where the column t4 contains the value [ERROR]. Esta instrucción devuelve un valor de 3 porque hay tres filas que contienen este valor.This statement returns a value of 3 because there are three rows that contain this value.
INPUT__FILE__NAME LIKE '%.log'INPUT__FILE__NAME LIKE '%.log' Hive intenta aplicar el esquema a todos los archivos en el directorio.Hive attempts to apply the schema to all files in the directory. En este caso, el directorio contiene archivos que no coinciden con el esquema.In this case, the directory contains files that don't match the schema. Para evitar que haya datos inservibles en los resultados, esta instrucción indica a Hive que solo se deben devolver datos de archivos que terminen en .log.To prevent garbage data in the results, this statement tells Hive that we should only return data from files ending in .log.

Nota

Las tablas externas se deben utilizar cuando se espera que un origen externo actualice los datos subyacentes.External tables should be used when you expect the underlying data to be updated by an external source. Por ejemplo, un proceso de carga de datos automatizado o una operación de MapReduce.For example, an automated data upload process, or MapReduce operation.

La eliminación de una tabla externa no elimina los datos, solamente la definición de tabla.Dropping an external table does not delete the data, it only deletes the table definition.

Para crear una tabla interna en lugar de una externa, use el siguiente HiveQL:To create an internal table instead of external, use the following HiveQL:

CREATE TABLE IF NOT EXISTS errorLogs (
    t1 string,
    t2 string,
    t3 string,
    t4 string,
    t5 string,
    t6 string,
    t7 string)
STORED AS ORC;
INSERT OVERWRITE TABLE errorLogs
SELECT t1, t2, t3, t4, t5, t6, t7 
    FROM log4jLogs WHERE t4 = '[ERROR]';

Estas instrucciones realizan las acciones siguientes:These statements perform the following actions:

.Statement DescripciónDescription
CREATE TABLE IF NOT EXISTSCREATE TABLE IF NOT EXISTS Si la tabla no existe, créela.If the table doesn't exist, create it. Dado que no se utiliza la palabra clave EXTERNAL, esta instrucción crea una tabla interna.Because the EXTERNAL keyword isn't used, this statement creates an internal table. La tabla se almacena en el almacenamiento de datos de Hive y Hive la administra por completo.The table is stored in the Hive data warehouse and is managed completely by Hive.
STORED AS ORCSTORED AS ORC almacena los datos en el formato de columnas de filas optimizadas (ORC, Optimized Row Columnar).Stores the data in Optimized Row Columnar (ORC) format. ORC es un formato altamente optimizado y eficiente para almacenar datos de Hive.ORC is a highly optimized and efficient format for storing Hive data.
INSERT OVERWRITE... SELECTINSERT OVERWRITE ... SELECT selecciona filas de la tabla log4jLogs que contiene [ERROR] y luego inserta los datos en la tabla errorLogs.Selects rows from the log4jLogs table that contains [ERROR], and then inserts the data into the errorLogs table.

Nota

A diferencia de las tablas externas, la eliminación de una tabla interna también eliminará los datos subyacentes.Unlike external tables, dropping an internal table also deletes the underlying data.

Mejora del rendimiento de las consultas de HiveImprove Hive query performance

Apache TezApache Tez

Apache Tez es un marco que permite que aplicaciones con uso intensivo de datos, como Hive, se ejecuten con mucha más eficacia a escala.Apache Tez is a framework that allows data intensive applications, such as Hive, to run much more efficiently at scale. Tez está habilitado de manera predeterminada.Tez is enabled by default. Los documentos de diseño de Apache Hive en Tez incluyen detalles sobre las opciones de implementación y las configuraciones de ajuste.The Apache Hive on Tez design documents contains details about the implementation choices and tuning configurations.

Procesamiento analítico de baja latencia (LLAP)Low Latency Analytical Processing (LLAP)

LLAP (conocido a veces como Larga vida y procesamiento) es una característica nueva de Hive 2.0 que permite el almacenamiento en memoria caché de las consultas.LLAP (sometimes known as Live Long and Process) is a new feature in Hive 2.0 that allows in-memory caching of queries. LLAP hace que las consultas de Hive sean mucho más rápidas, hasta 26 más que Hive 1.x en algunos casos.LLAP makes Hive queries much faster, up to 26x faster than Hive 1.x in some cases.

HDInsight proporciona LLAP en el tipo de clúster Interactive Query.HDInsight provides LLAP in the Interactive Query cluster type. Para más información, vea el documento Uso de Hive interactivo con HDInsight (versión preliminar).For more information, see the Start with Interactive Query document.

Programación de consultas de HiveScheduling Hive queries

Hay varios servicios que se pueden usar para ejecutar consultas de Hive como parte de un flujo de trabajo programado o a petición.There are several services that can be used to run Hive queries as part of a scheduled or on-demand workflow.

Azure Data FactoryAzure Data Factory

Azure Data Factory permite usar HDInsight como parte de una canalización de Data Factory.Azure Data Factory allows you to use HDInsight as part of a Data Factory pipeline. Para más información sobre el uso de Hive desde una canalización, consulte el documento Transformación de datos mediante una actividad de Hive en Azure Data Factory.For more information on using Hive from a pipeline, see the Transform data using Hive activity in Azure Data Factory document.

Trabajos de Hive y servicios de integración de SQL ServerHive jobs and SQL Server Integration Services

Puede usar SQL Server Integration Services (SSIS) para ejecutar un trabajo de Hive.You can use SQL Server Integration Services (SSIS) to run a Hive job. El paquete de características de Azure para SSIS proporciona los siguientes componentes que funcionan con trabajos de Hive en HDInsight.The Azure Feature Pack for SSIS provides the following components that work with Hive jobs on HDInsight.

Para más información, consulte la documentación del Azure Feature Pack.For more information, see the Azure Feature Pack documentation.

Apache OozieApache Oozie

Apache Oozie es un sistema de coordinación y flujos de trabajo que administra trabajos de Hadoop.Apache Oozie is a workflow and coordination system that manages Hadoop jobs. Para más información sobre el uso de Oozie con Hive, consulte el documento Uso de Apache Oozie para definir y ejecutar un flujo de trabajo.For more information on using Oozie with Hive, see the Use Apache Oozie to define and run a workflow document.

Pasos siguientesNext steps

Ahora que aprendió qué es Hive y cómo usarlo con Hadoop en HDInsight, use los siguientes vínculos para explorar otras formas de trabajar con HDInsight de Azure.Now that you've learned what Hive is and how to use it with Hadoop in HDInsight, use the following links to explore other ways to work with Azure HDInsight.