Amazon Athena: Az interaktív lekérdező szolgáltatás magyarázata

Az Amazon Athena egy könnyen használható, interaktív lekérdező szolgáltatás, amely lehetővé teszi nagy mennyiségű adat gyors elemzését közvetlenül az Amazon S3 tárhelyről. Segítségével egyszerűen készíthetünk SQL alapú lekérdezéseket anélkül, hogy szervereket kellene kezelni.
ITSZÓTÁR.hu
49 Min Read

Az Amazon Athena egy szerver nélküli, interaktív lekérdező szolgáltatás, amely megkönnyíti az adatok elemzését közvetlenül az Amazon S3-ban tárolt fájlokból, szabványos SQL használatával. Nincs szükség szerverek kiépítésére, konfigurálására vagy felügyeletére. Az Athena automatikusan skálázódik a lekérdezések párhuzamos futtatásához, így másodperceken belül eredményt kaphat, akár petabájtos adathalmazok esetén is. Ez a szolgáltatás ideális választás ad-hoc lekérdezésekhez, naplóelemzéshez, jelentéskészítéshez és adatfeltáráshoz az adattavakon (data lakes) belül. Az Amazon Athena a nyílt forráskódú Presto lekérdező motort használja, amely rendkívül gyors és hatékony adatelemzést tesz lehetővé. A szolgáltatás csak a lekérdezett adatok mennyisége alapján számláz, ami költséghatékony megoldást nyújt a nagy volumenű adatelemzéshez.

Az Amazon S3 az adattavak alapja, mivel rendkívül tartós, skálázható és költséghatékony tárolást biztosít bármilyen típusú és méretű adat számára. Az Athena képessége, hogy közvetlenül az S3-ban tárolt adatokon végezzen lekérdezéseket, azt jelenti, hogy nem kell adatokat mozgatni vagy átalakítani, mielőtt elemezné azokat. Ez jelentősen leegyszerűsíti az adatfeldolgozási láncot és csökkenti a késleltetést. Az Athena integrálódik az AWS Glue Data Catalog szolgáltatással, amely egy központosított metaadattár az adatok sémájának és helyének tárolására. Ez lehetővé teszi, hogy az Athena automatikusan felfedezze az S3-ban tárolt adatok sémáját, vagy manuálisan definiáljon táblákat a lekérdezésekhez.

Hogyan működik az Amazon Athena?

Az Amazon Athena működési elve viszonylag egyszerű, mégis rendkívül hatékony. Amikor egy felhasználó SQL lekérdezést küld az Athenának, a szolgáltatás az alábbi lépéseket hajtja végre:

  1. Lekérdezés fogadása: A felhasználó az AWS Management Console, a JDBC/ODBC illesztőprogramok vagy az AWS SDK segítségével küldi el az SQL lekérdezést.
  2. Séma felderítése: Az Athena az AWS Glue Data Catalog-ot használja a lekérdezésben hivatkozott táblák metaadatainak (séma, adatformátum, S3 hely) lekéréséhez. Ha a tábla nem létezik, a felhasználónak először létre kell hoznia azt, vagy az AWS Glue Crawlerek segítségével automatikusan felderíteni a sémát.
  3. Lekérdezés optimalizálása és végrehajtása: Az Athena egy elosztott lekérdező motort (Presto/Trino) használ a lekérdezés elemzésére, optimalizálására és a végrehajtási terv elkészítésére. A motor csak azokat az adatokat olvassa be az S3-ból, amelyekre a lekérdezésnek szüksége van. Például, ha csak egy bizonyos oszlopra van szükség, vagy egy dátumtartományra szűr, az Athena nem olvassa be a teljes fájlt.
  4. Párhuzamos feldolgozás: Az Athena automatikusan több feldolgozó egységre osztja szét a lekérdezést, amelyek párhuzamosan dolgoznak az S3-ban lévő adatokon. Ez a masszívan párhuzamos architektúra (MPP) biztosítja a gyors válaszidőt még nagy adathalmazok esetén is.
  5. Eredmények visszaadása: A feldolgozott eredmények ideiglenesen egy S3 kimeneti helyre íródnak, majd az Athena visszaadja azokat a felhasználónak. Az eredményeket megtekintheti a konzolon, letöltheti, vagy más AWS szolgáltatásokkal integrálhatja.

Ez a folyamat teljesen szerver nélküli, ami azt jelenti, hogy a felhasználónak nem kell aggódnia a mögöttes infrastruktúra karbantartása, skálázása vagy javítása miatt. Az Athena gondoskodik mindenről, így a felhasználók kizárólag az adatok elemzésére koncentrálhatnak.

Az Amazon Athena főbb jellemzői és előnyei

Az Amazon Athena számos vonzó jellemzővel és előnnyel rendelkezik, amelyek ideális eszközzé teszik az adatok elemzéséhez az AWS felhőben:

  • Szerver nélküli (Serverless): Nincs szükség szerverek kiépítésére, konfigurálására, felügyeletére vagy javítására. Az AWS kezeli az összes infrastruktúrát, lehetővé téve a felhasználók számára, hogy kizárólag az adatok elemzésére fókuszáljanak.
  • Költséghatékony: Az Athena egy „fizess-amennyit-használsz” modellben működik, ami azt jelenti, hogy csak a lekérdezések által beolvasott adatok mennyisége alapján fizet. Nincsenek előzetes költségek, nincsenek minimális díjak, és nem kell fizetni az üresjárati időért. Ez a modell jelentős megtakarítást eredményezhet a hagyományos adatbázis-megoldásokhoz képest.
  • Rendkívüli skálázhatóság: Az Athena automatikusan skálázódik, hogy megfeleljen az adatelemzési igényeknek. Akár gigabájtos, akár petabájtos adathalmazokkal dolgozik, az Athena képes kezelni a terhelést, és másodperceken belül eredményt szolgáltatni.
  • Standard SQL támogatás: Az Athena szabványos ANSI SQL-t használ, ami azt jelenti, hogy a legtöbb adatbázis-szakember már ismeri a lekérdezőnyelvet, és azonnal elkezdheti használni a szolgáltatást. Támogatja a komplex illesztéseket, aggregációkat és ablakfüggvényeket is.
  • Közvetlen S3 integráció: Az adatoknak nem kell elhagyniuk az S3-at. Az Athena közvetlenül az S3-ban tárolt adatokon futtatja a lekérdezéseket, ami csökkenti az adatmozgatás összetettségét és költségeit.
  • Nyílt adatformátumok támogatása: Támogatja a legnépszerűbb nyílt forráskódú adatformátumokat, mint például a CSV, JSON, ORC, Parquet, Avro és mások. A Parquet és ORC oszloporientált formátumok használata jelentősen javíthatja a teljesítményt és csökkentheti a költségeket.
  • AWS Glue Data Catalog integráció: Zökkenőmentesen integrálódik az AWS Glue Data Catalog-gal, amely egy egységes metaadattár a táblainformációk számára. Ez lehetővé teszi a sémák egyszerű kezelését és megosztását más AWS szolgáltatásokkal.
  • Biztonság: Az Athena az AWS Identity and Access Management (IAM) segítségével biztosítja a finomhangolt hozzáférés-vezérlést. Támogatja az S3-ban tárolt adatok titkosítását (szerveroldali és ügyféloldali titkosítás) és a lekérdezési eredmények titkosítását is.
  • Egyszerű használat: Az AWS Management Console intuitív felületet biztosít a lekérdezések írásához, futtatásához és az eredmények megtekintéséhez. Nincs szükség komplex telepítési vagy konfigurációs lépésekre.

Használati esetek és iparági alkalmazások

Az Amazon Athena rugalmassága és költséghatékonysága révén számos különböző felhasználási esetre és iparágra alkalmas:

  • Naplóelemzés: Az egyik leggyakoribb és legelőnyösebb felhasználási eset az infrastruktúra, alkalmazások vagy hálózati naplófájlok elemzése. Az Athena segítségével gyorsan lekérdezheti a webkiszolgálók, CDN-ek, VPC Flow Logs vagy CloudTrail naplóit, hogy betekintést nyerjen a felhasználói viselkedésbe, a rendszer teljesítményébe vagy a biztonsági eseményekbe. Mivel a naplók jellemzően S3-ban tárolódnak, az Athena ideális választás a közvetlen, ad-hoc elemzéshez.
  • Ad-hoc lekérdezések és adatfeltárás: Adatkutatók, üzleti elemzők és fejlesztők számára az Athena lehetővé teszi a gyors és interaktív adatfeltárást anélkül, hogy előzetesen terhelő ETL (Extract, Transform, Load) folyamatokat kellene futtatniuk. Ez ideális a hipotézisek gyors ellenőrzésére és a nyers adatokban rejlő minták felfedezésére.
  • Adattavak (Data Lakes) elemzése: Az Athena az adattavak alapvető lekérdező motorja. Lehetővé teszi a strukturált, félig strukturált és strukturálatlan adatok elemzését, amelyek az S3-ban tárolódnak, és központosított hozzáférést biztosít a különböző forrásokból származó adatokhoz.
  • Üzleti intelligencia (BI) és jelentéskészítés: Bár az Athena nem egy hagyományos adatraktár, kiválóan alkalmas BI eszközök, például az Amazon QuickSight vagy Tableau adatokkal való ellátására. A BI eszközök közvetlenül csatlakozhatnak az Athenához JDBC/ODBC illesztőprogramokon keresztül, hogy valós idejű jelentéseket és irányítópultokat készítsenek az S3-ban lévő adatokból.
  • Adatátalakítás és ETL folyamatok: Bár az Athena elsősorban lekérdező szolgáltatás, a `CREATE TABLE AS SELECT (CTAS)` lekérdezések segítségével adatátalakításokat is végezhet, és optimalizált, particionált vagy tömörített adatkészleteket hozhat létre az S3-ban további elemzéshez. Ez lehetővé teszi az ETL folyamatok egyszerűsítését és a downstream elemzések hatékonyságának növelését.
  • IoT adatok elemzése: Az IoT eszközök hatalmas mennyiségű idősoros adatot generálnak. Ezek az adatok gyakran S3-ba kerülnek, és az Athena segítségével valós időben vagy közel valós időben elemezhetők a trendek, anomáliák vagy működési minták azonosításához.
  • Machine Learning (ML) előkészítés: Az Athena használható a nyers adatok előkészítésére gépi tanulási modellekhez. A nagy adathalmazok tisztítása, szűrése és aggregálása az Athenával történhet, mielőtt azokat az Amazon SageMaker vagy más ML szolgáltatásokba betáplálnák.

Az Athena architektúrája és komponensei

Az Athena az S3 adattárolót közvetlenül lekérdezi SQL segítségével.
Az Athena szerver nélküli, és közvetlenül az Amazon S3-ban tárolt adatokon futtat SQL lekérdezéseket.

Az Amazon Athena mögötti architektúra viszonylag egyszerű, de erőteljes, és több kulcsfontosságú AWS szolgáltatásra épül:

  1. Amazon S3 (Simple Storage Service): Ez az adattó alapja, ahol az összes nyers és feldolgozott adat tárolódik. Az S3 rendkívül tartós, skálázható és költséghatékony tárolást biztosít. Az Athena közvetlenül az S3-ból olvassa az adatokat, anélkül, hogy azokat át kellene helyeznie. Az S3 a tartós adattárolást biztosítja, míg az Athena a számítási réteget.
  2. AWS Glue Data Catalog: Ez a metaadattár a táblák sémájának, helyének, formátumának és particionálási információinak központi tárhelye. Amikor lekérdezést futtat az Athenában, az először a Glue Data Catalog-hoz fordul, hogy megtudja, hol találja meg az adatokat az S3-ban, és hogyan értelmezze azokat. Az AWS Glue Crawlerek automatikusan felfedezhetik az S3-ban lévő adatok sémáját, és feltölthetik azokat a Data Catalogba.
  3. Athena Query Engine (Presto/Trino): Az Athena a nyílt forráskódú Presto (újabban Trino) elosztott SQL lekérdező motort használja a lekérdezések végrehajtására. Ez a motor a lekérdezést több feldolgozó egységre osztja szét, amelyek párhuzamosan dolgoznak az S3-ban lévő adatokon. A Presto/Trino memóriában dolgozik (in-memory processing), ami rendkívül gyors lekérdezési teljesítményt biztosít.
  4. AWS Management Console, JDBC/ODBC illesztőprogramok, AWS SDK/CLI: Ezek a felületek és eszközök a felhasználók számára a lekérdezések indítására és az Athena szolgáltatással való interakcióra szolgálnak. A konzol egy webes felületet biztosít, a JDBC/ODBC illesztőprogramok lehetővé teszik a külső BI eszközök (pl. Tableau, Power BI) csatlakozását, az SDK-k és CLI pedig programozott hozzáférést biztosítanak.
  5. S3 Output Location: Minden lekérdezés eredménye egy megadott S3 helyre kerül, ahonnan a felhasználó letöltheti, vagy más szolgáltatások felhasználhatják. Ez az ideiglenes tárolás biztosítja, hogy a lekérdezési eredmények tartósan elérhetők legyenek, és szükség esetén újra felhasználhatók legyenek.

Ez az architektúra lehetővé teszi az Athena számára, hogy szerver nélküli módon működjön, elválasztva a számítási és tárolási rétegeket. Ez a szétválasztás kritikus a skálázhatóság és a költséghatékonyság szempontjából, mivel a tárolási és számítási erőforrások függetlenül skálázhatók és fizethetők.

Adatformátumok és tömörítés

Az Amazon Athena rugalmasan kezeli a különböző adatformátumokat, de a teljesítmény és a költséghatékonyság szempontjából nem mindegy, hogy melyiket választjuk. Az Athena a következő formátumokat támogatja:

  • CSV (Comma Separated Values): Egyszerű, ember által olvasható formátum, de nem optimalizált az analitikus lekérdezésekhez, mivel sororientált és nem tömörített. Viszont könnyű vele dolgozni, és sok rendszer alapértelmezésben generálja.
  • JSON (JavaScript Object Notation): Strukturált, de félig strukturált adatokat tárol. Rugalmas, de szintén sororientált, és a lekérdezések során az Athena-nak gyakran be kell olvasnia a teljes rekordot, még akkor is, ha csak néhány mezőre van szükség.
  • Parquet: Ez az egyik leginkább ajánlott oszloporientált formátum az Athenában. Az oszloporientált tárolás azt jelenti, hogy az adatok oszloponként vannak tárolva, nem soronként. Ez jelentősen növeli a lekérdezési teljesítményt, mivel az Athena csak azokat az oszlopokat olvassa be, amelyekre a lekérdezésnek szüksége van. Emellett a Parquet hatékonyan tömöríti az adatokat.
  • ORC (Optimized Row Columnar): Hasonlóan a Parquet-hez, az ORC is oszloporientált formátum, amely kiváló tömörítést és lekérdezési teljesítményt kínál. Gyakran használják a Hadoop ökoszisztémában.
  • Avro: Egy sorközpontú adatszerializációs formátum, amely támogatja a sémát, és gyakran használják az Apache Kafka és más stream-feldolgozó rendszerekkel.
  • Más formátumok: Az Athena támogatja még a TextFile, SequenceFile, RCFile, és Avro formátumokat is.

Tömörítés

Az adatok tömörítése kulcsfontosságú az Athena költségeinek és teljesítményének optimalizálásában. Mivel az Athena a beolvasott adatok mennyisége alapján számláz, a tömörítés csökkenti a beolvasandó adatok méretét, ezáltal csökkentve a költségeket és a lekérdezési időt. A leggyakrabban használt tömörítési algoritmusok:

  • Gzip (.gz): Általánosan használt, jó tömörítési arányt biztosít. Egész fájlokat tömörít.
  • Snappy (.snappy): Gyorsabb tömörítés és kitömörítés, de valamivel rosszabb tömörítési arány, mint a Gzip. Gyakran használják a nagy adathalmazok valós idejű feldolgozásához.
  • LZO (.lzo): Jó tömörítési arány és viszonylag gyors.
  • Zstandard (ZSTD): Kiváló tömörítési arány és sebesség, egyre népszerűbb.

Az oszloporientált formátumok (Parquet, ORC) és a tömörítés kombinációja a leginkább ajánlott megközelítés az Athena-ban. Ezek a formátumok már eleve beépített tömörítési mechanizmusokkal rendelkeznek, és lehetővé teszik az oszlop-pruningot (csak a szükséges oszlopok beolvasása) és a predikátum-pushdown-t (szűrési feltételek alkalmazása az adatok olvasása előtt), ami drámaian csökkenti a lekérdezések által beolvasott adatok mennyiségét.

Adatparticionálás és hatékonyság

Az adatparticionálás egy rendkívül hatékony technika az Amazon Athena lekérdezések teljesítményének javítására és a költségek csökkentésére. A particionálás lényege, hogy az adatokat az S3-ban egy vagy több oszlop (pl. dátum, régió, ügyfélazonosító) értékei alapján külön alkönyvtárakba rendezzük.

Hogyan működik a particionálás?

Képzeljük el, hogy naplóadatokat tárolunk az S3-ban. Ahelyett, hogy az összes naplót egyetlen nagy könyvtárba tennénk, particionálhatjuk őket dátum szerint:


s3://my-log-bucket/logs/year=2023/month=01/day=01/log_file_1.gz
s3://my-log-bucket/logs/year=2023/month=01/day=02/log_file_2.gz
s3://my-log-bucket/logs/year=2023/month=02/day=01/log_file_3.gz

Amikor létrehozzuk az Athena táblát, deklaráljuk ezeket a particionálási kulcsokat (pl. `year`, `month`, `day`). Amikor egy lekérdezést futtatunk, amely magában foglalja a particionálási kulcsokat a `WHERE` záradékban (pl. `WHERE year = 2023 AND month = 01`), az Athena csak azokat az S3 alkönyvtárakat olvassa be, amelyek megfelelnek a feltételeknek. Ez drámaian csökkenti a lekérdezés által beolvasott adatok mennyiségét.

A particionálás előnyei:

  • Jelentősen gyorsabb lekérdezések: Mivel kevesebb adatot kell beolvasni az S3-ból, a lekérdezések sokkal gyorsabban lefutnak.
  • Alacsonyabb költségek: Az Athena a beolvasott adatok mennyisége alapján számláz. Kevesebb beolvasott adat = alacsonyabb költség.
  • Jobb kezelhetőség: A particionált adatok könnyebben kezelhetők és rendszerezhetők az S3-ban.
  • Kisebb memóriahasználat: A kevesebb adat feldolgozása kevesebb memóriát igényel az Athena motorjában.

Particionálás hozzáadása és kezelése:

Miután az adatok particionált formában vannak az S3-ban, két fő módon lehet a particionálási információkat az Athena táblához hozzáadni:

  1. `MSCK REPAIR TABLE`: Ez a parancs automatikusan felderíti az S3-ban lévő új partíciókat, és hozzáadja azokat a Glue Data Cataloghoz. Ez a legegyszerűbb módszer, de nagy számú partíció esetén eltarthat egy ideig.
  2. `ALTER TABLE ADD PARTITION`: Manuálisan hozzáadhat partíciókat egyenként vagy kötegelve. Ez hasznos lehet, ha pontosan tudja, mely partíciókat kell hozzáadni, és gyorsabb lehet nagyon nagy adathalmazok esetén.

A particionálási stratégia megtervezése kulcsfontosságú. Válasszon olyan particionálási kulcsokat, amelyeket gyakran használ a lekérdezések `WHERE` záradékában. A túl sok, vagy túl kevés partíció egyaránt problémát okozhat. A túl sok apró partíció metaadat-kezelési többletterhet jelenthet, míg a túl kevés partíció nem biztosít elegendő szűrési lehetőséget.

Az Athena és az AWS Glue Data Catalog

Az AWS Glue Data Catalog az Amazon Athena alapvető komponense, amely a lekérdezések végrehajtásához szükséges metaadatok tárolásáért felel. Gyakorlatilag ez a „tudásbázis” az adatokról, amelyek az S3-ban vannak tárolva.

Mi az AWS Glue Data Catalog?

Az AWS Glue egy teljes mértékben felügyelt ETL (Extract, Transform, Load) szolgáltatás. A Data Catalog ennek a szolgáltatásnak egy központi metaadattára. Nem csak az Athena, hanem más AWS szolgáltatások, mint például az Amazon Redshift Spectrum, az Amazon EMR, az Amazon QuickSight és az AWS Lake Formation is használhatja ezt a katalógust. Ez biztosítja az adatok egységes nézetét az egész AWS ökoszisztémában.

A Data Catalog szerepe az Athenában:

  1. Séma tárolása: Amikor létrehoz egy táblát az Athenában (pl. `CREATE EXTERNAL TABLE` paranccsal), a tábla sémája (oszlopnevek, adattípusok) a Glue Data Catalogban tárolódik. Ez a séma mondja meg az Athenának, hogyan értelmezze az S3-ban tárolt nyers adatokat.
  2. Adatok helyének tárolása: A Data Catalog tárolja az S3-ban lévő adatok pontos helyét (path-ját) is. Ez az információ elengedhetetlen ahhoz, hogy az Athena megtalálja és beolvassa a lekérdezéshez szükséges fájlokat.
  3. Particionálási információk: Ha az adatok particionáltak az S3-ban, a Data Catalog tárolja a partíciók metaadatait is. Ez lehetővé teszi az Athena számára, hogy a particionálási kulcsok alapján szűrje a beolvasandó S3 alkönyvtárakat, optimalizálva a lekérdezési teljesítményt és költségeket.
  4. Kereshetőség és felderíthetőség: A Data Catalog egy központi helyet biztosít az összes adatforrás metaadatainak tárolására, lehetővé téve az adatok könnyű keresését és felderítését a szervezetben.
  5. Séma evolúció: Az adatforrások sémája idővel változhat (pl. új oszlopok hozzáadása, adattípusok módosítása). A Glue Data Catalog támogatja a séma evolúcióját, lehetővé téve a séma frissítését anélkül, hogy a mögöttes adatokon változtatni kellene.

Az AWS Glue Crawlerek kulcsfontosságúak lehetnek a Data Catalog automatikus feltöltéséhez. Egy Crawler egy olyan program, amely végigpásztázza az S3 adathalmazait, azonosítja az adatformátumokat, felderíti a sémát, és felismeri a partíciókat, majd létrehozza vagy frissíti a megfelelő tábladefiníciókat a Glue Data Catalogban. Ez automatizálja a metaadat-kezelést, ami különösen hasznos a folyamatosan változó vagy nagy mennyiségű adat esetén.

Biztonság és hozzáférés-kezelés

Az Amazon Athena integrált AWS IAM szabályokkal biztosítja a hozzáférést.
Az Amazon Athena integrált biztonsági funkciókkal rendelkezik, például AWS IAM szerepkörökkel és titkosított adatátvitellel.

Az Amazon Athena kiemelten kezeli az adatok biztonságát és a hozzáférés-vezérlést, több rétegen keresztül biztosítva az adatok védelmét:

  • AWS Identity and Access Management (IAM): Az IAM az AWS alapvető szolgáltatása a felhasználók és szolgáltatások hitelesítésére és engedélyezésére. Az Athena esetében az IAM segítségével szabályozhatja, hogy ki férhet hozzá a lekérdezések futtatásához, mely S3 gyűjtőkhöz (bucketekhez) férhet hozzá az Athena, és mely S3 helyekre írhatja az eredményeket. Finomhangolt IAM házirendekkel biztosítható, hogy csak az arra jogosult felhasználók férhessenek hozzá az érzékeny adatokhoz.
  • S3 gyűjtőházirendek (Bucket Policies) és ACL-ek: Az S3 szintjén is beállíthat hozzáférés-vezérlést, amely kiegészíti az IAM házirendeket. Ezekkel a házirendekkel korlátozható a hozzáférés a gyűjtőkhöz és az objektumokhoz.
  • Adatok titkosítása (Encryption): Az Athena támogatja mind a nyugalmi (at rest), mind az átvitel közbeni (in transit) adatok titkosítását.
    • Nyugalmi adatok titkosítása (Encryption at Rest):
      • SSE-S3 (Server-Side Encryption with S3-managed keys): Az S3 kezeli a titkosítási kulcsokat.
      • SSE-KMS (Server-Side Encryption with AWS KMS-managed keys): Az AWS Key Management Service (KMS) segítségével kezeli a kulcsokat, ami nagyobb kontrollt és auditálhatóságot biztosít.
      • CSE-KMS (Client-Side Encryption with AWS KMS-managed keys): Az adatok titkosítása az ügyféloldalon történik, mielőtt feltöltődnének az S3-ba.

      Az Athena zökkenőmentesen működik titkosított S3 adatokkal.

    • Átvitel közbeni adatok titkosítása (Encryption in Transit): Az Athena és az S3 közötti összes adatforgalom SSL/TLS titkosítással történik, biztosítva az adatok védelmét az átvitel során.
  • VPC Endpointok: Az Athena támogatja a Virtual Private Cloud (VPC) Endpointokat, amelyek lehetővé teszik, hogy a lekérdezések az AWS hálózatán belül maradjanak, és ne menjenek ki az internetre. Ez növeli a biztonságot és csökkenti a hálózati késleltetést.
  • AWS Lake Formation: Az AWS Lake Formation egy átfogó szolgáltatás, amely leegyszerűsíti az adattavak kiépítését, biztonságossá tételét és kezelését. Az Lake Formation finomhangolt, oszlopszintű hozzáférés-vezérlést biztosít az Athena táblákhoz, lehetővé téve, hogy csak bizonyos oszlopokhoz vagy sorokhoz adjon hozzáférést a felhasználóknak, anélkül, hogy duplikálnia kellene az adatokat vagy összetett nézeteket kellene létrehoznia. Ez különösen hasznos az érzékeny adatok (pl. személyes adatok) védelmében.
  • Auditálás és naplózás: Az AWS CloudTrail naplózza az Athena-ban végrehajtott összes API-hívást, lehetővé téve a tevékenységek nyomon követését és auditálását. Ez segít a biztonsági események azonosításában és a megfelelőségi követelmények teljesítésében.

Ezek a biztonsági mechanizmusok együttesen biztosítják, hogy az Amazon Athenával végzett adatelemzés biztonságos és szabályozott környezetben történjen.

Költségoptimalizálás és teljesítményhangolás

Az Amazon Athena költséghatékony szolgáltatás, de a beolvasott adatok mennyisége alapján számláz. Ezért a költségoptimalizálás és a teljesítményhangolás szorosan összefügg, mivel a gyorsabb lekérdezések általában kevesebb beolvasott adatot jelentenek. Íme a legfontosabb stratégiák:

  1. Oszloporientált formátumok használata (Parquet, ORC):
    • Előny: Az oszloporientált formátumok, mint a Parquet és az ORC, lehetővé teszik az oszlop-pruningot. Ez azt jelenti, hogy az Athena csak azokat az oszlopokat olvassa be az S3-ból, amelyekre a lekérdezésnek szüksége van. Ha egy tábla 100 oszlopot tartalmaz, de a lekérdezés csak 5-öt használ, akkor csak az 5 oszlop adatait olvassa be. Ez drámaian csökkenti a beolvasott adatok mennyiségét és a lekérdezési időt.
    • Tipp: Konvertálja a CSV/JSON fájlokat Parquet/ORC formátumba az AWS Glue ETL jobok vagy az Athena `CREATE TABLE AS SELECT (CTAS)` lekérdezések segítségével.
  2. Adatok tömörítése:
    • Előny: A tömörítés (Gzip, Snappy, ZSTD) csökkenti a fájlok méretét az S3-ban. Mivel az Athena a *tömörítetlen* adatok mennyisége alapján számláz (de a tömörített adatokat olvassa be az S3-ból), a kisebb fájlok gyorsabban beolvashatók és kevesebb adatot kell feldolgozni a lekérdezés során.
    • Tipp: Mindig tömörítse az adatokat, mielőtt feltölti az S3-ba. Az oszloporientált formátumok gyakran beépített tömörítést is használnak.
  3. Adatparticionálás:
    • Előny: A particionálás (pl. dátum, régió szerint) lehetővé teszi az Athena számára, hogy csak azokat az S3 alkönyvtárakat olvassa be, amelyek a lekérdezés `WHERE` záradékában szereplő feltételeknek megfelelnek. Ez a predikátum-pushdown technika jelentősen csökkenti a beolvasott adatok mennyiségét.
    • Tipp: Tervezze meg a particionálási stratégiát a lekérdezési minták alapján. Gyakran használt szűrőfeltételek (pl. dátum) ideálisak a particionáláshoz. Ne felejtse el futtatni az `MSCK REPAIR TABLE` parancsot vagy manuálisan hozzáadni a partíciókat.
  4. Csak a szükséges oszlopok kiválasztása (`SELECT` záradék):
    • Előny: Kerülje a `SELECT *` használatát. Csak azokat az oszlopokat válassza ki, amelyekre valóban szüksége van. Ez különösen fontos sororientált formátumok (CSV, JSON) esetén, de oszloporientált formátumoknál is csökkenti az adatok átviteli és feldolgozási idejét.
    • Tipp: Például, `SELECT user_id, event_time FROM logs WHERE event_date = ‘2023-01-01’;` a `SELECT *` helyett.
  5. Adatok szűrése a `WHERE` záradékban (Predicate Pushdown):
    • Előny: Használjon `WHERE` záradékokat a lekérdezéseiben, hogy csökkentse a feldolgozandó sorok számát. Az Athena optimalizálja ezeket a feltételeket, és megpróbálja minél korábban alkalmazni őket a feldolgozási láncban, mielőtt az adatokat teljesen beolvasná.
    • Tipp: Minél szelektívebb a `WHERE` záradék, annál hatékonyabb a lekérdezés.
  6. `CREATE TABLE AS SELECT (CTAS)` lekérdezések használata:
    • Előny: A CTAS lekérdezésekkel optimalizált, előre particionált és tömörített táblákat hozhat létre az S3-ban. Ez különösen hasznos, ha gyakran futtat ugyanazon adatokon lekérdezéseket. A CTAS segítségével létrehozhat egy „optimalizált nézetet” a nyers adatokból.
    • Tipp: Használja a CTAS-t a nyers, heterogén adatok tisztítására, átalakítására és Parquet/ORC formátumba való konvertálására, particionálással. Ezután a downstream lekérdezéseket az optimalizált táblákon futtassa.
  7. Kisebb fájlok konszolidálása:
    • Előny: Az S3-ban tárolt túl sok apró fájl (néhány MB alatti) többletterhelést okozhat az Athena-nak a fájlok megnyitása és a metaadatok kezelése miatt. A fájlok konszolidálása nagyobb, de kezelhető méretű fájlokká (pl. 128 MB és 1 GB között) javíthatja a teljesítményt.
    • Tipp: Használjon AWS Glue ETL jobokat vagy AWS Lambda függvényeket a kisebb fájlok nagyobb, optimalizált fájlokká való összevonására.
  8. Munkafolyamatok és lekérdezési csoportok:
    • Előny: Az Athena munkafolyamatai (Workgroups) lehetővé teszik a lekérdezési erőforrások és a költségek elkülönítését a különböző csapatok vagy alkalmazások számára. Ez segít a költségek nyomon követésében és a kvóták beállításában.
    • Tipp: Hozzon létre külön munkafolyamatokat a fejlesztői, tesztelési és éles környezetekhez, vagy a különböző üzleti egységekhez.

Az Amazon Athena valódi ereje abban rejlik, hogy a számítási és tárolási rétegek szétválasztásával rendkívüli rugalmasságot és költséghatékonyságot kínál, lehetővé téve a felhasználók számára, hogy közvetlenül az S3-ban lévő, nyílt formátumú adatokon végezzenek ad-hoc SQL lekérdezéseket anélkül, hogy előre ki kellene építeniük és kezelniük kellene az infrastruktúrát.

Az Athena integrációja más AWS szolgáltatásokkal

Az Amazon Athena ereje nemcsak önmagában rejlik, hanem abban is, hogy zökkenőmentesen integrálódik az AWS ökoszisztéma más szolgáltatásaival, létrehozva egy robusztus és teljes körű adatelemzési platformot:

  • Amazon S3 (Simple Storage Service): Az Athena alappillére. Az S3 biztosítja a tartós, skálázható és költséghatékony tárolást az adatok számára. Az Athena közvetlenül az S3-ból olvassa az adatokat, így nincs szükség adatmozgatásra.
  • AWS Glue Data Catalog: Ahogy korábban említettük, a Glue Data Catalog az Athena metaadattára. Tárolja a táblák sémáját, particionálási információit és S3 helyeit. Az AWS Glue Crawlerek automatizálhatják a sémafelderítést és a katalógus feltöltését.
  • Amazon QuickSight: Az Amazon QuickSight egy szerver nélküli üzleti intelligencia (BI) szolgáltatás, amely képes vizualizálni az adatokat, és interaktív irányítópultokat létrehozni. A QuickSight natívan csatlakozik az Athenához, lehetővé téve a felhasználók számára, hogy az S3-ban tárolt adatokból származó lekérdezések alapján vizualizációkat építsenek anélkül, hogy adatokat kellene importálniuk vagy más adatbázisba kellene tölteniük.
  • AWS Lake Formation: Az Lake Formation leegyszerűsíti az adattavak kiépítését, biztonságossá tételét és kezelését. Az Lake Formation segítségével finomhangolt, oszlopszintű hozzáférés-vezérlést alkalmazhat az Athena táblákra, biztosítva, hogy a felhasználók csak azokat az adatokat lássák, amelyekre jogosultak.
  • AWS Lambda: Az AWS Lambda szerver nélküli számítási szolgáltatás, amely eseményekre reagálva futtat kódot. Használható az Athena lekérdezések automatikus indítására S3 események (pl. új fájl feltöltése) vagy ütemezett időközönként. Például egy Lambda függvény indíthat egy Athena CTAS lekérdezést, amikor új nyers adatok érkeznek az S3-ba, hogy optimalizált táblát hozzon létre.
  • AWS Step Functions: A Step Functions lehetővé teszi a szerver nélküli munkafolyamatok koordinálását. Használható komplex adatelemzési folyamatok felépítésére, amelyek több Athena lekérdezést, Lambda függvényt és más AWS szolgáltatást foglalnak magukba egy meghatározott sorrendben.
  • Amazon SageMaker: Az Amazon SageMaker egy teljes körű gépi tanulási szolgáltatás. Az Athena használható a SageMaker-rel a nyers adatok előkészítésére és tisztítására, mielőtt azokat gépi tanulási modellek betanítására használnák. Az Athena gyorsan hozzáférhetővé teszi a nagy adathalmazokat az ML szakemberek számára.
  • Amazon CloudWatch: Az Athena metrikákat küld a CloudWatch-nak, lehetővé téve a lekérdezések teljesítményének, a beolvasott adatok mennyiségének és a hibák nyomon követését. A CloudWatch riasztásokat is beállíthat a kulcsfontosságú metrikákra.
  • AWS CloudTrail: A CloudTrail naplózza az Athena-ban végrehajtott összes API-hívást, biztosítva az auditálhatóságot és a megfelelőséget.

Ezek az integrációk lehetővé teszik a felhasználók számára, hogy egy koherens és skálázható adatelemzési platformot építsenek ki az AWS-ben, kihasználva az Athena erejét a nagy adathalmazok interaktív lekérdezéséhez.

Gyakori problémák és hibaelhárítás

Bár az Amazon Athena viszonylag egyszerűen használható, előfordulhatnak olyan problémák, amelyekkel a felhasználók szembesülhetnek. Íme néhány gyakori probléma és a hozzájuk tartozó hibaelhárítási tippek:

  1. Engedélyezési hibák (Access Denied):
    • Probléma: A lekérdezés sikertelen, mert az Athena nem fér hozzá az S3 gyűjtőhöz, a Glue Data Cataloghoz vagy a kimeneti S3 helyhez.
    • Megoldás: Ellenőrizze az IAM szerepet vagy felhasználót, amelyet az Athena lekérdezés futtatásához használ. Győződjön meg róla, hogy rendelkezik a szükséges `s3:GetObject`, `s3:ListBucket`, `s3:PutObject` (kimeneti helyre), `glue:GetTable`, `glue:GetPartition`, `glue:GetDatabase` engedélyekkel. Ellenőrizze az S3 gyűjtőházirendeket is, hogy azok ne blokkolják az Athena hozzáférését.
  2. Tábla vagy oszlop nem található (Table/Column Not Found):
    • Probléma: A lekérdezés hivatkozik egy táblára vagy oszlopra, amelyet az Athena nem talál a Glue Data Catalogban.
    • Megoldás: Ellenőrizze a tábla nevét és az oszlopnevek helyesírását. Győződjön meg róla, hogy a tábla létezik a megfelelő adatbázisban a Glue Data Catalogban. Ha particionált tábláról van szó, futtassa az `MSCK REPAIR TABLE` parancsot, hogy az Athena felfedezze az új partíciókat. Ellenőrizze, hogy a sémadefiníció (oszlopnevek és típusok) megegyezik-e az S3-ban lévő adatokkal.
  3. Adatformátum vagy séma eltérés (Data Format/Schema Mismatch):
    • Probléma: Az Athena nem tudja értelmezni az S3-ban lévő adatokat a megadott séma alapján (pl. rossz adattípus, rossz elválasztó, hibás JSON).
    • Megoldás: Ellenőrizze a `CREATE EXTERNAL TABLE` parancsban megadott `ROW FORMAT`, `SERDEPROPERTIES` és `INPUTFORMAT`/`OUTPUTFORMAT` beállításokat. Győződjön meg arról, hogy az adattípusok (STRING, INT, BIGINT, DOUBLE, BOOLEAN) helyesen vannak megadva a sémában. Használjon AWS Glue Crawlert a séma automatikus felderítéséhez, majd hasonlítsa össze a felderített sémát a sajátjával.
  4. Lassú lekérdezések vagy időtúllépés (Slow Queries/Timeouts):
    • Probléma: A lekérdezések túl lassan futnak, vagy időtúllépés miatt meghiúsulnak.
    • Megoldás:
      • Particionálás: Győződjön meg róla, hogy az adatok particionáltak, és a lekérdezés használja a partíciókulcsokat a `WHERE` záradékban.
      • Oszloporientált formátumok: Használjon Parquet vagy ORC formátumot.
      • Tömörítés: Tömörítse az S3-ban lévő fájlokat.
      • `SELECT *` elkerülése: Csak a szükséges oszlopokat válassza ki.
      • Szűrés: Használjon hatékony `WHERE` záradékokat.
      • Fájlméret: Konszolidálja a túl sok apró fájlt nagyobb, optimalizált méretű fájlokká.
      • Lekérdezési komplexitás: Egyszerűsítse a lekérdezést, ha túl komplex. Érdemes lehet CTAS-t használni köztes táblák létrehozására.
  5. Túl sok partíció (Too Many Partitions):
    • Probléma: Nagyon nagy számú partíció (több százezer vagy millió) esetén az `MSCK REPAIR TABLE` parancs lassú lehet, vagy memóriaproblémákat okozhat.
    • Megoldás: Használja az `ALTER TABLE ADD PARTITION` parancsot programozottan (pl. Lambda függvényből), vagy az AWS Glue Data Catalog API-t a partíciók kezelésére. Fontolja meg a particionálási stratégia újragondolását, hogy kevesebb, de nagyobb partíciót hozzon létre.
  6. Túl sok eredmény (Too Many Results):
    • Probléma: A lekérdezés túl sok eredményt generál, ami meghaladja az Athena vagy az S3 korlátait.
    • Megoldás: Használjon `LIMIT` záradékot a lekérdezésben a visszaküldött sorok számának korlátozására. Exportálja az eredményeket S3-ba, ha nagy adathalmazzal dolgozik, és azt más eszközökkel dolgozza fel.

A CloudWatch metrikák és a CloudTrail naplók elemzése kulcsfontosságú a hibaelhárításban. Ezek az eszközök részletes információkat nyújtanak a lekérdezések végrehajtásáról, a hibákról és az erőforrás-felhasználásról.

Összehasonlítás más lekérdező eszközökkel

Az Amazon Athena szerver nélküli, gyorsabb lekérdezést kínál.
Az Amazon Athena szerver nélküli, így nincs szükség infrastruktúra-kezelésre, ellentétben sok hagyományos lekérdező eszközzel.

Az Amazon Athena egyedülálló helyet foglal el az AWS adatelemzési szolgáltatásai között. Fontos megérteni, hogyan viszonyul más, hasonló célokra használt eszközökhöz:

Jellemző Amazon Athena Amazon Redshift Spectrum Amazon EMR (Presto/Trino) Amazon Redshift Google BigQuery / Snowflake (általánosan)
Típus Szerver nélküli, interaktív lekérdező szolgáltatás Redshift kiterjesztés, külső adatok lekérdezésére Felügyelt Hadoop/Spark klaszter Felügyelt, oszloporientált adatraktár Szerver nélküli felhőalapú adatraktár
Infrastruktúra kezelés Nincs (teljesen szerver nélküli) Redshift klaszter szükséges, de Spectrum szerver nélküli Klaszter kiépítés és kezelés szükséges Klaszter kiépítés és kezelés szükséges Nincs (teljesen szerver nélküli)
Adattárolás Közvetlenül Amazon S3 Redshift klaszter (belső), S3 (külső) HDFS (belső), S3 (külső) Redshift klaszter (belső) Saját felhőalapú tároló
Költségmodell Lekérdezett adatok mennyisége alapján Lekérdezett adatok mennyisége + Redshift klaszter díja Klaszter futási ideje alapján Klaszter futási ideje alapján Lekérdezett adatok mennyisége + tárolás
Lekérdező motor Presto/Trino Redshift SQL (Spektrumhoz optimalizálva) Presto/Trino, Hive, Spark SQL stb. PostgreSQL-alapú SQL Saját optimalizált SQL motorok
Ideális felhasználás Ad-hoc lekérdezések, naplóelemzés, adattó feltárás Redshift adatbázis kiterjesztése S3 adattókkal Komplex ETL, Big Data feldolgozás, ML Strukturált BI, komplex elemzések, OLAP Általános célú adatraktározás és elemzés
Adatbetöltés Nincs, közvetlenül S3-ból S3-ból betöltés Redshiftbe, vagy Spectrummal közvetlenül Nincs, közvetlenül S3-ból Szükséges az adatok betöltése Szükséges az adatok betöltése

Mikor válasszuk az Athenát?

  • Ha szerver nélküli megoldást keres, és nem akar infrastruktúrát kezelni.
  • Ha az adatai már az Amazon S3-ban vannak, és nem szeretné azokat áthelyezni.
  • Ha ad-hoc lekérdezéseket futtat, és interaktív elemzésre van szüksége.
  • Ha a költséghatékonyság kulcsfontosságú, és csak a lekérdezett adatokért akar fizetni.
  • Ha nyílt forráskódú formátumokat (Parquet, ORC) használ.
  • Ha naplóelemzést vagy adattó feltárást végez.

Mikor válasszunk mást?

  • Amazon Redshift: Ha egy hagyományos, strukturált adatraktárra van szüksége, amely magas teljesítményt nyújt komplex, ismétlődő BI lekérdezésekhez, és hajlandó klasztert kezelni.
  • Amazon Redshift Spectrum: Ha már van Redshift klasztere, és ki akarja terjeszteni azt az S3-ban tárolt adatokra anélkül, hogy azokat Redshiftbe kellene töltenie.
  • Amazon EMR: Ha komplex, nagyméretű adatfeldolgozási feladatokat (pl. Spark ETL, Hive, gépi tanulás) kell futtatnia, és nagyobb kontrollra van szüksége a klaszter felett.
  • BigQuery/Snowflake: Más felhőalapú adatraktár-megoldások, amelyek hasonló szerver nélküli élményt nyújtanak, de más felhőszolgáltatókhoz kötődnek, és jellemzően magasabb teljesítményt és funkciókat kínálnak, de potenciálisan magasabb költségekkel járhatnak a tárolás és a számítás tekintetében.

Az Athena kiváló belépési pont az adattó elemzésébe, egyszerűsége és költséghatékonysága miatt. Gyakran használják más szolgáltatásokkal kombinálva, hogy egy teljes körű adatelemzési ökoszisztémát hozzanak létre.

Az Amazon Athena jövője és fejlődése

Az Amazon Athena folyamatosan fejlődik, az AWS pedig rendszeresen ad ki új funkciókat és fejlesztéseket, hogy javítsa a szolgáltatás teljesítményét, rugalmasságát és integrációját. Néhány kulcsfontosságú terület, ahol a fejlődés várható vagy már folyamatban van:

  • Teljesítményjavulás: Az AWS folyamatosan optimalizálja a Presto/Trino motort, és bevezeti a háttérbeli teljesítményjavításokat, amelyek gyorsabb lekérdezési időt és hatékonyabb erőforrás-felhasználást eredményeznek. Ide tartoznak a továbbfejlesztett lekérdezés-optimalizálók, a jobb párhuzamosítás és a memóriakezelés.
  • Új adatformátumok és funkciók támogatása: Bár az Athena már számos adatformátumot támogat, az új és feltörekvő formátumok, valamint a speciális adattípusok támogatása várhatóan bővülni fog. Emellett az SQL funkciók és a Presto/Trino motor képességeinek folyamatos bővítése is napirenden van.
  • Fokozott biztonság és hozzáférés-vezérlés: Az AWS továbbra is fejleszti az Athena biztonsági funkcióit, különösen az AWS Lake Formation-nel való szorosabb integráció révén, amely még finomabb szemcsézettségű hozzáférés-vezérlést tesz lehetővé az adattavakon belül. Ez magában foglalhatja a sorszintű és oszlopszintű biztonsági szabályok egyszerűbb beállítását.
  • Egyszerűbb adatkezelés és ETL: Bár az Athena elsősorban lekérdező szolgáltatás, a CTAS lekérdezésekkel már most is végezhető adatátalakítás. Az AWS valószínűleg tovább egyszerűsíti az ETL folyamatokat az Athenán belül, vagy szorosabb integrációt kínál más ETL eszközökkel, például az AWS Glue-val.
  • Fejlettebb monitorozás és hibaelhárítás: Az Athena metrikáinak és naplóinak részletesebb áttekintése, valamint a hibaelhárítási eszközök továbbfejlesztése segíteni fogja a felhasználókat a lekérdezések teljesítményének elemzésében és a problémák gyorsabb azonosításában.
  • Szerver nélküli adatfeldolgozási ökoszisztéma bővítése: Az Athena szerves része az AWS szerver nélküli adatelemzési stackjének. A jövőbeli fejlesztések várhatóan tovább erősítik az integrációt más szerver nélküli szolgáltatásokkal, mint például a Lambda, Step Functions, Glue és QuickSight, hogy még zökkenőmentesebb és automatizáltabb adatelemzési munkafolyamatokat lehessen létrehozni.
  • Mesterséges intelligencia és gépi tanulás integráció: Az adatelemzés és a gépi tanulás közötti határvonal elmosódásával az Athena valószínűleg még szorosabban integrálódik az AWS AI/ML szolgáltatásaival, megkönnyítve az adatok előkészítését és a modellek betanítását.

Az Amazon Athena folyamatosan a „Cloud Data Lake” stratégia központi eleme marad, amelynek célja, hogy a vállalatok számára lehetővé tegye a hatalmas adatmennyiségek tárolását és elemzését a felhőben, rugalmasan és költséghatékonyan. A jövőbeli fejlesztések várhatóan tovább erősítik ezt a pozíciót, még szélesebb körű felhasználási eseteket lefedve.

Gyakorlati példa: Naplóelemzés Athenával

A naplóelemzés az egyik leggyakoribb és legelőnyösebb felhasználási eset az Amazon Athena számára. Tegyük fel, hogy webkiszolgáló naplókat tárolunk az S3-ban, és elemezni szeretnénk őket.

1. Adatok előkészítése az S3-ban

Először is, győződjünk meg arról, hogy a naplófájlok az S3-ban vannak tárolva. A legjobb, ha particionált formában, például dátum szerint:


s3://your-log-bucket/weblogs/year=2023/month=01/day=01/access_log_001.gz
s3://your-log-bucket/weblogs/year=2023/month=01/day=01/access_log_002.gz
s3://your-log-bucket/weblogs/year=2023/month=01/day=02/access_log_001.gz
...

A naplók lehetnek például Apache Common Log Formatban, ami valahogy így néz ki:


127.0.0.1 - - [10/Nov/2023:14:15:20 +0000] "GET /index.html HTTP/1.1" 200 1024 "-" "Mozilla/5.0"

2. Athena tábla létrehozása

Nyissa meg az AWS Athena konzolt. Válassza ki az adatbázist (vagy hozzon létre egy újat). Ezután hozzon létre egy külső táblát, amely az S3-ban lévő naplókat reprezentálja. Használhatja a Grok SerDe-t a komplex naplóformátumok elemzéséhez, de most egy egyszerűbb példát nézünk, ahol reguláris kifejezésekkel (Regex SerDe) dolgozunk.


CREATE EXTERNAL TABLE IF NOT EXISTS web_access_logs (
  ip STRING,
  log_timestamp STRING,
  request_method STRING,
  request_uri STRING,
  request_protocol STRING,
  status_code INT,
  bytes_sent INT,
  referrer STRING,
  user_agent STRING
)
PARTITIONED BY (
  year STRING,
  month STRING,
  day STRING
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
  'input.regex'='([^ ]*) - - \\[(.*?)\\] "(.*?) (.*?) (.*?)" ([^ ]*) ([^ ]*) "(.*?)" "(.*?)"',
  'output.format.string'='%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s'
)
LOCATION 's3://your-log-bucket/weblogs/'
TBLPROPERTIES ('classification'='csv');

Magyarázat:
* `web_access_logs`: A tábla neve.
* `ip`, `log_timestamp`, stb.: Az oszlopok nevei és adattípusai.
* `PARTITIONED BY (year STRING, month STRING, day STRING)`: Meghatározza a partíciós kulcsokat, amelyek megfelelnek az S3 könyvtárszerkezetnek.
* `ROW FORMAT SERDE ‘org.apache.hadoop.hive.serde2.RegexSerDe’`: Meghatározza, hogy a Regex SerDe-t használjuk az adatok feldolgozásához.
* `’input.regex’`: A reguláris kifejezés, amely illeszkedik a naplósorokra és kinyeri az adatokat az egyes oszlopokba.
* `LOCATION ‘s3://your-log-bucket/weblogs/’`: Az S3 gyűjtő és előtag, ahol a naplófájlok találhatók.
* `TBLPROPERTIES (‘classification’=’csv’)`: Bár Regex SerDe-t használunk, a Hive SerDe-nek szüksége van erre a tulajdonságra.

3. Partíciók hozzáadása

Miután létrehoztuk a táblát, az Athena-nak tudnia kell a partíciókról. Futtassa a következő parancsot, hogy az Athena automatikusan felderítse a partíciókat az S3-ban:


MSCK REPAIR TABLE web_access_logs;

Ez végigpásztázza az S3 `LOCATION`-jában megadott elérési utat, és hozzáadja a `year=X/month=Y/day=Z` struktúrában talált partíciókat a Glue Data Cataloghoz.

4. Lekérdezések futtatása

Most már futtathat lekérdezéseket a `web_access_logs` táblán. Ne felejtse el használni a partíciós kulcsokat a `WHERE` záradékban a teljesítmény optimalizálása érdekében.

Példa 1: Keresse meg az összes 404-es hibát 2023. január 1-jén:


SELECT
  ip,
  request_uri,
  status_code
FROM
  web_access_logs
WHERE
  year = '2023' AND month = '01' AND day = '01' AND status_code = 404
LIMIT 10;

Példa 2: Számolja meg a leggyakoribb felhasználói ügynököket 2023 januárjában:


SELECT
  user_agent,
  COUNT(*) AS request_count
FROM
  web_access_logs
WHERE
  year = '2023' AND month = '01'
GROUP BY
  user_agent
ORDER BY
  request_count DESC
LIMIT 5;

Példa 3: Átlagos bytes_sent naponta 2023 januárjában:


SELECT
  year,
  month,
  day,
  AVG(bytes_sent) AS avg_bytes
FROM
  web_access_logs
WHERE
  year = '2023' AND month = '01'
GROUP BY
  year, month, day
ORDER BY
  year, month, day;

Ezek a példák bemutatják, hogyan használható az Athena a nagy mennyiségű naplóadatok gyors és interaktív elemzésére, kihasználva a particionálás előnyeit a költségek és a teljesítmény optimalizálása érdekében.

Gyakorlati példa: CTAS és adatátalakítás

A `CREATE TABLE AS SELECT` (CTAS) lekérdezések az Amazon Athenában rendkívül hasznosak az adatok átalakítására, tisztítására és optimalizálására további elemzéshez. A CTAS segítségével létrehozhat egy új táblát az S3-ban egy meglévő lekérdezés eredményeiből. Ez különösen előnyös, ha a nyers adatok nem optimalizált formátumban vannak (pl. CSV, JSON), és szeretnénk őket oszloporientált, tömörített, particionált formátumba konvertálni.

Miért használjunk CTAS-t?

  1. Költségmegtakarítás: A CTAS-sal létrehozott optimalizált táblák (Parquet/ORC, tömörített, particionált) sokkal kevesebb adatot olvasnak be a későbbi lekérdezéseknél, ami jelentősen csökkenti az Athena költségeit.
  2. Teljesítményjavulás: Az optimalizált formátumok gyorsabb lekérdezési időt eredményeznek.
  3. Adattisztítás és átalakítás: A CTAS lekérdezésben adatátalakításokat (pl. adattípus konverzió, hiányzó értékek kezelése, aggregáció) is végezhet.
  4. Egyszerűsített elemzés: Létrehozhat „előre aggregált” vagy „tisztított” táblákat, amelyek egyszerűbbé teszik a downstream BI eszközök és elemzők számára az adatok felhasználását.

Példa: Naplóadatok optimalizálása CTAS-sal

Folytassuk az előző naplóelemzési példát. Tegyük fel, hogy a `web_access_logs` tábla CSV formátumban van, és szeretnénk azt optimalizálni Parquet formátumba, dátum és HTTP státusz kód szerint particionálva.

1. Az optimalizált tábla létrehozása CTAS-sal


CREATE TABLE optimized_web_access_logs
WITH (
  format = 'PARQUET',
  parquet_compression = 'SNAPPY',
  partitioned_by = ARRAY['year', 'month', 'day', 'status_code'],
  external_location = 's3://your-log-bucket/optimized_weblogs/'
) AS
SELECT
  ip,
  CAST(from_iso8601_timestamp(REPLACE(REPLACE(log_timestamp, ' ', 'T'), '+0000', 'Z')) AS TIMESTAMP) AS event_timestamp,
  request_method,
  request_uri,
  request_protocol,
  status_code,
  bytes_sent,
  referrer,
  user_agent,
  year,
  month,
  day
FROM
  web_access_logs
WHERE
  year = '2023' AND month = '01'; -- Példaként csak egy hónapot optimalizálunk

Magyarázat:
* `CREATE TABLE optimized_web_access_logs`: Létrehozzuk az új táblát.
* `format = ‘PARQUET’`: Az új tábla Parquet formátumban lesz tárolva.
* `parquet_compression = ‘SNAPPY’`: A Parquet fájlok Snappy tömörítést használnak.
* `partitioned_by = ARRAY[‘year’, ‘month’, ‘day’, ‘status_code’]`: Az új tábla particionálva lesz év, hónap, nap és HTTP státusz kód szerint. Ez még finomabb szűrést tesz lehetővé a későbbi lekérdezéseknél.
* `external_location = ‘s3://your-log-bucket/optimized_weblogs/’`: Az S3 hely, ahová az optimalizált adatok kerülnek. Fontos, hogy ez egy *külön* hely legyen a nyers adatoktól.
* `SELECT … FROM web_access_logs`: A lekérdezés, amely kiválasztja és átalakítja az adatokat a forrás táblából.
* `CAST(from_iso8601_timestamp(REPLACE(REPLACE(log_timestamp, ‘ ‘, ‘T’), ‘+0000’, ‘Z’)) AS TIMESTAMP) AS event_timestamp`: Itt átalakítjuk a `log_timestamp` stringet egy szabványos `TIMESTAMP` típussá, ami jobb az időalapú elemzésekhez.
* Belefoglaljuk a `year`, `month`, `day` oszlopokat a `SELECT` záradékba, hogy azok particionálási kulcsokként használhatók legyenek az új táblában. A `status_code` oszlopot is hozzáadjuk a particionáláshoz.
* `WHERE year = ‘2023’ AND month = ’01’`: Szűrhetünk az adatokon, ha csak egy részét szeretnénk optimalizálni, vagy darabokban szeretnénk futtatni a CTAS-t nagy adathalmazok esetén.

2. Lekérdezés az optimalizált táblán

Miután a CTAS lekérdezés lefutott és létrehozta az `optimized_web_access_logs` táblát, futtathatunk rajta lekérdezéseket. Ezek a lekérdezések sokkal gyorsabbak és költséghatékonyabbak lesznek.


SELECT
  request_uri,
  COUNT(*) AS error_count
FROM
  optimized_web_access_logs
WHERE
  year = '2023' AND month = '01' AND day = '01' AND status_code = 404
GROUP BY
  request_uri
ORDER BY
  error_count DESC
LIMIT 5;

Figyelje meg, hogy most a `status_code` is szerepel a `WHERE` záradékban, mint partíciós kulcs, ami tovább szűri a beolvasott adatokat. Ezáltal az Athena csak azokat a fájlokat olvassa be az S3-ból, amelyek pontosan megfelelnek a `year=2023/month=01/day=01/status_code=404` útvonalnak, maximalizálva a teljesítményt és minimalizálva a költségeket.

A CTAS egy erőteljes eszköz az adattavakban lévő adatok optimalizálására és előkészítésére, lehetővé téve a hatékonyabb és költséghatékonyabb elemzést.

A Presto/Trino motor szerepe

A Presto/Trino motor gyors, elosztott SQL lekérdezéseket tesz lehetővé.
A Presto/Trino motor lehetővé teszi az Amazon Athena számára, hogy nagy méretű adatokat gyorsan és hatékonyan elemezzen.

Az Amazon Athena mögött a nyílt forráskódú Presto (és újabban Trino) elosztott SQL lekérdező motor áll. Ez a motor a szolgáltatás „agya”, amely lehetővé teszi az adatok gyors és hatékony elemzését az S3-ban.

Mi az a Presto/Trino?

A Presto (eredetileg a Facebook fejlesztette ki) egy elosztott SQL lekérdező motor, amelyet nagy adathalmazok interaktív elemzésére terveztek. Képes adatokat lekérdezni különböző forrásokból, beleértve a HDFS-t, az S3-at, a Cassandra-t, a MySQL-t és sok mást. A Trino a Presto egy „fork”-ja, amelyet a Presto eredeti fejlesztői hoztak létre, és a jövőbeli fejlesztések fókusza. Az AWS Athena a Presto motor egy optimalizált, felügyelt változatát használja.

Miért használja az Athena a Presto/Trino-t?

  1. Interaktív lekérdezési teljesítmény: A Presto/Trino-t kifejezetten az alacsony késleltetésű, interaktív lekérdezésekre tervezték. Memóriában dolgozik (in-memory processing) és párhuzamosan hajtja végre a lekérdezéseket a klaszter több csomópontján. Ez a képesség kritikus az Athena azon ígéretéhez, hogy gyorsan válaszoljon a felhasználói lekérdezésekre.
  2. Standard SQL támogatás: A Presto/Trino támogatja a szabványos ANSI SQL-t, ami megkönnyíti a felhasználók számára az adatok lekérdezését a már meglévő SQL tudásukkal. Támogatja a komplex illesztéseket, aggregációkat, ablakfüggvényeket és számos más SQL funkciót.
  3. Elosztott architektúra: A Presto/Trino elosztott architektúrája lehetővé teszi az Athena számára, hogy automatikusan skálázódjon a lekérdezési terheléshez. Amikor egy lekérdezés elindul, az Athena dinamikusan allokálja a szükséges Presto dolgozókat a feladat végrehajtásához.
  4. Adatforrás-függetlenség (Connectors): A Presto/Trino konnektorokon keresztül képes adatokat lekérdezni különböző adatforrásokból. Az Athena esetében a fő konnektor az S3-hoz és a Glue Data Cataloghoz való csatlakozást biztosítja. Ez a rugalmasság lehetővé teszi az Athena számára, hogy „külső” táblákat kezeljen az S3-ban anélkül, hogy az adatokat importálni kellene.
  5. Oszloporientált feldolgozás: Bár a Presto alapvetően sororientált lekérdező motor, optimalizálva van az oszloporientált formátumok (Parquet, ORC) hatékony kezelésére. Képes az oszlop-pruningra és a predikátum-pushdownra, ami jelentősen csökkenti a beolvasott adatok mennyiségét és javítja a teljesítményt.

Hogyan kezeli az Athena a Presto/Trino-t?

Az Amazon Athena teljes mértékben felügyeli a Presto/Trino motor infrastruktúráját. Ez azt jelenti, hogy a felhasználóknak nem kell aggódniuk a klaszterek kiépítése, a szoftver telepítése, a frissítések, a javítások, a skálázás vagy a hibaelhárítás miatt. Az Athena automatikusan kezeli ezeket a feladatokat a háttérben. Amikor egy lekérdezés érkezik, az Athena automatikusan elindít (vagy újrahasznosít) Presto dolgozókat, amelyek feldolgozzák a lekérdezést, majd leállítják őket, amikor már nincs rájuk szükség. Ez a „pay-per-query” modell alapja, ahol csak a ténylegesen felhasznált számítási erőforrásokért fizet.

A Presto/Trino alapvető szerepet játszik az Amazon Athena képességében, hogy gyors, skálázható és költséghatékony adatelemzést biztosítson az S3-ban tárolt adatokon.

Share This Article
Leave a comment

Vélemény, hozzászólás?

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük