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.

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.
