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.

  • 🧮 Cinq familles d'opérateurs : Les opérateurs relationnels, arithmétiques, logiques, de type complexe et de constructeur couvrent toutes les expressions nécessaires à une requête HiveQL.
  • 🔍 La comparaison accepte n'importe quelle primitive : Les opérateurs relationnels acceptent tous les types primitifs, tandis que LIKE, RLIKE et REGEXP ne fonctionnent que sur des chaînes de caractères.
  • L'arithmétique comprend les opérations bit à bit : Au-delà des quatre opérations de base, HiveQL expose les opérations modulo et les opérations bit à bit ET, OU, OU exclusif et NON sur les types numériques.
  • 🧩 Les données imbriquées ont leur propre syntaxe : A[n] atteint un élément de tableau et M[key] atteint une valeur de carte, tous deux utilisables partout où une expression est autorisée.
  • ???? Les constructeurs créent des valeurs complexes : array(), map(), struct(), named_struct() et create_union() permettent d'assembler des colonnes complexes au sein d'une requête.
  • 📚 Les fonctions étendent les opérateurs : Les fonctions mathématiques, de chaînes de caractères, de dates, conditionnelles, de collections et d'agrégation prennent en charge des tâches qu'aucun opérateur ne couvre.

Quels sont les opérateurs du langage de requêtes Hive (HiveQL) ?

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.

FAQ

Les mots clés, les opérateurs tels que AND ou LIKE et les noms de fonctions ne sont pas sensibles à la casse ; ainsi, SELECT et select se comportent de la même manière. Ce n’est pas le cas pour les chaînes de caractères : comparer « Sales » avec « sales » renvoie FALSE sauf si les fonctions upper() ou lower() sont appliquées au préalable.

La fonction X / Y renvoie toujours un nombre à virgule flottante double, même lorsque les deux opérandes sont des entiers ; ainsi, 7 / 2 donne 3.5 au lieu de 3. Utilisez le mot-clé DIV pour la division entière et l’opérateur % pour le reste.

Les opérateurs arithmétiques et de comparaison propagent les valeurs NULL : toute expression contenant une valeur NULL est évaluée à NULL, et non à FALSE. Testez avec IS NULL ou IS NOT NULL, et utilisez une valeur de repli avec coalesce() ou nvl() avant que la valeur n'atteigne un opérateur.

LIKE utilise des caractères génériques SQL, où % correspond à n'importe quelle séquence de caractères et _ à une seule séquence. RLIKE correspond à une séquence de caractères. Java Expression régulière appliquée à n'importe quelle sous-chaîne de la valeur. REGEXP est un synonyme de RLIKE et se comporte de la même manière.

Les opérateurs arithmétiques sont liés en premier, suivis des opérateurs de comparaison, puis de NON, puis de ET, puis de OU. Comme cet ordre peut prêter à confusion dans les longs prédicats, il est recommandé d'utiliser des parenthèses lorsque ET et OU apparaissent dans la même clause.

Oui. Les opérateurs relationnels et logiques forment des conditions de jointure, les opérateurs arithmétiques peuvent produire des groupesping Les clés et l'accès de type complexe tel que M[clé] sont valides partout où une expression est autorisée, y compris les listes SELECT, les clauses WHERE et ORDER BY.

Les assistants d'apprentissage automatique traduisent un filtre en langage naturel en un prédicat candidat et signalent les incohérences de type, par exemple en comparant une colonne de type chaîne de caractères avec une colonne de type nombre. Vérifiez toujours l'opérateur généré à l'aide des tableaux ci-dessus, car les dialectes diffèrent entre Hive et d'autres outils. Spark SQL et Presto.

Il gère correctement les prédicats courants et suggère des structures COALESCE() ou CASE WHEN à partir d'un court commentaire. Il intègre également de la syntaxe provenant d'autres moteurs ; il est donc conseillé de vérifier les opérateurs bit à bit, l'accès aux types complexes et tout nom de fonction avec DESCRIBE FUNCTION avant d'exécuter la requête.

Résumez cet article avec :