Mi a Hive lekérdezési nyelv? HiveQL Operatorzok

⚡ Okos összefoglaló

A Hive Query Language biztosítja azokat az operátorokat, amelyek minden HiveQL kifejezést, csoportot és csoportosítást vezérelnek.ping relációs, aritmetikai, logikai, komplex típusú és konstruktor családokba sorolja őket, amelyek együttesen lefedik az összehasonlítást, a számítást és a beágyazott adatokhoz való hozzáférést.

  • 🧮 Öt operátorcsalád: A relációs, aritmetikai, logikai, komplex típusú és konstruktor operátorok lefedik a HiveQL lekérdezésekhez szükséges összes kifejezést.
  • 🔍 Az összehasonlítás bármilyen primitívet feltételez: A relációs operátorok minden primitív típust elfogadnak, míg a LIKE, RLIKE és REGEXP csak karakterláncokon működnek.
  • A számtani műveletek bitenkénti feldolgozást is magukban foglalnak: A négy alapvető műveleten túl a HiveQL modulo és bitenkénti AND, OR, XOR és NOT műveleteket is elérhetővé tesz számtípusokon.
  • 🧩 A beágyazott adatoknak saját szintaxisuk van: Az A[n] egy tömbelemhez, az M[key] pedig egy map értékhez ér, mindkettő bárhol használható, ahol egy kifejezés megengedett.
  • 🏗️ A konstruktorok összetett értékeket építenek fel: Az array(), map(), struct(), named_struct() és create_union() függvények összetett oszlopokat állítanak össze egy lekérdezésen belül.
  • ???? A függvények kiterjesztik az operátorokat: A matematikai, karakterlánc-, dátum-, feltételes, gyűjtemény- és aggregátumfüggvények olyan feladatokat kezelnek, amelyeket egyetlen operátor sem fed le.

Mik azok a Hive Query Language (HiveQL) operátorok?

Mi az a Hive Query Language (HiveQL)?

A Hive Query Language (HiveQL) egy lekérdezési nyelv Apache Hive strukturált adatok feldolgozásához és elemzéséhez. Megszabadítja a felhasználókat a MapReduce programozás bonyolultságától. Újra felhasználja a relációs adatbázisokból származó gyakori fogalmakat, például a táblázatokat, sorokat, oszlopokat és sémákat, hogy megkönnyítse a tanulást. A Hive egy parancssori felületet (CLI) biztosít a Hive lekérdezések írásához a Hive Query Language (HiveQL) használatával.

A legtöbb interakció általában parancssori felületen (CLI) keresztül megy végbe. Általában a HiveQL szintaxisa hasonló a SQL szintaxis, amelyet a legtöbb adatelemző ismer. Az eredeti Hive dokumentációban említett négy fájlformátum a TEXTFILE, a SEQUENCEFILE, az ORC és az RCFILE (Record Columnar File); a jelenlegi kiadások a Parquet és az Avro fájlokat is olvassák és írják, és a legtöbb finomhangolási útmutató az ORC formátumot feltételezi.

A Hive egy beágyazott Derby adatbázist használ az egyfelhasználós metaadatok tárolására. Többfelhasználós vagy megosztott metaadattár-telepítések esetén a Hive a következőket használja: MySQL vagy egy másik külső relációs adatbázist használjunk, mivel a Derby egyszerre csak egy munkamenetet engedélyez.

Beépített HiveQL Operatorzok

A Hive beépített operátorokat biztosít a Hive adattárházban tárolt táblákon futó adatműveletekhez.

Ezek az operátorok egy kifejezésen belüli operandusokra hatnak, és az alkalmazott logika szerint adnak vissza egy értéket, legyen az összehasonlítás, számítás vagy beágyazott oszlopban való keresés.

Az alábbiakban a HiveQL beépített operátorainak fő típusait láthatjuk:

  • Relációs operátorok
  • Számtani operátorok
  • logikai operátorok
  • Operakomplex típusok
  • Komplex típuskonstruktorok

Minden egyes családot külön szakasz tárgyal, az adott család teljes operátortáblázatával együtt.

Relációs Operatorok a HiveQL-ben

Relációs operátorokat használunk két operandus közötti kapcsolatok összehasonlításához.

  • Operaolyanok, mint az egyenlő, nem pedig az egyenlő, a kisebb és a nagyobb mint.
  • Az operandustípusok mind primitív típusok ezekben az operátorokban, és a mintaillesztő operátorok csak karakterláncokat fogadnak el.

Minden relációs operátor egy BOOLEAN értéket ad vissza, ezért ezekből az operátorokból épül fel a WHERE záradék, a JOIN feltétel és a CASE WHEN ág. Az alábbi táblázat részletesen ismerteti a relációs operátorokat és használatukat a HiveQL-ben:

Beépített Operator Leírás Operand
X = Y IGAZ, ha az X kifejezés egyenértékű az Y kifejezéssel. Egyébként HAMIS. Minden primitív típust igénybe vesz
X = Y IGAZ, ha az X kifejezés nem egyenértékű az Y kifejezéssel. Egyébként HAMIS. Minden primitív típust igénybe vesz
X < Y IGAZ, ha az X kifejezés kisebb, mint az Y kifejezés. Egyébként HAMIS. Minden primitív típust igénybe vesz
X <= Y IGAZ, ha az X kifejezés kisebb vagy egyenlő, mint az Y kifejezés. Egyébként HAMIS. Minden primitív típust igénybe vesz
X > Y IGAZ, ha az X kifejezés nagyobb, mint az Y kifejezés. Egyébként HAMIS. Minden primitív típust igénybe vesz
X >= Y IGAZ, ha az X kifejezés nagyobb vagy egyenlő, mint az Y kifejezés. Egyébként HAMIS. Minden primitív típust igénybe vesz
X NULL IGAZ, ha az X kifejezés NULL-t ad ki, egyébként HAMIS. Minden típust igénybe vesz
X NEM NULL HAMIS, ha az X kifejezés NULL értéket ad ki, egyébként IGAZ. Minden típust igénybe vesz
X MINT Y IGAZ, ha az X karakterláncminta megegyezik az Y-nal, egyébként HAMIS. Csak karakterláncokat vesz igénybe
X RLIKE Y NULL, ha X vagy Y NULL, IGAZ, ha X bármely részkarakterlánca megegyezik a Java reguláris kifejezés Y, egyébként FALSE. Csak karakterláncokat vesz igénybe
X REGEXP Y Ugyanaz, mint az RLIKE. Csak karakterláncokat vesz igénybe

Megjegyzendő, hogy a NULL értékkel való összehasonlítás soha nem ad vissza TRUE vagy FALSE értéket. Ez az oka annak, hogy a táblázat az IS NULL és az IS NOT NULL értékeket különálló operátorokként tünteti fel, ahelyett, hogy az X = NULL működését várná.

HiveQL aritmetika Operatorzok

Aritmetikai operátorokat használunk aritmetikai műveletek végrehajtására operandusokon.

  • Számtani műveletek, például összeadás, részfelosztástracAz operandusok közötti szorzás, szorzás és osztás ezeket az operátorokat használja.
  • Az operandusok típusai mind számtípusok ezekben az operátorokban.

Minta példa:

A 2 + 3 5-öt ad.

Ebben a példában a '+' az operátor, a 2 és a 3 az operandusok, a visszatérési érték pedig 5.

Az alábbi táblázat részletesen ismerteti a Hive lekérdezési nyelvben használt aritmetikai operátorokat:

Beépített Operator Leírás Operand
X+Y Visszaadja az X és Y érték hozzáadásának kimenetét. Minden számtípust igényel
X-Y A sub kimenetét adja vissza.tracY értékének kinyerése X értékből. Minden számtípust igényel
X * Y Az X és Y értékek szorzatának kimenetét adja vissza. Minden számtípust igényel
X/Y Visszaadja az Y-t X-ből osztva. Minden számtípust igényel
X % Y Az X Y-val való elosztásából származó maradékot adja vissza. Minden számtípust igényel
X & Y Az X és Y bitenkénti ÉS kimenetét adja vissza. Minden számtípust igényel
X | Y Az X és Y bitenkénti VAGY kimenetét adja vissza. Minden számtípust igényel
X ^ Y Az X és Y bitenkénti XOR kimenetét adja vissza. Minden számtípust igényel
~X Az X bitenkénti NOT kimenetét adja vissza. Minden számtípust igényel

Az utolsó négy sor bitenkénti, nem pedig hagyományos aritmetikai műveleteket használ: egész operandusok bináris ábrázolásán dolgoznak, tehát az &, | és ^ nem ugyanaz, mint a következő szakaszban tárgyalt logikai ÉS, VAGY és NEM operátorok.

HiveQL Logikai Operatorzok

Logikai operátorokat használunk az operandusokon végrehajtott logikai műveletekhez.

  • Az olyan logikai műveletek, mint az ÉS, VAGY és NEM operandusok közötti műveletek, ezeket az operátorokat használják.
  • Az operandusok mind BOOLEAN típusúak ezekben az operátorokban.

A következő táblázat részletesen ismerteti a HiveQL logikai operátorait:

Operatorzok Leírás Operands
X ÉS Y IGAZ, ha X és Y is IGAZ, ellenkező esetben HAMIS. Csak logikai típusok
X && Y Ugyanaz, mint az X ÉS Y, de itt az && szimbólumot használjuk. Csak logikai típusok
X VAGY Y IGAZ, ha X vagy Y, vagy mindkettő IGAZ, ellenkező esetben HAMIS. Csak logikai típusok
X || Y Ugyanaz, mint az X VAGY Y, de itt a || szimbólumot használjuk. Csak logikai típusok
NEM X IGAZ, ha X HAMIS, ellenkező esetben HAMIS. Csak logikai típusok
!X Ugyanaz, mint a NEM X, de itt a ! szimbólumot használjuk. Csak logikai típusok

Mivel a relációs operátorok BOOLEAN értékeket adnak vissza, a logikai operátorok azok, amelyek ezeket összefűzik: egy predikátum, mint például a salary > 50000 ÉS dept = 'Sales', az egyik családot a másikba láncolja.

Operaösszetett típusokon

A relációs, aritmetikai és logikai operátorok mind egyetlen skaláris értékkel dolgoznak. A Hive tömb, map és struct oszlopokat is tárol, és ezeknek más mechanizmusra van szükségük a bennük lévő elemek eléréséhez. Az alábbi táblázat részletesen ismerteti az összetett típusú operátorokat, amelyek ezt a mechanizmust biztosítják:

Operatorzok Operands Leírás
A[n] Az A egy tömb, az n pedig egy egész típus Az A tömb n-edik elemét adja vissza. Az első elem indexe 0.
M[kulcs] M egy térkép és a kulcs K típusú Visszaadja a térképen található kulcshoz tartozó értéket.

Mindkét forma közönséges kifejezés, így megjelenhetnek SELECT listában, WHERE záradékban vagy GROUP BY utasításban, és egy struktúra mezőhöz pontjelöléssel, például S.field-tel érünk el zárójel helyett.

Komplex típusú konstruktorok

Ahol a fenti operátorok egy meglévő összetett oszlopot olvasnak be, a konstruktorok létrehoznak egyet. A következő táblázat részletesen ismerteti az összetett típusú konstruktorokat, amelyek a Hive-ban az összetett adattípusok – Array, Map és Struct – példányait hozzák létre.

Ebben a szakaszban az összetett típuskonstruktorokon végrehajtott műveleteket fogjuk látni.

Operatorzok Operands Leírás
sor (érték1, érték2, …) Létrehoz egy tömböt a megadott elemekkel, ahogy említettük, például val1, val2.
create_union (címke, érték1, érték2, …) Létrehoz egy unió típust a tag paraméter által hivatkozott értékkel.
térkép (kulcs1, érték1, kulcs2, érték2, …) Létrehoz egy térképet az operandusokban említett megadott kulcs/érték párokkal.
elnevezett_struktúra (név1, érték1, név2, érték2, …) Létrehoz egy Struct objektumot a megadott mezőnevekkel és az operandusokban említett értékekkel.
strukturált (érték1, érték2, érték3, …) Létrehoz egy struktúrát a megadott mezőértékekkel. A struktúra mezőnevei a következők lesznek: 1. oszlop, 2. oszlop és így tovább.

A konstruktorokat leggyakrabban egy összetett oszlopot feltöltő INSERT utasításban, vagy egy SELECT utasításban használják, amely több skaláris oszlopot csomagol egy struktúrába, mielőtt az eredményt egy másik táblába írja.

HiveQL beépített függvények

OperaA torok lefedik az összehasonlítást, a számítást és az elemek elérését, de nem kerekítenek számot, nem vágnak le karakterláncot vagy nem végzik el részelemek használatát.trackét dátum. Ez a munka a Hive beépített függvényeihez tartozik, amelyeket név szerint hívunk meg ugyanazon kifejezéseken belül, amelyekben az operátorok megjelennek. Az alábbi táblázat csoportosítja azokat a családokat, amelyekkel egy kezdő először találkozik.

Függvénycsalád Tipikus tagok Mire használják
Matematikai kerek(), padló(), mennyezet(), abs(), pow(), sqrt(), rand() Kerekítés, hatványozás és egyéb numerikus számítások egyetlen oszlopértéken.
Húr concat(), substr(), upper(), lower(), trim(), length(), regexp_replace() Tisztítás, vágás és újrareszelésping szöveget, mielőtt összehasonlítanánk vagy csoportosítanánk.
találka aktuális_dátum, év(), hónap(), dátumozott_dátum(), dátum_hozzáadás(), unix_időbélyeg() ExtracDátumrészek meghatározása és két dátum közötti intervallumok mérése.
Feltételes if(), CASE WHEN, coalesce(), nvl(), isnull() Érték kiválasztása sorszinten, és a NULL lecserélése tartalék értékre.
Gyűjtemény size(), map_keys(), map_values(), array_contains(), sort_array() A komplex típusú operátorok által elért tömb, map és struct oszlopok vizsgálata.
Típuskonverzió cast(), bináris() Egy oszlop operátor által várt típusba kényszerítése.
Aggregátum (UDAF) számláló(), összeg(), átlag(), min(), max(), gyűjtőkészlet() Több sor egyetlen értékké csukása, általában a GROUP BY mellett.

A függvénylista a Hive kiadásától függ, ezért érdemes magából a munkamenetből olvasni, nem pedig egy statikus oldalról. Ezt két utasítás teszi meg:

SHOW FUNCTIONS;

DESCRIBE FUNCTION round;

DESCRIBE FUNCTION EXTENDED round;

A SHOW FUNCTIONS kilistázza az összes regisztrált nevet, a DESCRIBE FUNCTION kinyomtatja az egysoros aláírást, az EXTENDED forma pedig használati példákat ad hozzá, ahol a megvalósító osztály biztosítja azokat. Ha nincs megfelelő beépített függvény, a Hive elfogad egy felhasználó által definiált függvény beírva Java.

HiveQL vs. SQL: Főbb különbségek

A HiveQL szándékosan kölcsönzi az SQL szintaxist, és a fenti operátortáblázatok ismerősnek tűnhetnek bárki számára, aki írt már SQL-t. Az alatta lévő végrehajtási modell nem ugyanaz, és a különbségek akkor jelennek meg, amint egy lekérdezés túllép egy egyszerű SELECT-en.

Viselkedés HiveQL Hagyományos SQL (RDBMS)
Sémakezelés Séma olvasáskor — a séma a fájl lekérdezésekor kerül alkalmazásra. Séma íráskor — a séma a sor beszúrásakor érvényesül
Sor szintű FRISSÍTÉS és TÖRLÉS Csak ACID táblákon támogatott; a felügyelt táblák alapértelmezés szerint ACID-vel rendelkeznek a Hive 3.0-tól kezdve. Alapértelmezés szerint minden táblán támogatott
Indexek Az indextámogatást eltávolították a Hive 3.0-ban (HIVE-18448); ORC vagy Parquet fájlszintű indexek és materializált nézetek váltották fel. A B-fa és más másodlagos indexek alapvető jellemzői
Végrehajtás és késleltetés Kötegelt feladatokhoz fordul Tez, MapReduce vagy más platformokon. Spark, így még a kis lekérdezések is járnak indulási költségekkel Interaktív végrehajtás, általában milliszekundumban
Tervezési cél Átviteli sebesség nagyon nagy fájlokon HDFS-en vagy objektumtárolón Alacsony késleltetésű olvasás és írás egyetlen szerveren vagy klaszteren

A kifejezésírás gyakorlati következménye kicsi, de valós. OperaAz operátorok a várt módon viselkednek, mégis egy olyan predikátumra, amelyre egy relációs adatbázis indexe alapján lenne válasz, a Hive fájlok beolvasásával ad választ, így egy partícióoszlop szűrése általában sokkal többet ér, mint maga az operátor hangolása.

GYIK

A kulcsszavak, az operátorszavak, mint például az AND vagy a LIKE, és a függvénynevek kis- és nagybetűk megkülönböztetése nélkül oldják fel a feladatot, így a SELECT és a select ugyanúgy viselkednek. A karakterlánc adatok nem: az 'Értékesítés' és az 'értékesítés' összehasonlítása HAMIS értéket ad vissza, kivéve, ha először az upper() vagy a lower() metódust alkalmazzuk.

Az X / Y mindig DUPLA értéket ad vissza, még akkor is, ha mindkét operandus egész szám, tehát a 7 / 2 a 3.5-öt adja a 3 helyett. Egész osztáshoz a DIV kulcsszót, a maradékhoz pedig a % operátort használjuk.

A számtani és összehasonlító operátorok NULL értéket adnak ki: minden NULL értéket tartalmazó kifejezés NULL értéket ad ki, nem pedig FALSE értéket. Teszteld az IS NULL vagy IS NOT NULL értékkel, és helyettesíts be egy tartalék műveletet a coalesce() vagy az nvl() operátorral, mielőtt az érték elérné az operátort.

A LIKE SQL helyettesítő karaktereket használ, ahol a % tetszőleges karaktersorozatot, a _ pedig egyet illeszt. Az RLIKE egyet illeszt. Java reguláris kifejezés az érték bármely részkarakterláncával szemben. A REGEXP az RLIKE szinonimája, és ugyanúgy viselkedik.

Először a kötés (bind), majd az összehasonlító (comparative), majd a NEM (NOT), az ÉS (AND), végül a VAGY (OR) operátorok kerülnek bevezetésre. Mivel a sorrend hosszú predikátumokban könnyen félreolvasható, zárójelek használata ajánlott, amikor az ÉS és a VAGY operátorok ugyanabban a zárójeles záradékban szerepelnek.

Igen. A relációs és logikai operátorok összekapcsolási feltételeket alkotnak, az aritmetikai operátorok csoportosíthatók.ping kulcsok, és az összetett típusú hozzáférés, mint például az M[kulcs], mindenhol érvényes, ahol egy kifejezés megengedett, beleértve a SELECT listákat, a WHERE záradékokat és az ORDER BY-t.

A gépi tanulási asszisztensek lefordítják az egyszerű nyelvű szűrőket egy jelölt predikátummá, és megjelölik a típusbeli eltéréseket, például egy karakterlánc oszlop összehasonlítását egy számmal. Mindig erősítse meg a generált operátort a fenti táblázatokkal szemben, mivel a dialektusok eltérőek a Hive-ok között. Spark SQL és Presto.

Jól kezeli a gyakori predikátumokat, és egy rövid megjegyzésből javasol coalesce() vagy CASE WHEN mintákat. Más motorokból származó szintaxist is beépít, ezért a lekérdezés futtatása előtt ellenőrizze a bitenkénti operátorokat, az összetett típusú hozzáférést és a függvényneveket a DESCRIBE FUNCTION használatával.

Foglald össze ezt a bejegyzést a következőképpen: