Skip to content
malak.cloud
  • Contact
  • Przemek Malak
  • Search Icon

malak.cloud

Cloud-native in everyday life

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.
Hi. My name is Przemek Malak. Thanks for visiting. I hope you found what I write about interesting.
If you'd like to chat with me, the easiest way is through LinkedIn.

Losowe wpisy

  • Programujemy AWS – Step Functions. Jak prosto połączyć usługi serverless w jedną całość.

    11 marca 2018
  • Jak na bieżąco monitorować koszty w AWS

    10 listopada 2021
  • AWS Lambda – Golang – Custom Runtime

    22 maja 2022
  • FaaS w chmurze IBM

    29 stycznia 2019
  • Jak utworzyć Lambda Layer w Pythonie

    9 czerwca 2022
  • Apps
  • AWS
  • CloudNative
  • Cookbook
  • Data
  • DEV
  • EN
  • GCP
  • IoT
  • Istio
  • k8s
  • Security
  • Social
  • GitHub
  • LinkedIn
© 2025   All Rights Reserved.
Ta strona korzysta z ciasteczek aby świadczyć usługi na najwyższym poziomie. Dalsze korzystanie ze strony oznacza, że zgadzasz się na ich użycie.