Organizacje zazwyczaj przechowują dane biznesowe i dane klientów w bazach danych, takich jak Usługa relacyjnych baz danych Amazon (Amazon RDS) i Amazonka Przesunięcie ku czerwienii często chcą wzbogacić te dane poprzez integrację z usługami zewnętrznymi. Jednym z takich wzbogaceń jest dodanie atrybutów przestrzennych, takich jak współrzędne lokalizacji dla adresu. Wraz z wprowadzeniem Usługa lokalizacji Amazon, masz teraz dostęp do funkcji geoprzestrzennych, takich jak wizualizacja map, geokodowanie i odwrotne geokodowanie przy użyciu dostawców danych, takich jak Esri i TUTAJ.
Co więcej, dzięki możliwości połączenia z bazami danych Amazon Redshift i RDS AWS Lambda funkcje za pomocą funkcji zdefiniowanych przez użytkownika (UDF), możesz teraz zintegrować te bazy danych z funkcjami geoprzestrzennymi dostarczanymi przez Amazon Location Service. Aby uzyskać więcej informacji na temat funkcji zdefiniowanych przez użytkownika w Amazon Redshift, zobacz Tworzenie skalarnego Lambda UDF.
W tym poście bierzemy adresy klientów przechowywane w bazie danych Amazon Redshift i wywołujemy API geokodowania Amazon Location Service, aby znaleźć współrzędne adresów i zachować je w bazie danych. Jeśli korzystasz z baz danych Amazon RDS, zobacz Uzyskaj dostęp do usługi lokalizacji Amazon z Amazon Aurora.
Wymagania wstępne
Zanim zaczniesz, upewnij się, że masz następujące wymagania wstępne:
- Zrozumienie podstawowych pojęć, takich jak AWS Zarządzanie tożsamością i dostępem (IAM) role i zasady, funkcje Lambda i Amazon Redshift.
- Klaster Amazon Redshift z tabelą zawierającą adresy klientów i następujące szczegóły: numer ulicy, nazwę ulicy, typ ulicy, nazwę gminy, kod stanu lub prowincji, kod pocztowy lub pocztowy oraz kod kraju. Potrzebujesz również kolumny, aby zapisać współrzędne adresu.
- Wybrane narzędzie programistyczne SQL do połączenia z klastrem Amazon Redshift.
- An Amazon QuickSight konto z dostępem do Amazon Redshift.
Omówienie rozwiązania
Nasze rozwiązanie składa się z następujących komponentów:
- Funkcja Lambda Pythona do wywołania
search_place_index_for_text
funkcjonować. Ta funkcja pobiera tekst i zwraca współrzędne jako wartości długości i szerokości geograficznej dla każdego wyniku wyszukiwania. - Rola IAM umożliwiająca Lambdzie wywołanie
SearchPlaceIndexForText
obsługa usługi Amazon Location Service. - Lambda UDF w bazie danych Amazon Redshift do wywołania funkcji Lambda.
- Rola uprawnień umożliwiająca Amazon Redshift wywoływanie funkcji Lambda.
- Instrukcje SQL do aktualizacji i wyboru danych współrzędnych dla rekordów w bazie danych Amazon Redshift przez wywołanie Lambda UDF.
- Zestaw danych QuickSight, który używa instrukcji SQL w celu uzyskania dostępu do danych współrzędnych.
- Analiza QuickSight, która wyświetla lokalizację adresu na wykresie geoprzestrzennym.
Poniższy diagram ilustruje naszą architekturę rozwiązania:
Aby wdrożyć rozwiązanie, wykonujemy następujące kroki:
- Skonfiguruj zasób indeksu miejsca dla usługi lokalizacyjnej Amazon.
- Utwórz wspólną funkcję geokodowania adresów.
- Wywołaj Amazon Location Service API z Amazon Redshift.
- Utwórz funkcję Lambda.
- Skonfiguruj Amazon Redshift.
- Uruchom instrukcje SQL, aby wywołać funkcję Lambda.
- Wizualizuj lokalizacje adresów w QuickSight.
Zwróć szczególną uwagę na nazwy i parametry używane w tym poście; muszą być zgodne i spójne we wszystkich składnikach rozwiązania.
Pełny kod jest dostępny w GitHub. Kod zawiera również Szablon AWS CloudFormation.
Skonfiguruj zasób indeksu miejsca dla usługi lokalizacyjnej Amazon
Amazon Location Service wykorzystuje zasób indeksu miejsca w celu zapewnienia funkcji geokodowania i odwrotnego geokodowania. Zacznijmy od tworzenie nowego zasobu indeksu miejsca. Twoje konto może mieć domyślny indeks miejsca, ale nie używamy go w tym poście, ponieważ nie jest skonfigurowany do przechowywania.
- W konsoli Amazon Location Service użyj panelu nawigacyjnego, aby uruchomić kreatora, aby utworzyć nowy indeks miejsca.
- W razie zamówieenia projektu Imię, wchodzić
placeindex.redshift
. - W razie zamówieenia projektu Dostawca danych, wybierz jednego z dostawców danych dla indeksu miejsca.
- W razie zamówieenia projektu Opcje przechowywania danych, Wybierz Tak, wyniki zostaną zapisane ponieważ zapisujemy wyniki geokodowania w polu bazy danych.
- Pozostaw wszystkie inne wartości jako domyślne i wybierz Utwórz indeks miejsca.
Używamy nazwy indeksu miejsca w kodzie Lambda jako parametru do search_place_index_for_text
Wywołanie API.
Utwórz wspólny adres geokodujący Funkcja Lambda
Następnie utwórzmy funkcję Lambda, aby wywołać API usługi lokalizacji Amazon. Używamy tego kodu funkcji ponownie dla Amazon Redshift i Amazon RDS, ponieważ bazowe wywołanie usługi jest takie samo.
Obsługa błędów została pominięta w tym fragmencie kodu ze względu na zwięzłość. Pełny kod jest dostępny w GitHub.
Używamy pliki country_code
ograniczyć search_place_index_for_text
API do danego kraju za pomocą ISO 3166-1 alfa-3 kod pocztowy. Amazon Location Service zgłasza wyjątek, jeśli dane wejściowe są dostarczane, ale nie zawierają prawidłowej wartości.
Utwórz nowy plik geocode.py
z następującym fragmentem kodu:
Wywołaj API Amazon Location Service z Amazon Redshift
Każdy węzeł obliczeniowy Amazon Redshift wywołuje równolegle funkcje Lambda, aby szybko zwrócić wyniki. Funkcja zwraca kod statusu sukcesu lub niepowodzenia wraz z wynikami. W przypadku awarii może zostać zwrócony komunikat o błędzie.
Wywołanie Amazon Redshift Lambda UDF zapewnia arguments
lista zawierająca uporządkowaną listę parametrów wejściowych reprezentujących pola rekordów bazy danych (patrz poniższy kod). Funkcja odczytuje parametry wejściowe według pozycji na liście i mapuje je na zmienne w celu przetworzenia żądania.
Interfejs oczekuje, że wyniki zostaną zwrócone w tej samej kolejności i zawierające taką samą liczbę elementów jak żądanie. Zobacz następujący kod:
W przypadku wystąpienia wyjątku funkcja może zwrócić status niepowodzenia wraz z komunikatem o błędzie:
Utwórz funkcję Lambda
Teraz tworzymy funkcję Lambda GeocodeAddresses-Redshift
za pomocą środowiska uruchomieniowego Pythona.
Obsługa błędów została pominięta w tym fragmencie kodu ze względu na zwięzłość. Pełny kod jest dostępny w GitHub.
- Utwórz plik
geocode.py
zgodnie z opisem w poprzedniej sekcji.
Ważne jest, aby ustawić dłuższy czas oczekiwania funkcji Lambda, aby przetwarzać wiele rekordów w jednym wywołaniu.
- Zastąp domyślny wygenerowany kod w
lambda_function.py
z następującym kodem:
- Ta funkcja wymaga pozwolenia na wywołanie
search_place_index_for_text
API do geokodowania adresów za pomocą indeksu miejscaplaceindex.redshift
które stworzyliśmy wcześniej. - Zaktualizuj rolę uprawnień dla funkcji Lambda, aby dodać następujące zasady wbudowane
GeocodeAddresses-Redshift-policy
:
Skonfiguruj Amazon Redshift
Teraz tworzymy nowy Lambda UDF w Amazon Redshift i konfigurujemy go tak, aby używał roli IAM, która daje uprawnienia do wywołania określonej funkcji Lambda. Aby uzyskać więcej informacji, zobacz Tworzenie skalarnego Lambda UDF.
- Utwórz rolę IAM
Redshift-Lambda-role
i dodaj następujące zasady wbudowaneRedshift-Lambda-policy
do tej roli, aby umożliwić Amazon Redshift wywołanieGeocodeAddresses-Redshift
funkcja, którą stworzyliśmy:
Musimy powiązać tę rolę uprawnień z klastrem Amazon Redshift.
- W konsoli Amazon Redshift wybierz klaster, którego chcesz użyć.
- Pod Zarządzaj rolami uprawnień, Dodaj
Redshift-Lambda-role
rolę w klastrze. - Poczekaj na modyfikację klastra i pozostań w
Available
stan.
Teraz my utworzyć zewnętrzną funkcję Amazon Redshift wywołać funkcję Lambda.
- Użyj preferowanego edytora SQL, aby połączyć się z klastrem Amazon Redshift i utworzyć nową funkcję zewnętrzną
f_geocode_address
w Amazon Redshift za pomocą następującego kodu:
Ta funkcja zewnętrzna wywołuje funkcję Lambda, korzystając z uprawnień podanych w Redshift-Lambda-role
rolę, którą stworzyliśmy.
Uruchom instrukcje SQL, aby wywołać funkcję Lambda
Jesteśmy teraz gotowi do uruchamiania instrukcji SQL, które mogą pobierać rekordy adresów z customer_address
w bazie danych Amazon Redshift i geokoduj je za pomocą usługi Amazon Location Service.
Jeśli nie masz customer_address
tabeli, możesz ją utworzyć za pomocą skryptu zawartego w pełnym kodzie w GitHub.
Możesz po prostu wybrać wyniki geokodowania jako część instrukcji SQL, jak w poniższym kodzie. Ważne jest, aby zrozumieć, że funkcje Lambda wywoływane z instrukcji SELECT SQL zawierają pola z wielu rekordów bazy danych w każdym wywołaniu. Dlatego limit czasu funkcji powinien być ustawiony na dłuższy czas, aby przetwarzać wiele rekordów w jednym wywołaniu.
Wyniki geokodowania mogą być utrwalane w osobnej tabeli bazy danych w Amazon Redshift. Następnie możemy przeanalizować zapisane wyniki JSON, aby wyodrębnić współrzędne geograficzne.
Teraz wydobądźmy współrzędne geograficzne z pola wyników.
Wizualizuj lokalizację adresu za pomocą QuickSight
Skonfigurujmy zestaw danych w QuickSight i utwórzmy analizę dla tego zestawu danych.
- Utwórz nowe źródło danych Amazon Redshift
Redshift-Geocode
przy użyciu automatycznie wykrytego lub ręcznie skonfigurowanego punktu końcowego. - Utwórz nowy zestaw danych dla źródła danych, używając poprzedniej instrukcji SELECT jako niestandardowego kodu SQL.
Teraz jesteśmy gotowi do skonfigurowania naszej analizy.
- W konsoli QuickSight utwórz nową analizę QuickSight przy użyciu zestawu danych lokalizacji adresu.
- Wybierz Punkt na mapie typ wizualny.
- Wybierz długość geograficzna i szerokość pola z listy pól i przeciągnij je do Geoprzestrzenny studnie polowe.
Powinieneś teraz zobaczyć punkty na mapie reprezentujące lokalizacje adresów klientów.
Wnioski
Gratulacje! Z powodzeniem zintegrowaliśmy usługę Amazon Location Service z Amazon Redshift i geokodowanymi danymi adresowymi w tabeli Amazon Redshift bez opuszczania naszego środowiska SQL. Wzbogaciliśmy dane adresowe o współrzędne lokalizacji. Z powodzeniem zwizualizowaliśmy również lokalizacje adresów na mapie w QuickSight. Możesz teraz zbadać rozszerzenie rozwiązania o inne funkcje usługi lokalizacyjnej Amazon, takie jak odwrotne geokodowanie, a nawet integracja z funkcjami Lambda dla dowolnej innej niestandardowej funkcjonalności.
O autorze
Parag Śrivastava jest architektem rozwiązań w Amazon Web Services (AWS), pomagającym klientom korporacyjnym w pomyślnym przyjęciu i migracji do chmury. W swojej karierze zawodowej był intensywnie zaangażowany w złożone projekty transformacji cyfrowej. Pasjonuje go również budowanie innowacyjnych rozwiązań wokół geoprzestrzennych aspektów adresów.
Źródło: https://aws.amazon.com/blogs/big-data/access-amazon-location-service-from-amazon-redshift/
- "
- 100
- dostęp
- Konto
- Przyjęcie
- Wszystkie kategorie
- Amazonka
- Amazon Web Services
- Amazon Web Services (AWS)
- analiza
- api
- Pszczoła
- architektura
- na około
- AWS
- Brytyjski
- Kolumbia Brytyjska
- Budowanie
- biznes
- wezwanie
- Kariera
- Chmura
- adopcja chmury
- kod
- Columbia
- Kolumna
- wspólny
- obliczać
- Klientów
- dane
- Baza danych
- Bazy danych
- Deweloper
- cyfrowy
- cyfrowy Transformacja
- redaktor
- Punkt końcowy
- Enterprise
- klienci korporacyjni
- Środowisko
- wydarzenie
- oczekuje
- Brak
- Łąka
- pełny
- funkcjonować
- Prowadzenie
- HTTPS
- IAM
- tożsamość
- wskaźnik
- Informacja
- zaangażowany
- IT
- szerokość
- uruchomić
- Lista
- lokalizacja
- mapa
- Mapy
- Mecz
- Nazwy
- Nawigacja
- zamówienie
- Inne
- polityka
- polityka
- projektowanie
- publiczny
- Python
- dokumentacja
- Zasób
- odpowiedź
- Efekt
- powraca
- rewers
- run
- oszczędność
- Szukaj
- Seattle
- Usługi
- zestaw
- Rozwiązania
- Przestrzenne
- SQL
- początek
- rozpoczęty
- Stan
- Zestawienie sprzedaży
- Rynek
- przechowywanie
- sklep
- ulica
- sukces
- udany
- Transformacja
- Aktualizacja
- wartość
- Vancouver
- wyobrażanie sobie
- W
- sieć
- usługi internetowe
- Wikipedia