Unternehmen speichern Geschäfts- und Kundendaten typischerweise in Datenbanken wie Relationaler Amazon-Datenbankdienst (Amazon RDS) und Amazon RedShiftund möchten diese Daten oft durch die Integration mit externen Diensten anreichern. Eine solche Bereicherung besteht darin, räumliche Attribute wie Standortkoordinaten für eine Adresse hinzuzufügen. Mit der Einführung von Amazon-Standortservicehaben Sie jetzt Zugriff auf Geodatenfunktionen wie Kartenvisualisierung, Geokodierung und umgekehrte Geokodierung mithilfe von Datenanbietern wie Esri und KLICKEN SIE HIER.
Darüber hinaus mit der Möglichkeit, Amazon Redshift und RDS-Datenbanken aufzurufen AWS Lambda Funktionen über benutzerdefinierte Funktionen (UDFs) können Sie diese Datenbanken jetzt mit Geodatenfunktionen integrieren, die von Amazon Location Service bereitgestellt werden. Weitere Informationen zu benutzerdefinierten Funktionen in Amazon Redshift finden Sie unter Erstellen einer skalaren Lambda-UDF.
In diesem Beitrag nehmen wir Kundenadressen, die in einer Amazon-Redshift-Datenbank gespeichert sind, und rufen die Geokodierungs-APIs des Amazon Location Service auf, um die Koordinaten der Adressen zu finden und sie in der Datenbank zu speichern. Wenn Sie Amazon RDS-Datenbanken verwenden, lesen Sie Greifen Sie über Amazon Aurora auf den Amazon Location Service zu.
Voraussetzungen:
Bevor Sie beginnen, stellen Sie sicher, dass die folgenden Voraussetzungen erfüllt sind:
- Ein Verständnis grundlegender Konzepte wie z AWS Identity and Access Management and (IAM)-Rollen und -Richtlinien, Lambda-Funktionen und Amazon Redshift.
- Ein Amazon-Redshift-Cluster mit einer Tabelle, die Kundenadressen und die folgenden Details enthält: Straßennummer, Straßenname, Straßentyp, Gemeindename, Bundesstaats- oder Provinzcode, Post- oder Postleitzahl und Ländercode. Sie benötigen außerdem eine Spalte, um die Koordinaten für die Adresse zu speichern.
- Ein SQL-Entwicklertool Ihrer Wahl zur Verbindung mit dem Amazon-Redshift-Cluster.
- An Amazon QuickSight Konto mit Zugriff auf Amazon Redshift.
Lösungsüberblick
Unsere Lösung besteht aus folgenden Komponenten:
- Eine Python-Lambda-Funktion zum Aufrufen der
search_place_index_for_text
Funktion. Diese Funktion nimmt eine Texteingabe entgegen und gibt die Koordinaten als Längen- und Breitengradwerte für jedes Suchergebnis zurück. - Eine IAM-Rolle, die es Lambda ermöglicht, das aufzurufen
SearchPlaceIndexForText
Betrieb für Amazon Location Service. - Eine Lambda-UDF in der Amazon-Redshift-Datenbank zum Aufrufen der Lambda-Funktion.
- Eine IAM-Rolle, die es Amazon Redshift ermöglicht, die Lambda-Funktion aufzurufen.
- SQL-Anweisungen zum Aktualisieren und Auswählen der Koordinatendaten für Datensätze in der Amazon-Redshift-Datenbank durch Aufrufen der Lambda-UDF.
- Ein QuickSight-Datensatz, der die SQL-Anweisung verwendet, um auf die Koordinatendaten zuzugreifen.
- Eine QuickSight-Analyse, die den Adressstandort in einem Geodatendiagramm anzeigt.
Das folgende Diagramm veranschaulicht unsere Lösungsarchitektur:
Um die Lösung zu implementieren, führen wir die folgenden Schritte aus:
- Richten Sie eine Ortsindexressource für Amazon Location Service ein.
- Erstellen Sie eine gemeinsame Geokodierungsfunktion für Adressen.
- Rufen Sie die Amazon Location Service API von Amazon Redshift auf.
- Erstellen Sie eine Lambda-Funktion.
- Richten Sie Amazon Redshift ein.
- Führen Sie SQL-Anweisungen aus, um die Lambda-Funktion aufzurufen.
- Visualisieren Sie die Adressstandorte in QuickSight.
Achten Sie genau auf die in diesem Beitrag verwendeten Namen und Parameter. Sie müssen über alle Lösungskomponenten hinweg übereinstimmen und konsistent sein.
Der vollständige Code ist verfügbar in GitHub. Der Code enthält auch eine AWS CloudFormation-Vorlage.
Richten Sie eine Ortsindexressource für Amazon Location Service ein
Amazon Location Service verwendet eine Ortsindexressource zur Bereitstellung von Geokodierungs- und Reverse-Geokodierungsfunktionen. Beginnen wir damit Erstellen einer neuen Ortsindexressource. Ihr Konto verfügt möglicherweise über einen Standard-Ortsindex, wir verwenden ihn jedoch nicht für diesen Beitrag, da er nicht für die Speicherung konfiguriert ist.
- Verwenden Sie in der Amazon Location Service-Konsole den Navigationsbereich, um den Assistenten zum Erstellen eines neuen Ortsindex zu starten.
- Aussichten für Name und Vorname, eingeben
placeindex.redshift
. - Aussichten für DatenanbieterWählen Sie einen der Datenanbieter für Ihren Ortsindex aus.
- Aussichten für DatenspeicheroptionenWählen Ja, die Ergebnisse werden gespeichert weil wir die Geokodierungsergebnisse in einem Datenbankfeld speichern.
- Belassen Sie alle anderen Werte als Standardwerte und wählen Sie Ortsindex erstellen.
Wir verwenden den Ortsindexnamen im Lambda-Code als Parameter für den search_place_index_for_text
API-Aufruf.
Erstellen Sie eine gemeinsame Lambda-Funktion zur Geokodierung von Adressen
Als Nächstes erstellen wir eine Lambda-Funktion zum Aufrufen der Amazon Location Service API. Wir verwenden diesen Funktionscode sowohl für Amazon Redshift als auch für Amazon RDS wieder, da der zugrunde liegende Serviceaufruf derselbe ist.
Der Kürze halber wurde in diesem Codeausschnitt die Fehlerbehandlung übersprungen. Der vollständige Code ist verfügbar in GitHub.
Wir verwenden country_code
zu begrenzen search_place_index_for_text
API für ein bestimmtes Land mithilfe der ISO 3166-1 alpha-3 Landesvorwahl. Amazon Location Service löst eine Ausnahme aus, wenn eine Eingabe bereitgestellt wird, aber keinen gültigen Wert enthält.
Erstellen Sie eine neue Datei geocode.py
mit dem folgenden Codeausschnitt:
Rufen Sie die Amazon Location Service API von Amazon Redshift auf
Jeder Amazon-Redshift-Rechenknoten ruft Lambda-Funktionen parallel auf, um die Ergebnisse schnell zurückzugeben. Die Funktion gibt zusammen mit den Ergebnissen einen Erfolgs- oder Fehlerstatuscode zurück. Im Falle eines Fehlers kann eine Fehlermeldung zurückgegeben werden.
Der Amazon Redshift Lambda UDF-Aufruf bietet eine arguments
Liste mit einer geordneten Liste von Eingabeparametern, die Felder der Datenbankdatensätze darstellen (siehe den folgenden Code). Die Funktion liest die Eingabeparameter anhand der Listenposition und ordnet sie Variablen zur Verarbeitung der Anfrage zu.
Die Schnittstelle erwartet, dass Ergebnisse in derselben Reihenfolge zurückgegeben werden und dieselbe Anzahl von Elementen wie die Anforderung enthalten. Siehe den folgenden Code:
Im Ausnahmefall kann die Funktion den Fehlerstatus zusammen mit einer Fehlermeldung zurückgeben:
Erstellen Sie eine Lambda-Funktion
Wir erstellen jetzt eine Lambda-Funktion GeocodeAddresses-Redshift
mit der Python-Laufzeitumgebung.
Der Kürze halber wurde in diesem Codeausschnitt die Fehlerbehandlung übersprungen. Der vollständige Code ist verfügbar in GitHub.
- Erstellen Sie die Datei
geocode.py
wie im vorherigen Abschnitt beschrieben.
Es ist wichtig, das Zeitlimit für die Lambda-Funktion auf einen längeren Zeitraum festzulegen, um mehrere Datensätze in einem Aufruf zu verarbeiten.
- Ersetzen Sie den standardmäßig generierten Code in
lambda_function.py
mit folgendem Code:
- Für diese Funktion ist die Berechtigung zum Aufrufen erforderlich
search_place_index_for_text
API zum Geokodieren von Adressen mithilfe des Ortsindexplaceindex.redshift
die wir zuvor erstellt haben. - Aktualisieren Sie die IAM-Rolle für die Lambda-Funktion, um die folgende Inline-Richtlinie hinzuzufügen
GeocodeAddresses-Redshift-policy
:
Richten Sie Amazon Redshift ein
Jetzt erstellen wir eine neue Lambda-UDF in Amazon Redshift und konfigurieren sie für die Verwendung einer IAM-Rolle, die die Berechtigungen zum Aufrufen der spezifischen Lambda-Funktion erteilt. Weitere Informationen finden Sie unter Erstellen einer skalaren Lambda-UDF.
- Erstellen Sie eine IAM-Rolle
Redshift-Lambda-role
und fügen Sie die folgende Inline-Richtlinie hinzuRedshift-Lambda-policy
Zu dieser Rolle hinzufügen, damit Amazon Redshift das aufrufen kannGeocodeAddresses-Redshift
Funktion, die wir erstellt haben:
Wir müssen Ordnen Sie diese IAM-Rolle dem Amazon-Redshift-Cluster zu.
- Wählen Sie in der Amazon-Redshift-Konsole den zu verwendenden Cluster aus.
- Der IAM-Rollen verwalten, Ergänzen Sie die
Redshift-Lambda-role
Rolle für den Cluster. - Warten Sie, bis der Cluster geändert wurde und angemeldet ist
Available
Status.
Jetzt wir Erstellen Sie eine externe Amazon Redshift-Funktion um eine Lambda-Funktion aufzurufen.
- Verwenden Sie Ihren bevorzugten SQL-Editor, um eine Verbindung zu Ihrem Amazon-Redshift-Cluster herzustellen und eine neue externe Funktion zu erstellen
f_geocode_address
in Amazon Redshift mit dem folgenden Code:
Diese externe Funktion ruft die Lambda-Funktion mithilfe der in bereitgestellten Berechtigungen auf Redshift-Lambda-role
Rolle, die wir geschaffen haben.
Führen Sie SQL-Anweisungen aus, um die Lambda-Funktion aufzurufen
Jetzt können wir SQL-Anweisungen ausführen, die Adressdatensätze aus dem übernehmen können customer_address
Tabelle in der Amazon Redshift-Datenbank und geokodieren Sie sie mithilfe des Amazon Location Service.
Wenn Sie keine haben customer_address
Tabelle können Sie sie mit dem Skript erstellen, das im vollständigen Code in enthalten ist GitHub.
Sie können die Geokodierungsergebnisse auch einfach als Teil der SQL-Anweisung auswählen, wie im folgenden Code. Es ist wichtig zu verstehen, dass Lambda-Funktionen, die über SELECT-SQL-Anweisungen aufgerufen werden, bei jedem Aufruf Felder aus mehreren Datenbankdatensätzen enthalten. Daher sollte das Timeout der Funktion auf einen längeren Zeitraum eingestellt werden, um mehrere Datensätze in einem Aufruf zu verarbeiten.
Geokodierungsergebnisse können in einer separaten Datenbanktabelle in Amazon Redshift gespeichert werden. Anschließend können wir die gespeicherten JSON-Ergebnisse analysieren, um die geografischen Koordinaten zu extrahieren.
Extrahieren wir nun die geografischen Koordinaten aus dem Ergebnisfeld.
Visualisieren Sie den Adressstandort mit QuickSight
Lassen Sie uns einen Datensatz in QuickSight konfigurieren und eine Analyse für diesen Datensatz erstellen.
- Erstellen Sie eine neue Amazon Redshift-Datenquelle
Redshift-Geocode
entweder über einen automatisch erkannten oder manuell konfigurierten Endpunkt. - Erstellen Sie einen neuen Datensatz für die Datenquelle, indem Sie die vorangehende SELECT-Anweisung als benutzerdefiniertes SQL verwenden.
Jetzt können wir unsere Analyse konfigurieren.
- Erstellen Sie in der QuickSight-Konsole eine neue QuickSight-Analyse mithilfe des Adressstandortdatensatzes.
- Wähle die Punkt auf der Karte visueller Typ.
- Wähle die Länge und Breite Wählen Sie Felder aus der Feldliste aus und ziehen Sie sie in die Geospatial Feldbrunnen.
Auf der Karte sollten nun Punkte angezeigt werden, die die Standorte der Kundenadressen darstellen.
Zusammenfassung
Glückwunsch! Wir haben Amazon Location Service erfolgreich in Amazon Redshift integriert und Adressdaten in einer Amazon Redshift-Tabelle geokodiert, ohne unsere SQL-Umgebung zu verlassen. Wir haben die Adressdaten durch das Hinzufügen von Standortkoordinaten angereichert. Wir haben die Adressstandorte auch erfolgreich auf einer Karte in QuickSight visualisiert. Sie können jetzt die Erweiterung der Lösung auf andere Funktionen des Amazon Location Service wie etwa die umgekehrte Geokodierung oder sogar die Integration mit Lambda-Funktionen für andere benutzerdefinierte Funktionen in Betracht ziehen.
Über den Autor
Parag Srivastava ist Lösungsarchitekt bei Amazon Web Services (AWS) und unterstützt Unternehmenskunden bei der erfolgreichen Cloud-Einführung und -Migration. Im Laufe seiner beruflichen Laufbahn war er intensiv an komplexen Projekten der digitalen Transformation beteiligt. Seine Leidenschaft gilt auch der Entwicklung innovativer Lösungen rund um Geodatenaspekte von Adressen.
Quelle: https://aws.amazon.com/blogs/big-data/access-amazon-location-service-from-amazon-redshift/
- "
- 100
- Zugang
- Konto
- Adoption
- Alle
- Amazon
- Amazon Web Services
- Amazon Web Services (AWS)
- Analyse
- Bienen
- APIs
- Architektur
- um
- AWS
- Briten
- British Columbia
- Building
- Geschäft
- rufen Sie uns an!
- Karriere
- Cloud
- Cloud-Einführung
- Code
- Columbia
- Kolonne
- gemeinsam
- Berechnen
- Kunden
- technische Daten
- Datenbase
- Datenbanken
- Entwickler:in / Unternehmen
- digital
- Digitale Transformation
- Herausgeber
- Endpunkt
- Unternehmen
- Unternehmenskunden
- Arbeitsumfeld
- Event
- erwartet
- Scheitern
- Felder
- voller
- Funktion
- Georgien
- Handling
- HTTPS
- IAM
- Identitätsschutz
- Index
- Information
- beteiligt
- IT
- Breite
- starten
- Liste
- Standorte
- Karte
- Landkarten
- Spiel
- Namen
- Navigation
- Auftrag
- Andere
- Politik durchzulesen
- Datenschutzrichtlinien
- Projekte
- Öffentlichkeit
- Python
- Aufzeichnungen
- Ressourcen
- Antwort
- Die Ergebnisse
- Rückgabe
- rückgängig machen
- Führen Sie
- Einsparung
- Suche
- Seattle
- Leistungen
- kompensieren
- Lösungen
- räumlich
- SQL
- Anfang
- begonnen
- Bundesstaat
- Erklärung
- Status
- Lagerung
- speichern
- Straße
- Erfolg
- erfolgreich
- Transformation
- Aktualisierung
- Wert
- Vancouver
- Visualisierung
- W
- Netz
- Web-Services
- Wikipedia