Saiba mais sobre o Apache Hive e o HiveQL no Azure HDInsight?What is Apache Hive and HiveQL on Azure HDInsight?

Apache Hive é um sistema de data warehouse para Apache Hadoop.Apache Hive is a data warehouse system for Apache Hadoop. O Hive permite o resumo de dados, consultas e análise de dados.Hive enables data summarization, querying, and analysis of data. Consultas de hive são escritas em HiveQL, que é uma linguagem de consulta semelhante ao SQL.Hive queries are written in HiveQL, which is a query language similar to SQL.

O hive permite projetar a estrutura em dados amplamente estruturados.Hive allows you to project structure on largely structured data. Depois de definir a estrutura, você pode usar o HiveQL para consultar os dados sem conhecimento de Java ou do MapReduce.After you define the structure, you can use HiveQL to query the data without knowledge of Java or MapReduce.

O HDInsight fornece vários tipos de cluster, que são ajustados para cargas de trabalho específicas.HDInsight provides several cluster types, which are tuned for specific workloads. Os seguintes tipos de cluster geralmente são usados para consultas de Hive:The following cluster types are most often used for Hive queries:

Como usar o HiveHow to use Hive

Use a tabela a seguir para descobrir diferentes formas de usar o Hive com HDInsight:Use the following table to discover the different ways to use Hive with HDInsight:

Use esse método se você quiser...Use this method if you want... ...consultas interativas...interactive queries ...Processamento emlotes...batch processing ... desse sistema operacional cliente...from this client operating system
Ferramentas do HDInsight para Visual Studio CodeHDInsight tools for Visual Studio Code Linux, Unix, Mac OS X ou WindowsLinux, Unix, Mac OS X, or Windows
Ferramentas do HDInsight para Visual StudioHDInsight tools for Visual Studio WindowsWindows
Exibição de HiveHive View Qualquer um (baseado em navegador)Any (browser based)
Cliente de BeelineBeeline client Linux, Unix, Mac OS X ou WindowsLinux, Unix, Mac OS X, or Windows
API RESTREST API   Linux, Unix, Mac OS X ou WindowsLinux, Unix, Mac OS X, or Windows
Windows PowerShellWindows PowerShell   WindowsWindows

Referência da linguagem HiveQLHiveQL language reference

A referência de linguagem HiveQL está disponível no manual de idioma.HiveQL language reference is available in the language manual.

Hive e estrutura de dadosHive and data structure

O Hive sabe como trabalhar com dados estruturados e semi-estruturados.Hive understands how to work with structured and semi-structured data. Por exemplo, arquivos de texto onde os campos são delimitados por caracteres específicos.For example, text files where the fields are delimited by specific characters. A seguinte instrução do HiveQL cria uma tabela com dados delimitados por espaços: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/';

O Hive também dá suporte a serializador/desserializadores (SerDe) personalizados para dados complexos ou com estrutura irregular.Hive also supports custom serializer/deserializers (SerDe) for complex or irregularly structured data. Para saber mais, consulte o documento Como usar SerDe JSON personalizado com o HDInsight.For more information, see the How to use a custom JSON SerDe with HDInsight document.

Para obter mais informações sobre formatos de arquivo compatíveis com o Hive, consulte o Manual de linguagem (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)

Tabelas internas Hive vs. tabelas externasHive internal tables vs external tables

Há dois tipos de tabelas que você pode criar com o Hive:There are two types of tables that you can create with Hive:

  • Interna: os dados são armazenados no data warehouse do Hive.Internal: Data is stored in the Hive data warehouse. O data warehouse está localizado no /hive/warehouse/ no armazenamento padrão para o cluster.The data warehouse is located at /hive/warehouse/ on the default storage for the cluster.

    Use tabelas internas quando uma das condições a seguir se aplicar:Use internal tables when one of the following conditions apply:

    • Os dados são temporários.Data is temporary.
    • Você quer que o Hive gerencie o ciclo de vida da tabela e dos dados.You want Hive to manage the lifecycle of the table and data.
  • Externa: os dados são armazenados fora do data warehouse.External: Data is stored outside the data warehouse. Os dados podem ser armazenados em qualquer armazenamento acessível pelo cluster.The data can be stored on any storage accessible by the cluster.

    Use tabelas externas quando uma das condições a seguir se aplicar:Use external tables when one of the following conditions apply:

    • Os dados também são usados fora do Hive.The data is also used outside of Hive. Por exemplo, os arquivos de dados são atualizados por outro processo (que não bloqueia os arquivos.)For example, the data files are updated by another process (that does not lock the files.)
    • Os dados devem permanecer no local anterior, mesmo depois de descartar a tabela.Data needs to remain in the underlying location, even after dropping the table.
    • Você precisa de um local personalizado, como uma conta de armazenamento não padrão.You need a custom location, such as a non-default storage account.
    • Um programa que não seja o hive gerencia o formato de dados, local etc.A program other than hive manages the data format, location, etc.

Para obter mais informações, consulte a postagem do blog introdução às tabelas internas e externas do hive .For more information, see the Hive Internal and External Tables Intro blog post.

UDF (Funções definidas pelo usuário)User-defined functions (UDF)

O Hive também pode ser estendido por meio de UDF (funções definidas pelo usuário) .Hive can also be extended through user-defined functions (UDF). As UDF permitem que você implemente funcionalidade ou lógica que não é facilmente modelada em HiveQL.A UDF allows you to implement functionality or logic that isn't easily modeled in HiveQL. Para obter um exemplo de uso de UDFs com o Hive, confira os seguinte documentos:For an example of using UDFs with Hive, see the following documents:

Dados de exemploExample data

O Hive no HDInsight vem pré-carregado com uma tabela interna chamada hivesampletable.Hive on HDInsight comes pre-loaded with an internal table named hivesampletable. O HDInsight também fornece conjuntos de dados de exemplo que podem ser usados com o Hive.HDInsight also provides example data sets that can be used with Hive. Esses conjuntos de dados são armazenados nos diretórios /example/data e /HdiSamples.These data sets are stored in the /example/data and /HdiSamples directories. Esses diretórios estão no armazenamento padrão do cluster.These directories exist in the default storage for your cluster.

Exemplo de consulta do HiveExample Hive query

As seguintes instruções HiveQL projetam colunas para o arquivo /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;

No exemplo anterior, as instruções HiveQL executam as seguintes ações:In the previous example, the HiveQL statements perform the following actions:

  • DROP TABLE: se a tabela já existir, exclua-a.DROP TABLE: If the table already exists, delete it.

  • CREATE EXTERNAL TABLE: cria uma nova tabela externa no Hive.CREATE EXTERNAL TABLE: Creates a new external table in Hive. Tabelas externas só armazenam a definição da tabela no Hive.External tables only store the table definition in Hive. Os dados são mantidos no local e no formato originais.The data is left in the original location and in the original format.

  • ROW FORMAT: informa ao Hive como os dados são formatados.ROW FORMAT: Tells Hive how the data is formatted. Nesse caso, os campos em cada log são separados por um espaço.In this case, the fields in each log are separated by a space.

  • STORED AS TEXTFILE LOCATION: informa ao hive onde os dados são armazenados (o diretório example/data) e que são armazenados como texto.STORED AS TEXTFILE LOCATION: Tells Hive where the data is stored (the example/data directory) and that it's stored as text. Os dados podem estar em um arquivo ou distribuídos em vários arquivos dentro do diretório.The data can be in one file or spread across multiple files within the directory.

  • SELECT: seleciona uma contagem de todas as linhas nas quais a coluna t4 contém o valor [ERROR] .SELECT: Selects a count of all rows where the column t4 contains the value [ERROR]. Essa instrução retorna um valor de 3, já que há três linhas que contêm esse valor.This statement returns a value of 3 because there are three rows that contain this value.

  • INPUT__FILE__NAME LIKE '%.log' – O Hive tenta aplicar o esquema a todos os arquivos no diretório.INPUT__FILE__NAME LIKE '%.log' - Hive attempts to apply the schema to all files in the directory. Nesse caso, o diretório contém arquivos que não correspondem ao esquema.In this case, the directory contains files that don't match the schema. Para evitar dados incorretos nos resultados, essa instrução informa ao Hive que devemos retornar apenas dados de arquivos que terminam em .log.To prevent garbage data in the results, this statement tells Hive that we should only return data from files ending in .log.

Observação

As tabelas externas devem ser usadas quando você espera que os dados subjacentes sejam atualizados por uma fonte externa.External tables should be used when you expect the underlying data to be updated by an external source. Por exemplo, um processo de upload de dados automatizado ou uma operação MapReduce.For example, an automated data upload process, or MapReduce operation.

Descartar uma tabela externa não exclui os dados, apenas a definição da tabela.Dropping an external table does not delete the data, it only deletes the table definition.

Para criar uma tabela interna em vez de externa, use o HiveQL a seguir: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]';

Essas instruções executam as seguintes ações:These statements perform the following actions:

  • CREATE TABLE IF NOT EXISTS: se a tabela não existir, crie uma.CREATE TABLE IF NOT EXISTS: If the table does not exist, create it. Como a palavra-chave external não é usada, essa instrução cria uma tabela interna.Because the EXTERNAL keyword isn't used, this statement creates an internal table. Uma tabela interna é armazenada no data warehouse do Hive e é totalmente gerenciada pelo Hive.The table is stored in the Hive data warehouse and is managed completely by Hive.

  • STORED AS ORC: armazena os dados no formato Colunar de linha otimizado (ORC).STORED AS ORC: Stores the data in Optimized Row Columnar (ORC) format. Esse é um formato altamente otimizado e eficiente para o armazenamento de dados do Hive.ORC is a highly optimized and efficient format for storing Hive data.

  • INSERT OVERWRITE ... SELECT: seleciona as linhas na tabela log4jLogs que contém [ERROR] e insere os dados na tabela errorLogs.INSERT OVERWRITE ... SELECT: Selects rows from the log4jLogs table that contains [ERROR], and then inserts the data into the errorLogs table.

Observação

Diferentemente de tabelas externas, o descarte de uma tabela interna excluirá também os dados subjacentes.Unlike external tables, dropping an internal table also deletes the underlying data.

Como melhorar o desempenho de consulta de HiveImprove Hive query performance

Apache TezApache Tez

Apache Tez é uma estrutura que permite que aplicativos com uso intenso de dados como o Hive executem de maneira muito mais eficiente em escala.Apache Tez is a framework that allows data intensive applications, such as Hive, to run much more efficiently at scale. O tez é habilitado por padrão.Tez is enabled by default. Os documentos de design do Apache Hive no Tez contêm vários detalhes das escolhas de implantação e configurações de ajuste.The Apache Hive on Tez design documents contains details about the implementation choices and tuning configurations.

Processamento analítico de baixa latência (LLAP)Low Latency Analytical Processing (LLAP)

LLAP (também conhecido como vida longa e processo) é um novo recurso no Hive 2.0 que permite armazenar as consultas em cache na memória.LLAP (sometimes known as Live Long and Process) is a new feature in Hive 2.0 that allows in-memory caching of queries. O LLAP acelera as consultas de Hive em até 26 vezes mais rápido do que o Hive 1.x em alguns casos.LLAP makes Hive queries much faster, up to 26x faster than Hive 1.x in some cases.

O HDInsight fornece LLAP no tipo de cluster da Consulta Interativa.HDInsight provides LLAP in the Interactive Query cluster type. Para obter mais informações, confira o documento Introdução à Consulta Interativa.For more information, see the Start with Interactive Query document.

Programação de consultas de HiveScheduling Hive queries

Há vários serviços que podem ser usados para executar consultas de Hive como parte de um fluxo de trabalho programado ou sob demanda.There are several services that can be used to run Hive queries as part of a scheduled or on-demand workflow.

Fábrica de dados do AzureAzure Data Factory

O Azure Data Factory permite que você use o HDInsight como parte de um pipeline do Data Factory.Azure Data Factory allows you to use HDInsight as part of a Data Factory pipeline. Para obter mais informações sobre como usar o Hive de um pipeline, consulte o documento Transformar dados usando a atividade do Hive no Azure Data Factory.For more information on using Hive from a pipeline, see the Transform data using Hive activity in Azure Data Factory document.

Trabalhos do Hive e SQL Server Integration ServicesHive jobs and SQL Server Integration Services

Também é possível usar o SSIS (SQL Server Integration Services) para executar um trabalho do Hive.You can use SQL Server Integration Services (SSIS) to run a Hive job. O Feature Pack do Azure para SSIS fornece os seguintes componentes que funcionam com trabalhos do Hive no HDInsight.The Azure Feature Pack for SSIS provides the following components that work with Hive jobs on HDInsight.

Para obter mais informações, consulte a documentação do Azure Feature Pack .For more information, see the Azure Feature Pack documentation.

Apache OozieApache Oozie

O Apache Oozie é um sistema de fluxo de trabalho e coordenação que gerencia trabalhos do Hadoop.Apache Oozie is a workflow and coordination system that manages Hadoop jobs. Para obter mais informações sobre como usar Oozie com o Hive, consulte o documento Usar o Apache Oozie para definir e executar um fluxo de trabalho.For more information on using Oozie with Hive, see the Use Apache Oozie to define and run a workflow document.

Próximas etapasNext steps

Agora que você aprendeu a usar a transmissão de trabalhos do MapReduce com o HDInsight, use os links abaixo para explorar outras maneiras de trabalhar com o Azure HDInsight.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.