Cosa sono Apache Hive e HiveQL in Azure HDInsight

Apache Hive è un sistema di data warehouse per Apache Hadoop. Hive consente di eseguire attività di riepilogo, query e analisi dei dati. Le query di Hive sono scritte in HiveQL, linguaggio di query simile a SQL.

Hive consente di proiettare la struttura su dati principalmente non strutturati. Dopo aver definito la struttura, è possibile usare HiveQL per eseguire una query sui dati anche senza alcuna conoscenza di Java o MapReduce.

HDInsight offre diversi tipi di cluster ottimizzati per carichi di lavoro specifici. I tipi di cluster usati più di frequente per le query Hive sono i seguenti:

Tipo di cluster Descrizione
Interactive Query un cluster Hadoop che offre la funzionalità Low Latency Analytical Processing (LLAP) per migliorare i tempi di risposta per le query interattive. Per altre informazioni, vedere il documento su come iniziare a usare Interactive Query in HDInsight.
Hadoop un cluster Hadoop ottimizzato per carichi di lavoro di elaborazione batch. Per altre informazioni, vedere il documento su come iniziare a usare Apache Hadoop in HDInsight.
Spark Apache Spark ha una funzionalità integrata per l'interazione con Hive. Per altre informazioni, vedere il documento su come iniziare a usare Apache Spark in HDInsight.
hbase HiveQL può essere usato per eseguire query sui dati archiviati in Apache HBase. Per altre informazioni, vedere il documento su come iniziare a usare Apache HBase in HDInsight.

Come usare Hive

Consultare la tabella seguente per informazioni sui vari modi in cui è possibile usare Hive con HDInsight:

Usare questo metodo se si vuole... ...query interattive ...elaborazionebatch ...da questo sistema operativo client
Strumenti di HDInsight per Visual Studio Code Linux, Unix, macOS X o Windows
HDInsight Tools per Visual Studio Finestre
Vista di Hive Qualsiasi versione (basata su browser)
Client Beeline Linux, Unix, macOS X o Windows
REST API   Linux, Unix, macOS X o Windows
Windows PowerShell   Finestre

Informazioni di riferimento sul linguaggio HiveQL

Il riferimento al linguaggio HiveQL è disponibile nel manuale del linguaggio.

Hive e la struttura dei dati

Hive è in grado di usare dati strutturati e semistrutturati. Ad esempio, file di testo in cui i campi sono delimitati da caratteri specifici. L'istruzione HiveQL seguente crea una tabella di dati delimitati da spazi:

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 supporta inoltre serializzatori/deserializzatori personalizzati per dati complessi o strutturati in modo irregolare. Per altre informazioni, vedere l'articolo su come usare un serializzatore/deserializzatore JSON personalizzato con HDInsight.

Per altre informazioni sui formati di file supportati da Hive, vedere il manuale del linguaggio (https://cwiki.apache.org/confluence/display/Hive/LanguageManual)

Confronto tra le tabelle interne ed esterne di Hive

Con Hive è possibile creare due tipi di tabelle:

  • Interna: i dati vengono archiviati nel data warehouse di Hive. Il data warehouse si trova in /hive/warehouse/ nella risorsa di archiviazione predefinita per il cluster.

    Usare tabelle interne quando si applica una delle condizioni seguenti:

    • I dati sono temporanei.
    • Si desidera che Hive gestisca il ciclo di vita della tabella e dei dati.
  • Interna: i dati vengono archiviati all'esterno del data warehouse. I dati possono essere archiviati in tutte le risorse di archiviazione accessibili dal cluster.

    Usare tabelle esterne quando si applica una delle condizioni seguenti:

    • I dati vengono usati anche all'esterno di Hive. Ad esempio, i file di dati vengono aggiornati da un altro processo (che non blocca i file).
    • I dati devono rimanere nel percorso sottostante, anche dopo l'eliminazione della tabella.
    • È necessario un percorso personalizzato, ad esempio un account di archiviazione non predefinito.
    • Un programma diverso da Hive gestisce il formato dei dati, la posizione e così via.

Per altre informazioni, vedere il post di blog Hive Internal and External Tables Intro (Introduzione alle tabelle interne ed esterne di Hive).

Funzioni definite dall'utente (UDF)

Hive può anche essere esteso tramite funzioni definite dall'utente (UDF), che consentono di implementare funzionalità o logica non facilmente modellate in HiveQL. Per un esempio sull'uso di funzioni definite dall'utente con Hive, vedere i documenti seguenti:

Dati di esempio

Hive in HDInsight include una tabella interna denominata hivesampletable. HDInsight offre inoltre set di dati di esempio che possono essere usati con Hive. Questi set di dati sono archiviati nelle directory /example/data e /HdiSamples. Queste directory si trovano nella risorsa di archiviazione predefinita per il cluster.

Query Hive di esempio

Le seguenti istruzioni di HiveQL creano colonne nel file /example/data/sample.log:

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;

Nell'esempio precedente, le istruzioni HiveQL eseguono le azioni seguenti:

Istruzione Descrizione
DROP TABLE se la tabella esiste già, la elimina.
CREATE EXTERNAL TABLE crea una nuova tabella esterna in Hive. Le tabelle esterne archiviano solo la definizione della tabella in Hive. I dati rimangono nel percorso e nel formato originale.
FORMATO RIGA indica a Hive il modo in cui sono formattati i dati. In questo caso, i campi in ogni log sono separati da uno spazio.
STORED AS TEXTFILE LOCATION Indica a Hive dove vengono archiviati i dati (la example/data directory) e che vengono archiviati come testo. I dati possono essere contenuti in un file o distribuiti tra più file all'interno della directory.
SELECT seleziona un conteggio di tutte le righe in cui la colonna t4 contiene il valore [ERROR]. L'istruzione restituisce un valore pari a 3, poiché sono presenti tre righe contenenti questo valore.
INPUT__FILE__NAME LIKE '%.log' Hive tenta di applicare lo schema a tutti i file nella directory. In questo caso, la directory contiene file che non corrispondono allo schema. Per evitare dati errati nei risultati, questa istruzione indica a Hive che devono essere restituiti dati solo da file che terminano con .log.

Nota

Usa le tabelle esterne se si prevede che i dati sottostanti verranno aggiornati da un'origine esterna. Ad esempio, un processo di caricamento dati automatizzato o un'operazione MapReduce.

L'eliminazione di una tabella esterna non comporta anche l'eliminazione dei dati. Viene eliminata solo la definizione della tabella.

Per creare una tabella interno anziché esterna, usare il codice HiveQL seguente:

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]';

Le istruzioni eseguono queste azioni:

Istruzione Descrizione
CREATE TABLE IF NOT EXISTS Se la tabella non esiste, crearla. Poiché la parola chiave EXTERNAL non viene usata, questa istruzione crea una tabella interna. La tabella viene archiviata nel data warehouse di Hive e gestita completamente da Hive.
ARCHIVIATO COME ORC archivia i dati nel formato ORC (Optimized Row Columnar). ORC è un formato altamente ottimizzato ed efficiente per l'archiviazione di dati Hive.
IN edizione Standard RT OVERWRITE ... edizione Standard LECT Seleziona le righe della log4jLogs tabella che contiene [ERROR], quindi inserisce i dati nella tabella errorLogs .

Nota

A differenza delle tabelle esterne, se si elimina una tabella interna vengono eliminati anche i dati sottostanti.

Ottimizzare le prestazioni delle query di Hive

Apache Tez

Apache Tez è un framework che consente di eseguire applicazioni come Hive, che richiedono un uso elevato di dati, in modo molto più efficiente e scalabile. Tez è abilitato per impostazione predefinita. La documentazione sulla progettazione di Apache Hive su Tez contiene le informazioni dettagliate sulle scelte di implementazione e l'ottimizzazione delle configurazioni.

Low Latency Analytical Processing (LLAP)

LLAP (o Live Long and Process) è una nuova funzionalità di Hive 2.0 che consente di mettere in cache le query in memoria.

HDInsight offre LLAP nel tipo di cluster Interactive Query. Per altre informazioni, vedere il documento su come iniziare a usare Interactive Query.

Pianificazione di query Hive

Esistono numerosi servizi che possono essere utilizzati per eseguire le query Hive nell'ambito di un flusso di lavoro pianificato o su richiesta.

Azure Data Factory

Azure Data Factory consente di usare HDInsight come parte di una pipeline di Data Factory. Per ulteriori informazioni sull'uso di Hive da una pipeline, vedere il documento Trasformare dati usando l'attività Hive in Azure Data Factory.

Processi di Hive e SQL Server Integration Services

È possibile usare SQL Server Integration Services (SSIS) per eseguire un processo Hive. Il Feature Pack di Azure per SSIS fornisce i seguenti componenti che funzionano con i processi Hive in HDInsight.

Per altre informazioni, vedere la documentazione relativa al Feature Pack di Azure.

Apache Oozie

Apache Oozie è un sistema di coordinamento dei flussi di lavoro che consente di gestire i processi Hadoop. Per altre informazioni sull'uso di Oozie con Hive, vedere il documento Usare Apache Oozie con Apache Hadoop per definire ed eseguire un flusso di lavoro.

Nota

Il gestore Archiviazione Phoenix per Hive non è supportato in HDInsight

Passaggi successivi

Dopo avere appreso che cos'è Hive e come si usa con Hadoop in HDInsight, vedere i collegamenti seguenti per scoprire altri modi di usare Azure HDInsight.