Skip to content
malak.cloud
  • Kontakt
  • O mnie
  • Search Icon

malak.cloud

Cloud Native na co dzień

Dane w plikach CSV, JSON i SQL? Tak. AWS Athena

Dane w plikach CSV, JSON i SQL? Tak. AWS Athena

22 września 2017

Kilka dni temu okazało się, że będę musiał popracować trochę z plikami tekstowymi, w których zapisane są lokalizacje GPS. Pliki zapisane są w formacie JSON, wiele lokalizacji w jednym pliku. Dwa pliki to jeden dzień zbierania danych (dwa serwery zbierające dane). Problem polegał na tym, że potrzebuję lokalizacje dotyczące konkretnego wydarzenia, a więc miejsca i czasu. W jednym pliku mogą być dane dotyczące lokalizacji z kilku dni, ale przesłane tego, konkretnego dnia. Cache w urządzeniach itp.

Pierwsze pomysły to jakieś programy odpalane na EC2, Lambdy, ściąganie i parsowanie plików lokalnie. Przypomniałem sobie jednak o jednej z usług Amazon Web Services, a mianowicie o Athena. Dziś będzie więc wpis bez programowania.

AWS Athena

Czym jest ta Athena? Jest to usługa, która pozwala nam na analizowanie danych zapisanych w S3 za pomocą standardowego języka SQL. Jako jedna z usług serverless, nie wymaga od nas zarządzania jakąkolwiek insfrastrukturą. Płacimy oczywiście tylko za użycie. W tej chwili jest to 5$ za przeskanowanie 1TB danych.

Tworzymy tabele

W pierwszym kroku musimy opisać Athenie jakoś nasze dane. W tym celu tworzymy tabelę odzwierciedlającą strukturę naszych danych. Athena od operacji DDL używa Hive, pod maską którego pracują serializery, nazwane SerDe. Mamy odstępne serlializery między innymi dla CSV, JSON, Parquet. Pełna lista jest dostępna oczywiście w FAQ usługi. Nie jest możliwe niestety dodanie własnych serializerów.

Przyjmijmy, że mamy w naszym koszyku S3 pliki, które zawierają dane w formacie

{
	"deviceid" : 1,
	"longitude" : 50.012345,
	"latitude" : 18.0987,
	"timestamp" : 1501624834
},
{
	"deviceid" : 12,
	"longitude" : 51.012345,
	"latitude" : 19.0987,
	"timestamp" : 1501624844
}

I mamy takich plików sporo. Każdy z nich zawiera identfikator jakiegoś urządzenia, jego lokalizację, oraz czas lokalizacji.

Idziemy więc do Atheny i dla porządku tworzymy sobie jakąś bazę danych do testów:

Tworzymy bazę danych

i po jej utworzeniu przechodzimy to konfiguracji naszej tabeli

Dodajemy tabelę

 

W pierwszym kroku nadajemy naszej tabeli nazwę oraz wskazujemy bucket S3, z którego Athena ma pobierać dane

Bucket s3

określamy format danych, w których mamy dane

Format danych

i przechodzimy do tworzenia kolumn. W naszym przypadku powinniśmy zdefiniować poniższe pola

Definicja danych

Klikamy next i nie zawracamy sobie na razie głowy partycjami. Tworzymy tabelę.

Zamiast korzystać z wizarda, możemy oczywiście tworzyć struktury za pomocą DDL. W naszym przypadku taki sam rezultat dałoby polecenie o treści

CREATE EXTERNAL TABLE IF NOT EXISTS devdiariesdemo.lokalizacje (
  `deviceid` bigint,
  `latitude` float,
  `longitude` float,
  `timestamp` bigint
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
  'serialization.format' = '1'
) LOCATION 's3://pmathenatest/'
TBLPROPERTIES ('has_encrypted_data'='false')

Korzystamy

Od tego momentu możemy na naszych danych do woli korzystać z SQL-a. Wyniki naszych zapytań lądują także na S3.

Każdy (tak myślę) ma w swoich zasobach AWS bazę sampledb. Możemy się więc także na początek pobawić Atheną bez korzystania z własnych danych. Nie o to chodzi, ale na początek możemy i tak.

Athena sample db

 

Fajne. Zaoszczędziło mi to mnóstwo czasu i pracy. W wolnej chwili trzeba będzie głębiej się temu przyjrzeć.

Jakwidać, wystarczą dwa proste kroki. Upload danych do S3 i utworzenie tabeli na podstawie pliku. I już można w prosty sposób przetwarzać pliki tekstowe.

 


AWS, Data
AWS

Post navigation

PREVIOUS
Zdałem egzamin AWS CSAA
NEXT
API Gateway – Autoryzacja
Comments are closed.
Cześć. Nazywam się Przemek Malak. Dzięki za wizytę. Mam nadzieję, że to o czym piszę Cię zainteresowało. Jeżeli chcesz ze mną pogadać, najłatwiej będzie przez LinkedIn.

Losowe wpisy

  • API Gateway – Autoryzacja

    6 października 2017
  • Zombie apokalipsa w Łodzi

    14 lutego 2018
  • AWS Lambda i idempotentność

    21 marca 2022
  • Łączymy Amazon GuardDuty z MS Teams i Slackiem

    1 maja 2021
  • Jak skasować pliki w S3 przy usuwaniu stacka Cloudformation

    18 stycznia 2022
  • Apps
  • AWS
  • CloudNative
  • Cookbook
  • Data
  • DEV
  • GCP
  • IoT
  • Istio
  • k8s
  • Security
  • Social
  • GitHub
  • LinkedIn
© 2023   All Rights Reserved.