Amazon Athena-ն առանց սերվերի և ինտերակտիվ հարցումների ծառայություն է, որը թույլ է տալիս հեշտությամբ վերլուծել տվյալները Amazon Simple Storage Service-ում (Amazon S3) և 25-ից ավել տվյալների աղբյուրներում, ներառյալ ներքին տվյալների աղբյուրները կամ այլ ամպային համակարգեր՝ օգտագործելով SQL կամ Python: Athena-ի ներկառուցված հնարավորությունները ներառում են աշխարհատարածական տվյալների հարցումը. օրինակ, դուք կարող եք հաշվել Կալիֆոռնիայի յուրաքանչյուր շրջանի երկրաշարժերի թիվը: Վարչաշրջանի մակարդակով վերլուծության թերությունն այն է, որ այն կարող է ձեզ ապակողմնորոշիչ տպավորություն ստեղծել, թե Կալիֆոռնիայի որ մասերն են ամենաշատ երկրաշարժերն ունեցել: Դա պայմանավորված է նրանով, որ շրջանները հավասարաչափ չեն. մի կոմսություն կարող է ավելի շատ երկրաշարժեր ունենալ միայն այն պատճառով, որ այն մեծ կոմսություն է: Ի՞նչ կլիներ, եթե մենք ուզենայինք հիերարխիկ համակարգ, որը թույլ կտա մեզ մեծացնել և փոքրացնել՝ տարբեր հավասարաչափ աշխարհագրական տարածքների վերաբերյալ տվյալները համախմբելու համար:
Այս գրառման մեջ մենք ներկայացնում ենք լուծում, որն օգտագործում է Uber-ի վեցանկյուն հիերարխիկ տարածական ինդեքսը (H3)՝ երկրագունդը հավասարաչափ վեցանկյունների բաժանելու համար: Այնուհետև մենք օգտագործում ենք Athena օգտագործողի կողմից սահմանված ֆունկցիան (UDF)՝ որոշելու համար, թե որ վեցանկյունում է տեղի ունեցել յուրաքանչյուր պատմական երկրաշարժ: Քանի որ վեցանկյունները հավասար չափերի են, այս վերլուծությունը տալիս է արդարացի տպավորություն, թե որտեղ են հակված երկրաշարժերը:
Վերջում մենք կներկայացնենք ստորև ներկայացվածի նման պատկերացում, որը ցույց է տալիս պատմական երկրաշարժերի թիվը ԱՄՆ-ի արևմտյան տարբեր շրջաններում:
H3-ը գլոբուսը բաժանում է հավասար չափի կանոնավոր վեցանկյունների։ Վեցանկյունների թիվը կախված է ընտրված լուծաչափից, որը կարող է տատանվել 0-ից (122 վեցանկյուն, յուրաքանչյուրը եզրերի երկարությամբ մոտ 1100 կմ) մինչև 15 (569,707,381,193,162 վեցանկյուն, որոնցից յուրաքանչյուրը եզրերի երկարությամբ մոտ 50 սմ է): H3-ը հնարավորություն է տալիս վերլուծել տարածքի մակարդակով, և յուրաքանչյուր տարածք ունի նույն չափն ու ձևը:
Լուծման ակնարկ
Լուծումը ընդլայնում է Athena-ի ներկառուցված աշխարհատարածական հնարավորությունները՝ ստեղծելով UDF, որը սնուցվում է AWS Lambda-ով: Վերջապես, մենք օգտագործում ենք Amazon SageMaker նոթատետր՝ Athena հարցումները գործարկելու համար, որոնք ներկայացվում են որպես choropleth քարտեզ: Հետևյալ դիագրամը ցույց է տալիս այս ճարտարապետությունը:
Ավարտից մինչև վերջ ճարտարապետությունը հետևյալն է.
- Պատմական երկրաշարժերի CSV ֆայլը վերբեռնվում է S3 դույլի մեջ:
- AWS Glue արտաքին աղյուսակը ստեղծվել է երկրաշարժի CSV-ի հիման վրա:
- Lambda ֆունկցիան հաշվարկում է H3 վեցանկյունները պարամետրերի համար (լայնություն, երկայնություն, լուծում): Ֆունկցիան գրված է Java-ով և կարելի է անվանել որպես UDF՝ օգտագործելով հարցումները Athena-ում:
- SageMaker նոթատետրը օգտագործում է AWS SDK պանդաների փաթեթ՝ Athena-ում SQL հարցումը գործարկելու համար, ներառյալ UDF-ը:
- Plotly Express փաթեթը ներկայացնում է յուրաքանչյուր վեցանկյունում երկրաշարժերի քանակի խորոպլետ քարտեզ:
Նախադրյալներ
Այս գրառման համար մենք օգտագործում ենք Athena-ն՝ կարդալու տվյալները Amazon S3-ում՝ օգտագործելով AWS Glue Data Catalog-ում սահմանված աղյուսակը՝ կապված մեր երկրաշարժերի տվյալների հետ: Թույլտվությունների առումով երկու հիմնական պահանջ կա.
Կարգավորեք Amazon S3-ը
Առաջին քայլը երկրաշարժերի տվյալների բազան պահելու համար S3 դույլ ստեղծելն է, հետևյալ կերպ.
- Ներբեռնեք պատմական երկրաշարժերի CSV ֆայլը GitHub-ից:
- Amazon S3 վահանակի վրա ընտրեք Դույլեր նավիգացիոն վահանակում:
- Ընտրեք Ստեղծեք դույլ.
- Համար Դույլի անվանումըմուտքագրեք գլոբալ եզակի անուն ձեր տվյալների դույլի համար:
- Ընտրեք Ստեղծել թղթապանակև մուտքագրեք թղթապանակի անունը
earthquakes
. - Վերբեռնեք ֆայլը S3 դույլ: Այս օրինակում մենք վերբեռնում ենք
earthquakes.csv
ֆայլը դեպիearthquakes
նախածանց.
Ստեղծեք սեղան Աթենայում
Սեղան ստեղծելու համար անցեք Athena կոնսոլ: Լրացրեք հետևյալ քայլերը.
- Athena վահանակի վրա ընտրեք Հարցման խմբագիր.
- Ընտրեք ձեր նախընտրած աշխատանքային խումբը՝ օգտագործելով բացվող ընտրացանկը:
- SQL խմբագրիչում օգտագործեք հետևյալ կոդը՝ կանխադրված տվյալների բազայում աղյուսակ ստեղծելու համար.
Ստեղծեք Lambda ֆունկցիա Athena UDF-ի համար
Athena UDF-ների կառուցման վերաբերյալ մանրամասն բացատրության համար տե՛ս «Հարցումներ օգտատիրոջ կողմից սահմանված գործառույթներով»: Մենք օգտագործում ենք Java 11 և Uber H3 Java binding՝ H3 UDF-ը կառուցելու համար: Մենք տրամադրում ենք UDF-ի իրականացումը GitHub-ում:
Լամբդայի միջոցով UDF-ի տեղակայման մի քանի տարբերակ կա: Այս օրինակում մենք օգտագործում ենք AWS Management Console-ը: Արտադրության տեղակայման համար դուք հավանաբար ցանկանում եք օգտագործել ենթակառուցվածքը որպես կոդ, ինչպիսին է AWS Cloud Development Kit-ը (AWS CDK): AWS CDK-ն օգտագործելու Lambda ֆունկցիան գործարկելու համար տեղեկության համար այցելեք նախագծի կոդերի շտեմարան: Տեղակայման մեկ այլ հնարավոր տարբերակ է AWS Serverless Application Repository (SAR) օգտագործումը:
Տեղադրեք UDF-ը
Տեղադրեք Uber H3 պարտադիր UDF-ը, օգտագործելով վահանակը հետևյալ կերպ.
- Գնացեք GitHub պահեստի երկուական գրացուցակ և ներբեռնեք
aws-h3-athena-udf-*.jar
ձեր տեղական աշխատասեղանին: - Ստեղծեք Lambda ֆունկցիա, որը կոչվում է
H3UDF
հետ Runtime սահմանված է Java 11 (Corretto)և Ճարտարապետություն սահմանված է x86_64. - Վերբեռնեք
aws-h3-athena-udf*.jar
ֆայլ։ - Փոխեք մշակողի անունը
com.aws.athena.udf.h3.H3AthenaHandler
. - Մեջ Ընդհանուր կոնֆիգուրացիա բաժին, ընտրիր Խմբագրել Lambda ֆունկցիայի հիշողությունը սահմանելու համար 4096 ՄԲ, որը հիշողության քանակն է, որն աշխատում է մեր օրինակների համար: Հնարավոր է, որ ձեզ անհրաժեշտ լինի հիշողության չափն ավելի մեծ սահմանել ձեր օգտագործման դեպքերի համար:
Օգտագործեք Lambda ֆունկցիան որպես Athena UDF
Lambda ֆունկցիան ստեղծելուց հետո դուք պատրաստ եք այն օգտագործել որպես UDF: Հետևյալ սքրինշոթը ցույց է տալիս գործառույթի մանրամասները:
Այժմ դուք կարող եք օգտագործել գործառույթը որպես Athena UDF: Athena վահանակի վրա գործարկեք հետևյալ հրամանը.
Այն udf/examples
GitHub պահոցի թղթապանակը ներառում է Athena հարցումների ավելի շատ օրինակներ:
UDF-ների մշակում
Այժմ, երբ մենք ձեզ ցույց տվեցինք, թե ինչպես տեղադրել UDF-ը Athena-ի համար՝ օգտագործելով Lambda, եկեք ավելի խորանանք, թե ինչպես զարգացնել այս տեսակի UDF-ները: Ինչպես բացատրվում է Querying with user-ի սահմանված գործառույթներով, UDF մշակելու համար մենք նախ պետք է ներդրենք մի դաս, որը ժառանգում է. UserDefinedFunctionHandler
. Այնուհետև մենք պետք է դասի ներսում իրականացնենք գործառույթները, որոնք կարող են օգտագործվել որպես Athena-ի UDF-ներ:
Մենք սկսում ենք UDF-ի իրականացումը դասի սահմանմամբ H3AthenaHandler
որը ժառանգում է UserDefinedFunctionHandler
. Այնուհետև մենք իրականացնում ենք գործառույթներ, որոնք գործում են որպես Uber H3 Java կապում սահմանված գործառույթների փաթեթավորում: Մենք համոզվում ենք, որ H3 Java binding API-ում սահմանված բոլոր գործառույթները քարտեզագրված են, որպեսզի դրանք կարողանան օգտագործվել Athena-ում որպես UDF: Օրինակ, մենք քարտեզագրում ենք lat_lng_to_cell_address
ֆունկցիան, որն օգտագործվում է նախորդ օրինակում latLngToCell
H3 Java կապի մասին:
Java-ի պարտադիր զանգի գագաթին, շատ գործառույթներ են H3AthenaHandler
ստուգեք, թե արդյոք մուտքային պարամետրը զրոյական է: Զեղչի ստուգումը օգտակար է, քանի որ մենք չենք ենթադրում, որ մուտքագրումը ոչ զրո է: Գործնականում զրոյական արժեքները H3 ինդեքսի կամ հասցեի համար արտասովոր չեն:
Հետևյալ կոդը ցույց է տալիս ծրագրի իրականացումը get_resolution
գործառույթ:
Որոշ H3 API գործառույթներ, ինչպիսիք են cellToLatLng
վերադարձ List<Double>
երկու տարրերից, որտեղ առաջին տարրը լայնությունն է, իսկ երկրորդը` երկայնությունը: H3 UDF-ը, որը մենք իրականացնում ենք, ապահովում է գործառույթ, որը վերադարձնում է հայտնի տեքստի (WKT) ներկայացումը: Օրինակ՝ մենք տրամադրում ենք cell_to_lat_lng_wkt
որը վերադարձնում է ա Point
WKT տողի փոխարեն List<Double>
. Այնուհետև մենք կարող ենք օգտագործել ելքը cell_to_lat_lng_wkt
ներկառուցված Athena ST_GeometryFromText ֆունկցիայի հետ համատեղ՝ հետևյալ կերպ.
Athena UDF-ն աջակցում է միայն սկալային տվյալների տեսակներին և չի աջակցում ներդիր տիպերին: Այնուամենայնիվ, որոշ H3 API-ներ վերադարձնում են ներկառուցված տեսակներ: Օրինակ, ի polygonToCells
ֆունկցիան H3-ում վերցնում է ա List<List<List<GeoCoord>>>
. Մեր իրականացումը polygon_to_cells
UDF-ն ստանում է ա Polygon
Փոխարենը WKT: Հետևյալը ցույց է տալիս Athena հարցման օրինակ՝ օգտագործելով այս UDF-ը.
Վիզուալիզացիայի համար օգտագործեք SageMaker նոթատետրերը
SageMaker նոութբուքը կառավարվող մեքենայական ուսուցման հաշվարկային օրինակ է, որն աշխատում է Jupyter-ի նոութբուքի հավելվածով: Այս օրինակում մենք կօգտագործենք SageMaker նոթատետրը՝ գրելու և գործարկելու մեր կոդը՝ մեր արդյունքները պատկերացնելու համար, բայց եթե ձեր օգտագործման դեպքը ներառում է Apache Spark-ը, ապա Amazon Athena-ի օգտագործումը Apache Spark-ի համար հիանալի ընտրություն կլինի: SageMaker-ի անվտանգության լավագույն փորձի վերաբերյալ խորհրդատվության համար տե՛ս Amazon SageMaker-ի հետ անվտանգ մեքենայական ուսուցման միջավայրերի կառուցում: Դուք կարող եք ստեղծել ձեր սեփական SageMaker նոթատետրը՝ հետևելով հետևյալ հրահանգներին.
- SageMaker վահանակում ընտրեք Տետր նավիգացիոն վահանակում:
- Ընտրեք Նոթատետրի օրինակներ.
- Ընտրեք Ստեղծեք նոթատետրի օրինակ.
- Մուտքագրեք նոթատետրի օրինակի անունը:
- Ընտրեք գոյություն ունեցող IAM դերը կամ ստեղծեք դեր, որը թույլ է տալիս գործարկել SageMaker-ը և թույլ է տալիս մուտք գործել Amazon S3 և Athena:
- Ընտրեք Ստեղծեք նոթատետրի օրինակ.
- Սպասեք, մինչև նոթատետրի կարգավիճակը փոխվի
Creating
դեպիInService
. - Բացեք նոթատետրի օրինակը՝ ընտրելով Յուպիտեր կամ JupyterLab.
Ուսումնասիրեք տվյալները
Այժմ մենք պատրաստ ենք ուսումնասիրել տվյալները:
- Jupyter վահանակի վրա, տակ Նորընտրիր Տետր.
- Վրա Ընտրեք միջուկը բացվող ընտրացանկ, ընտրեք conda_python3.
- Ավելացրեք նոր բջիջներ՝ ընտրելով գումարած նշանը:
- Ձեր առաջին բջիջում ներբեռնեք հետևյալ Python մոդուլները, որոնք ներառված չեն ստանդարտ SageMaker միջավայրում.
GeoJSON-ը տարածական տվյալները JSON ձևաչափով պահելու հայտնի ձևաչափ է: Այն
geojson
մոդուլը թույլ է տալիս հեշտությամբ կարդալ և գրել GeoJSON տվյալները Python-ով: Երկրորդ մոդուլը, որը մենք տեղադրում ենք,awswrangler
, AWS SDK-ն է պանդաների համար: Սա AWS տվյալների տարբեր աղբյուրներից Pandas-ի տվյալների շրջանակների մեջ կարդալու շատ հեշտ միջոց է: Մենք այն օգտագործում ենք Աթենայի աղյուսակից երկրաշարժի տվյալները կարդալու համար: - Հաջորդը, մենք ներմուծում ենք բոլոր փաթեթները, որոնք օգտագործում ենք տվյալների ներմուծման, ձևափոխելու և պատկերացնելու համար.
- Մենք սկսում ենք ներմուծել մեր տվյալները՝ օգտագործելով
athena.read_sql._query
գործառույթը AWS SDK-ում պանդաների համար: Athena հարցումն ունի ենթահարկ, որն օգտագործում է UDF-ը՝ սյունակ ավելացնելու համարh3_cell
յուրաքանչյուր շարքումearthquakes
Աղյուսակ՝ հիմնված երկրաշարժի լայնության և երկայնության վրա։ Անալիտիկ ֆունկցիաCOUNT
Այնուհետև օգտագործվում է յուրաքանչյուր H3 բջիջում երկրաշարժերի քանակը պարզելու համար: Այս վիզուալիզացիայի համար մեզ հետաքրքրում են միայն ԱՄՆ-ի տարածքում երկրաշարժերը, ուստի մենք զտում ենք տվյալների շրջանակի տողերը, որոնք գտնվում են հետաքրքրության տարածքից դուրս.Հետևյալ սքրինշոթը ցույց է տալիս մեր արդյունքները:
Հետևեք մեր Jupyter նոթատետրում մնացած քայլերին, որպեսզի տեսնեք, թե ինչպես ենք մենք վերլուծում և պատկերացնում մեր օրինակը H3 UDF տվյալների հետ:
Պատկերացրեք արդյունքները
Մեր արդյունքները պատկերացնելու համար մենք օգտագործում ենք Plotly Express մոդուլը՝ ստեղծելու մեր տվյալների choropleth քարտեզը: Չորոպլեթ քարտեզը վիզուալիզացիայի տեսակ է, որը ստվերվում է քանակական արժեքների հիման վրա: Սա հիանալի պատկերացում է մեր օգտագործման դեպքի համար, քանի որ մենք ստվերում ենք տարբեր շրջաններ՝ հիմնվելով երկրաշարժերի հաճախականության վրա:
Ստացված վիզուալում մենք կարող ենք տեսնել Հյուսիսային Ամերիկայի տարբեր տարածքներում երկրաշարժերի հաճախականության միջակայքերը: Նկատի ունեցեք, որ այս քարտեզում H3 լուծաչափը ավելի ցածր է, քան նախկինում, ինչը ստիպում է յուրաքանչյուր վեցանկյուն ծածկել երկրագնդի ավելի մեծ տարածք:
Մաքրել
Ձեր հաշվի վրա հավելյալ գանձումներից խուսափելու համար ջնջեք ձեր ստեղծած ռեսուրսները.
- SageMaker վահանակում ընտրեք նոթատետրը և վրա Գործողություններ ընտրացանկ, ընտրեք Դադարեցրեք.
- Սպասեք, մինչև նոթատետրի կարգավիճակը փոխվի
Stopped
ապա նորից ընտրեք նոթատետրը և վրա Գործողություններ ընտրացանկ, ընտրեք Ջնջել. - Amazon S3 վահանակում ընտրեք ձեր ստեղծած դույլը և ընտրեք Դատարկ.
- Մուտքագրեք դույլի անունը և ընտրեք Դատարկ.
- Կրկին ընտրեք դույլը և ընտրեք Ջնջել.
- Մուտքագրեք դույլի անունը և ընտրեք Ջնջել դույլը.
- Lambda վահանակում ընտրեք ֆունկցիայի անունը և վրա Գործողություններ ընտրացանկ, ընտրեք Ջնջել.
Եզրակացություն
Այս գրառման մեջ դուք տեսաք, թե ինչպես կարելի է ընդլայնել գործառույթները Աթենայում աշխարհատարածական վերլուծության համար՝ ավելացնելով ձեր օգտագործողի կողմից սահմանված գործառույթը: Չնայած այս ցուցադրության ժամանակ մենք օգտագործել ենք Uber-ի H3 աշխարհատարածական ինդեքսը, դուք կարող եք բերել ձեր սեփական աշխարհատարածական ինդեքսը ձեր սեփական աշխարհատարածական վերլուծության համար:
Այս գրառման մեջ մենք օգտագործեցինք Athena, Lambda և SageMaker նոթատետրերը՝ պատկերացնելու մեր UDF-ների արդյունքները արևմտյան ԱՄՆ-ում: Կոդի օրինակները գտնվում են h3-udf-for-athena GitHub ռեպո-ում:
Որպես հաջորդ քայլ, դուք կարող եք փոփոխել այս գրառման կոդը և հարմարեցնել այն ձեր սեփական կարիքների համար՝ ձեր սեփական աշխարհագրական տվյալներից հետագա պատկերացումներ ձեռք բերելու համար: Օրինակ, դուք կարող եք պատկերացնել այլ դեպքեր, ինչպիսիք են երաշտները, ջրհեղեղները և անտառահատումները:
Հեղինակների մասին
Ջոն Թելֆորդ Amazon Web Services-ի ավագ խորհրդատու է: Նա մեծ տվյալների և տվյալների պահեստների մասնագետ է։ Ջոնն ունի համակարգչային գիտության աստիճան Բրունելի համալսարանից:
Անվար Ռիզալ մեքենայական ուսուցման ավագ խորհրդատու է՝ հիմնված Փարիզում: Նա աշխատում է AWS հաճախորդների հետ՝ մշակելու տվյալների և AI լուծումներ՝ իրենց բիզնեսը կայուն զարգացնելու համար:
Փոլին Թինգ AWS Professional Services թիմում տվյալների գիտնական է: Նա աջակցում է հաճախորդներին հասնելու և արագացնելու իրենց բիզնեսի արդյունքը՝ զարգացնելով կայուն AI/ML լուծումներ: Ազատ ժամանակ Փոլինը սիրում է ճանապարհորդել, ճամփորդել և փորձել նոր աղանդերային վայրեր։