Qu'est-ce que le langage de requête Hive ? HiveQL Operajeudi
⚡ Résumé intelligent
Le langage de requête Hive fournit les opérateurs qui pilotent chaque expression HiveQL, groupeping les répartir en familles relationnelles, arithmétiques, logiques, de types complexes et de constructeurs qui, ensemble, couvrent la comparaison, le calcul et l'accès aux données imbriquées.
Qu'est-ce que le langage de requête Hive (HiveQL) ?
Hive Query Language (HiveQL) est un langage de requête dans Ruche Apache Pour le traitement et l'analyse de données structurées, Hive simplifie la programmation MapReduce. Il réutilise des concepts communs aux bases de données relationnelles, tels que les tables, les lignes, les colonnes et le schéma, pour faciliter l'apprentissage. Hive propose une interface en ligne de commande (CLI) pour écrire des requêtes Hive à l'aide du langage HiveQL.
La plupart des interactions ont tendance à avoir lieu via une interface de ligne de commande (CLI). Généralement, la syntaxe HiveQL est similaire à la SQL La syntaxe est familière à la plupart des analystes de données. Les quatre formats de fichiers mentionnés dans la documentation originale de Hive sont TEXTFILE, SEQUENCEFILE, ORC et RCFILE (Record Columnar File) ; les versions actuelles prennent également en charge la lecture et l’écriture des formats Parquet et Avro, et le format ORC est celui que la plupart des guides d’optimisation supposent.
Hive utilise une base de données Derby intégrée pour le stockage des métadonnées mono-utilisateur. Pour les déploiements multi-utilisateurs ou de métastore partagé, Hive utilise MySQL ou une autre base de données relationnelle externe, car Derby n'autorise qu'une seule session à la fois.
HiveQL intégré Operajeudi
Hive fournit des opérateurs intégrés pour les opérations de données exécutées sur les tables stockées dans l'entrepôt de données Hive.
Ces opérateurs agissent sur les opérandes à l'intérieur d'une expression et renvoient une valeur en fonction de la logique appliquée, qu'il s'agisse d'une comparaison, d'un calcul ou d'une recherche dans une colonne imbriquée.
Voici les principaux types d'opérateurs intégrés à HiveQL :
- Opérateurs relationnels
- Opérateurs arithmétiques
- Les opérateurs logiques
- Operators sur les types complexes
- constructeurs de types complexes
Chaque famille est traitée dans sa propre section ci-dessous, avec le tableau complet des opérateurs pour cette famille.
Relationnel Operators dans HiveQL
Nous utilisons des opérateurs relationnels pour comparer les relations entre deux opérandes.
- OperaDes opérateurs tels que égal, différent de, inférieur à et supérieur à.
- Dans ces opérateurs, tous les types d'opérandes sont des types primitifs, et les opérateurs de correspondance de motifs n'acceptent que des chaînes de caractères.
Chaque opérateur relationnel renvoie une valeur booléenne ; c’est pourquoi les clauses WHERE, les conditions JOIN et les branches CASE WHEN sont construites à partir de ces opérateurs. Le tableau suivant détaille les opérateurs relationnels et leur utilisation dans HiveQL :
| Encastré Operator | Description | Operand |
|---|---|---|
| X = Oui | VRAI si l'expression X est équivalente à l'expression Y. Sinon, FAUX. | Il faut tous les types primitifs |
| X != Oui | VRAI si l'expression X n'est pas équivalente à l'expression Y. Sinon, FAUX. | Il faut tous les types primitifs |
| X<Y | VRAI si l'expression X est inférieure à l'expression Y. Sinon, FAUX. | Il faut tous les types primitifs |
| X <= Y | VRAI si l'expression X est inférieure ou égale à l'expression Y. Sinon, FAUX. | Il faut tous les types primitifs |
| X > Y | VRAI si l'expression X est supérieure à l'expression Y. Sinon, FAUX. | Il faut tous les types primitifs |
| X ≥ Y | VRAI si l'expression X est supérieure ou égale à l'expression Y. Sinon, FAUX. | Il faut tous les types primitifs |
| X EST NULL | VRAI si l'expression X est évaluée à NULL, sinon FAUX. | Il faut tous les types |
| X N'EST PAS NULL | FAUX si l'expression X est évaluée à NULL, sinon VRAI. | Il faut tous les types |
| X COMME Y | VRAI si le modèle de chaîne X correspond à Y, sinon FAUX. | Prend uniquement des chaînes |
| X RLIKE Y | NULL si X ou Y est NULL, TRUE si une sous-chaîne de X correspond au Java expression régulière Y, sinon FALSE. | Prend uniquement des chaînes |
| X EXPÉDITION RÉGULIÈRE Y | Identique à RLIKE. | Prend uniquement des chaînes |
Notez qu'une comparaison avec NULL ne renvoie jamais VRAI ni FAUX. C'est pourquoi le tableau présente les opérateurs IS NULL et IS NOT NULL comme distincts, au lieu de supposer que X = NULL fonctionne.
Arithmétique HiveQL Operajeudi
Nous utilisons des opérateurs arithmétiques pour effectuer des opérations arithmétiques sur les opérandes.
- Les opérations arithmétiques telles que l'addition, la soustractiontracL'addition, la multiplication et la division entre opérandes utilisent ces opérateurs.
- Dans ces opérateurs, tous les types d'opérandes sont des types numériques.
Exemple :
2 + 3 donne le résultat 5.
Dans cet exemple, '+' est l'opérateur, 2 et 3 sont les opérandes et la valeur de retour est 5.
Le tableau suivant donne des détails sur les opérateurs arithmétiques du langage de requête Hive :
| Encastré Operator | Description | Operand |
|---|---|---|
| X + Oui | Il renverra le résultat de l’ajout des valeurs X et Y. | Il faut tous les types de nombres |
| X-Y | Elle renverra le résultat de la sous-routinetracting Y à partir de la valeur X. | Il faut tous les types de nombres |
| X * Oui | Il renverra le résultat de la multiplication des valeurs X et Y. | Il faut tous les types de nombres |
| X/Y | Il renverra le résultat de la division Y de X. | Il faut tous les types de nombres |
| X %Y | Il renverra le reste résultant de la division de X par Y. | Il faut tous les types de nombres |
| X et Y | Il renverra la sortie de ET au niveau du bit de X et Y. | Il faut tous les types de nombres |
| X | Oui | Il renverra la sortie du OU au niveau du bit de X et Y. | Il faut tous les types de nombres |
| X ^ Oui | Il renverra la sortie du XOR au niveau du bit de X et Y. | Il faut tous les types de nombres |
| ~X | Il renverra la sortie de NOT au niveau du bit de X. | Il faut tous les types de nombres |
Les quatre dernières lignes sont des opérations bit à bit plutôt que des opérations arithmétiques ordinaires : elles opèrent sur la représentation binaire des opérandes entiers, donc &, | et ^ ne sont pas les mêmes que les opérateurs logiques ET, OU et NON abordés dans la section suivante.
Logique HiveQL Operajeudi
Nous utilisons des opérateurs logiques pour effectuer des opérations logiques sur les opérandes.
- Les opérations logiques telles que ET, OU et NON entre opérandes utilisent ces opérateurs.
- Dans ces opérateurs, tous les types d'opérandes sont de type BOOLÉEN.
Le tableau suivant donne des détails sur les opérateurs logiques en HiveQL :
| Operajeudi | Description | Operands |
|---|---|---|
| X ET Y | VRAI si X et Y sont VRAI, sinon FAUX. | Types booléens uniquement |
| X && Y | Identique à X ET Y, mais ici nous utilisons le symbole &&. | Types booléens uniquement |
| X OU Y | VRAI si X ou Y ou les deux sont VRAI, sinon FAUX. | Types booléens uniquement |
| X || Oui | Identique à X OU Y, mais ici nous utilisons le symbole ||. | Types booléens uniquement |
| PAS X | VRAI si X est FAUX, sinon FAUX. | Types booléens uniquement |
| !X | Identique à NON X, mais ici nous utilisons le symbole !. | Types booléens uniquement |
Étant donné que les opérateurs relationnels renvoient des valeurs BOOLÉENNES, ce sont les opérateurs logiques qui les combinent : un prédicat tel que salaire > 50000 ET département = 'Ventes' enchaîne une famille à l'autre.
Operators sur les types complexes
Les opérateurs relationnels, arithmétiques et logiques agissent tous sur des valeurs scalaires uniques. Hive stocke également des colonnes de type tableau, map et struct, qui nécessitent un mécanisme différent pour accéder à leurs éléments. Le tableau suivant détaille les opérateurs de types complexes qui fournissent ce mécanisme :
| Operajeudi | Operands | Description |
|---|---|---|
| Un] | A est un tableau et n est un type entier | Elle renverra le n-ième élément du tableau A. Le premier élément a pour indice 0. |
| M[clé] | M est une carte et la clé est de type K | Elle renverra la valeur correspondant à la clé dans la carte. |
Les deux formes sont des expressions ordinaires, elles peuvent donc apparaître dans une liste SELECT, une clause WHERE ou un GROUP BY, et un champ de structure est accessible avec la notation pointée telle que S.field au lieu d'une parenthèse.
Constructeurs de types complexes
Là où les opérateurs ci-dessus lisent une colonne complexe existante, les constructeurs en créent une. Le tableau suivant détaille les constructeurs de types complexes, qui créent des instances des types de données complexes — Array, Map et Struct — dans Hive.
Dans cette section, nous allons examiner les opérations effectuées sur les constructeurs de types complexes.
| Operajeudi | Operands | Description |
|---|---|---|
| tableau | (val1, val2, …) | Il créera un tableau contenant les éléments donnés, comme indiqué, par exemple val1, val2. |
| créer_union | (balise, val1, val2, …) | Cela créera un type union avec la valeur référencée par le paramètre de balise. |
| plan | (clé1, valeur1, clé2, valeur2, …) | Elle créera une carte avec les paires clé/valeur données mentionnées dans les opérandes. |
| structure nommée | (nom1, val1, nom2, val2, …) | Elle créera une structure avec les noms de champs et les valeurs mentionnés dans les opérandes. |
| struct | (val1, val2, val3, …) | Crée une structure avec les valeurs de champ spécifiées. Les noms des champs de la structure seront col1, col2, etc. |
Les constructeurs sont le plus souvent utilisés dans une instruction INSERT qui remplit une colonne complexe, ou dans une instruction SELECT qui regroupe plusieurs colonnes scalaires dans une seule structure avant d'écrire le résultat dans une autre table.
Fonctions intégrées de HiveQL
OperaLes classes de comparaison couvrent la comparaison, le calcul et l'accès aux éléments, mais elles n'arrondissent pas un nombre, ne suppriment pas les espaces vides d'une chaîne de caractères ni n'effectuent de sous-ensembles.tract deux dates. Ce travail relève des fonctions intégrées de Hive, appelées par leur nom dans les mêmes expressions où apparaissent les opérateurs. Le tableau ci-dessous regroupe les familles que l'on rencontre en premier chez un débutant.
| Famille de fonctions | Membres typiques | À quoi ça sert |
|---|---|---|
| Mathématique | arrondi(), plancher(), plafond(), valeur absolue(), puissance(), racine carrée(), aléatoire() | Arrondi, puissances et autres calculs numériques sur une seule valeur de colonne. |
| Chaîne | concat(), substr(), upper(), lower(), trim(), length(), regexp_replace() | Nettoyage, taille et réaffûtageping le texte avant d'être comparé ou regroupé. |
| Date | date_actuelle, année(), mois(), différence_date(), ajout_date(), horodatage_unix() | Extracdivision des dates et mesure des intervalles entre deux dates. |
| Conditionnel | if(), CASE WHEN, coalesce(), nvl(), isnull() | Choisir une valeur au niveau de la ligne et remplacer NULL par une valeur de repli. |
| Collection | taille(), map_clés(), map_valeurs(), tableau_contient(), trier_tableau() | Inspection des colonnes de tableau, de carte et de structure atteintes par les opérateurs de type complexe. |
| Conversion de type | cast(), binaire() | Forcer une colonne à adopter le type attendu par un opérateur. |
| Agrégat (UDAF) | compter(), somme(), moyenne(), min(), max(), collecter_ensemble() | Réduire plusieurs lignes à une seule valeur, généralement en complément de GROUP BY. |
La liste des fonctions dépend de la version de Hive ; il est donc préférable de la consulter directement dans la session plutôt que sur une page statique. Deux instructions permettent de le faire :
SHOW FUNCTIONS; DESCRIBE FUNCTION round; DESCRIBE FUNCTION EXTENDED round;
La commande SHOW FUNCTIONS liste tous les noms enregistrés, DESCRIBE FUNCTION affiche la signature sur une ligne, et la forme EXTENDED ajoute des exemples d'utilisation lorsque la classe d'implémentation en fournit. Lorsqu'aucune fonction intégrée ne convient, Hive accepte un fonction définie par l'utilisateur écrit en Java.
HiveQL vs SQL : Principales différences
HiveQL emprunte délibérément la syntaxe SQL, et les tableaux d'opérateurs ci-dessus paraîtront familiers à quiconque a déjà programmé en SQL. Le modèle d'exécution sous-jacent est différent, et les différences apparaissent dès qu'une requête dépasse le cadre d'une simple instruction SELECT.
| COMPORTEMENT | RucheQL | SQL traditionnel (SGBDR) |
|---|---|---|
| Gestion des schémas | Schéma appliqué à la lecture — le schéma est appliqué lors de l'interrogation du fichier. | Schéma appliqué à l'écriture — le schéma est appliqué lors de l'insertion de la ligne. |
| Mise à jour et suppression au niveau des lignes | Prise en charge uniquement des tables ACID ; les tables gérées sont ACID par défaut à partir de Hive 3.0 | Prise en charge par défaut sur toutes les tables |
| Index | La prise en charge des index a été supprimée dans Hive 3.0 (HIVE-18448) ; elle est désormais remplacée par les index de fichiers ORC ou Parquet et les vues matérialisées. | L'arbre B et les autres index secondaires constituent une fonctionnalité essentielle |
| Exécution et latence | Compile en tâches par lots sur Tez, MapReduce ou Spark, donc même les petites requêtes entraînent des coûts de démarrage. | Exécution interactive, généralement en millisecondes |
| Objectif de conception | Débit sur des fichiers très volumineux sur HDFS ou un stockage d'objets | Lecture et écriture à faible latence sur un serveur unique ou un cluster |
La conséquence pratique pour l'écriture expressive est minime mais réelle. OperaLes opérateurs se comportent comme prévu, mais un prédicat qui serait résolu à partir d'un index dans une base de données relationnelle est résolu dans Hive par l'analyse de fichiers ; filtrer sur une colonne de partition est donc généralement bien plus utile que de régler l'opérateur lui-même.

