Amazonas Athena ist ein serverloser interaktiver Abfragedienst, der die Analyse von Daten vereinfacht Amazon Simple Storage-Service (Amazon S3) mit Standard-SQL, und nur Sie Bezahlen Sie für die Datenmenge, die von Ihren Abfragen gescannt wird. Wenn Sie Ihr Unternehmen täglich mit SQL analysieren, werden Sie möglicherweise wiederholt dieselben Abfragen oder ähnliche Abfragen mit geringfügigen Anpassungen ausführen. Parametrisierte Athena-Abfragen ermöglichen Ihnen dies Erklärungen vorbereiten Sie können sie mit anderen Argumentwerten wiederverwenden, die Sie zur Laufzeit bereitstellen. Parametrisierte Athena-Abfragen bieten auch eine Sicherheitsebene gegen SQL-Injection-Angriffe und maskieren die Abfragezeichenfolge AWS CloudTrail für Workloads mit sensiblen Daten.
Dieser Beitrag zeigt Ihnen, wie Sie parametrisierte Abfragen in Athena erstellen und ausführen. Dieser Beitrag enthält ein Beispiel dafür, wie parametrisierte Athena-Abfragen vor SQL-Injection schützen, und zeigt die CloudTrail-Ereignisse mit der maskierten Abfragezeichenfolge. Zu guter Letzt die Post-Review-Funktionen im Zusammenhang mit der Verwaltung von vorbereiteten Athena-Auszügen. Wenn Sie mitmachen möchten, enthält dieser Beitrag Schritte zum Einrichten der Komponenten mit einem Beispieldatensatz. Alternativ können Sie Ihren eigenen Datensatz verwenden.
Wiederverwendbarkeit
Mit vorbereiteten Athena-Anweisungen können Sie Abfragen innerhalb Ihrer Athena-Arbeitsgruppe ausführen und wiederverwenden. Indem Sie die Abfragen vom Code entkoppeln, können Sie Ihre vorbereiteten Anweisungen und Ihre Anwendungen unabhängig voneinander aktualisieren. Wenn ein Data Lake über Schemaaktualisierungen verfügt, sind möglicherweise Abfrageaktualisierungen erforderlich. Wenn mehrere Anwendungen dieselbe Athena-Arbeitsgruppe teilen und ähnliche Abfragen verwenden, können Sie eine neue Abfrage erstellen oder die vorhandene Abfrage aktualisieren, um mehrere Anwendungsfälle zu bedienen, ohne dass jede Anwendung ähnliche Abfragen in ihrem eigenen Quellcode anpassen muss. Parametrisierte Abfragen werden derzeit für SELECT-, INSERT IGNORE INTO-, CTAS- und UNLOAD-Anweisungen unterstützt. Die aktuellste Liste finden Sie unter Überlegungen und Einschränkungen in Abfragen mit vorbereiteten Anweisungen.
Sicherheit
Vorbereitete Athena-Anweisungen bieten eine Schutzschicht gegen SQL-Injection. Wenn Sie Athena hinter einer Anwendungsschnittstelle verwenden, stellen Freitexteingaben von Natur aus einen SQL-Injection-Bedrohungsvektor dar, der, wenn er nicht gemindert wird, zu einer Datenexfiltration führen könnte. Wenn die parametrisierte Abfrage ausgeführt wird, interpretiert Athena die Argumente als Literalwerte, nicht als ausführbare Befehle oder SQL-Fragmente wie SQL-Operatoren.
Wenn Sie Athena verwenden, CloudTrail erfasst alle Athena-API-Aufrufe als Audit-Ereignisse, um eine Aufzeichnung der Aktionen bereitzustellen, die von einem AWS-Benutzer, einer Rolle oder einem AWS-Service durchgeführt wurden. Kunden mit sensiblen Daten in ihren Data Lakes, wie z. B. persönlich identifizierbaren Informationen (PII), haben uns mitgeteilt, dass sie aus Compliance-Gründen keine Abfragezeichenfolgen in ihrem CloudTrail-Ereignisverlauf wünschen. Beim Ausführen parametrisierter Abfragen wird die Abfragezeichenfolge mit maskiert HIDDEN_DUE_TO_SECURITY_REASONS
im CloudTrail-Ereignis, sodass Sie keine geschützten Daten in Ihren Protokollströmen anzeigen.
Lösungsüberblick
Dieser Beitrag dokumentiert die Schritte mit der Öffentlichkeit Datensatz mit Kundenrezensionen von Amazon.com; Sie können jedoch ähnliche Schritte ausführen, um Ihr eigenes Dataset zu verwenden.
Die Beispielabfrage besteht darin, die 4-Sterne-Rezensionen (von 5 Sternen) eines Produkts zu finden, die von anderen Kunden als die hilfreichsten bewertet wurden. Die Absicht hinter der Abfrage besteht darin, Abfrageergebnisse zu finden, die auf konstruktives Produktfeedback hinweisen. Die Absicht besteht darin, das Feedback zu validieren und hilfreiches Feedback in die Produkt-Roadmap aufzunehmen. Das in diesem Anwendungsfall verwendete Produkt ist die Amazon Smile eGift Card.
Voraussetzungen:
Als Voraussetzung benötigen Sie ein grundlegendes Verständnis der SQL-Syntax sowie ein grundlegendes Verständnis der folgenden AWS-Services:
- Athena
- AWS CloudFormation
- AWS-Kleber und der AWS Glue-Datenkatalog
- AWS Identity and Access Management and (ICH BIN)
- Amazon S3
Dieser Beitrag setzt voraus, dass Sie Folgendes haben:
- Ein erstellter CloudTrail-Trail – Anweisungen finden Sie unter Erstellen einer Spur.
- Ein erstellter S3-Bucket – Anweisungen finden Sie unter Einen Eimer erstellen.
Stellen Sie Ressourcen für das Beispiel-Dataset bereit
Wenn Sie das Beispiel-Dataset verwenden, befolgen Sie die Schritte in diesem Abschnitt. Die Daten befinden sich in einem S3-Bucket in einem von AWS verwalteten AWS-Konto. Sie müssen zunächst Athena- und AWS Glue-Ressourcen erstellen.
Dieser Beitrag stellt eine CloudFormation-Vorlage bereit, die die folgenden Ressourcen in Ihrem AWS-Konto bereitstellt:
- AthenaWorkGroup - Ein Athena Arbeitsgruppe für Ihren Datensatz und vorbereitete Aussagen. Auf der Konsole wird diese Arbeitsgruppe benannt
PreparedStatementsWG
. - KleberDatenbank – Eine Datenbank im AWS Glue-Datenkatalog für Tabellenmetadaten. Die Datenbank wird benannt
athena_prepared_statements
. - GlueTableAmazonRezensionen – Eine externe Tabelle mit Kundenrezensionen von Amazon.com im Datenkatalog.
Das folgende Diagramm zeigt, wie die Ressourcen interagieren, wenn die Abfrage ausgeführt wird.
Führen Sie die folgenden Schritte aus, um die CloudFormation-Vorlage bereitzustellen:
- Navigieren Sie zu diesem Beitrag GitHub-Repository.
- Klonen Sie das Repository oder kopieren Sie die CloudFormation-Vorlage
athena-prepared-statements.yaml
. - Wählen Sie in der AWS CloudFormation-Konsole aus Stapel erstellen.< /li>
- Auswählen Laden Sie eine Vorlagendatei hoch und wählen Sie Datei auswählen.
- Hochladen
athena-prepared-statements.yaml
, Dann wählen Weiter. - Auf dem Geben Sie die Stapeldetails an Geben Sie auf der Seite den Stack-Namen ein
athena-prepared-statements-blog
. - Aussichten für S3QueryResultsBucketName, geben Sie Ihren S3-Bucket-Namen ein.
- Wenn du gehst AthenaWorkGroupName standardmäßig wird die Athena-Arbeitsgruppe benannt
PreparedStatementsWG
. Wenn Sie den Wert ändern, muss der Name der Athena-Arbeitsgruppe in Ihrer AWS-Region eindeutig sein. - Auswählen Weiter.
- Auf dem Konfigurieren Sie die Stapeloptionen Seite wählen Weiter.
- Auf dem Bewertung Seite wählen Stapel erstellen.
Das Skript dauert weniger als eine Minute, um ausgeführt zu werden und in a zu wechseln CREATE_COMPLETE
Zustand. Wenn Sie den Stack zweimal in demselben AWS-Konto und derselben Region bereitstellen, ist die AWS Glue-Datenbank, -Tabelle oder -Athena-Arbeitsgruppe möglicherweise bereits vorhanden, und der Vorgang schlägt mit einer Meldung fehl, die angibt, dass die Ressource bereits in einer anderen Vorlage vorhanden ist.
Für die Autorisierung mit den geringsten Rechten für die Bereitstellung der CloudFormation-Vorlage können Sie eine erstellen AWS CloudFormation-Servicerolle mit den folgenden IAM-Richtlinienaktionen. Dazu müssen Sie eine erstellen IAM-Richtlinie und IAM-Rolle, und wählen Sie diese Rolle beim Konfigurieren von Stack-Optionen aus.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:CreateDatabase" ], "Resource": [ "arn:${Partition}:glue:${Region}:${Account}:catalog", "arn:${Partition}:glue:${Region}:${Account}:database/athena_prepared_statements" ] }, { "Effect": "Allow", "Action": [ "glue:DeleteDatabase" ], "Resource": [ "arn:${Partition}:glue:${Region}:${Account}:catalog", "arn:${Partition}:glue:${Region}:${Account}:database/athena_prepared_statements", "arn:${Partition}:glue:${Region}:${Account}:table/athena_prepared_statements/*", "arn:${Partition}:glue:${Region}:${Account}:userDefinedFunction/athena_prepared_statements/*" ] }, { "Effect": "Allow", "Action": [ "glue:CreateTable" ], "Resource": [ "arn:${Partition}:glue:${Region}:${Account}:catalog", "arn:${Partition}:glue:${Region}:${Account}:database/athena_prepared_statements", "arn:${Partition}:glue:${Region}:${Account}:table/athena_prepared_statements/amazon_reviews_parquet" ] }, { "Effect": "Allow", "Action": [ "glue:DeleteTable" ], "Resource": [ "arn:${Partition}:glue:${Region}:${Account}:catalog", "arn:${Partition}:glue:${Region}:${Account}:database/athena_prepared_statements", "arn:${Partition}:glue:${Region}:${Account}:table/athena_prepared_statements/amazon_reviews_parquet" ] }, { "Effect": "Allow", "Action": [ "athena:CreateWorkGroup", "athena:DeleteWorkGroup", "athena:GetWorkGroup" ], "Resource": "arn:${Partition}:athena:${Region}:${Account}:workgroup/PreparedStatementsWG" } ]
}
Für die Autorisierung für den IAM-Prinzipal, der die CloudFormation-Vorlage ausführt, und für die folgenden Schritte wurde dieser Beitrag mit den folgenden AWS-verwalteten Richtlinien und der vom Kunden verwalteten Richtlinie unten getestet.
Von AWS verwaltete Richtlinien:
- AmazonAthenaFullAccess
- AWSCloudTrailReadOnlyAccess
- AWSCloudFormationFullAccess
Vom Kunden verwaltete Richtlinie:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ViewS3BucketsWithoutErrors", "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets" ], "Resource": [ "*" ] }, { "Sid": "InteractWithMyBucketAndDataSetBucket", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetBucketLocation", "s3:ListBucket", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::${my-bucket-name}*", "arn:aws:s3:::amazon-reviews-pds*" ] }, { "Sid": "UploadCloudFormationTemplate", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::cf-template*" }, { "Sid": "CleanUpResults", "Effect": "Allow", "Action": [ "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::${my-bucket-name}/results*" ] }, { "Sid": "ListRolesForCloudFormationDeployment", "Effect": "Allow", "Action": [ "iam:ListRoles" ], "Resource": [ "*" ] }, { "Sid": "IAMRoleForCloudFormationDeployment", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:${Partition}:iam::${Account}:role/${role-name}" ], "Condition": { "StringEquals": { "iam:PassedToService": "cloudformation.amazonaws.com" } } } ]
}
Partitionieren Sie das Beispiel-Dataset
Die CloudFormation-Vorlage erstellte eine externe Tabelle, die auf einen Datensatz mit über 130 Millionen Kundenbewertungen von Amazon.com verweist. Partitionieren von Daten Verbessert die Abfrageleistung und senkt die Kosten, indem die von jeder Abfrage gescannte Datenmenge begrenzt wird. Die externe Tabelle für dieses Dataset hat Hive-kompatible Partitionen. Die MSCK REPAIR TABLE SQL-Anweisung scannt die Präfixpfade im S3-Bucket und aktualisiert die Metadaten im Datenkatalog mit den Partitionsmetadaten. Um auf das Dataset zuzugreifen, müssen die Partitionen der externen Tabelle aktualisiert werden.
Führen Sie nach der Bereitstellung der CloudFormation-Vorlage die folgenden Schritte aus:
- Wählen Sie auf der Athena-Konsole Abfrage-Editor im Navigationsbereich.
- Aussichten für Datenquelle, eingeben
AwsDataCatalog
. - Aussichten für Datenbase, eingeben
athena_prepared_statements
. - Auf dem Arbeitsgruppen Dropdown-Menü auswählen VorbereiteteStatementsWG.
- Auswählen Bestätigen zu bestätigen.
- Führen Sie im Abfrageeditorbereich die folgende SQL-Anweisung für Ihre externe Tabelle aus:
MSCK REPAIR TABLE athena_prepared_statements.amazon_reviews_parquet;
Diese Abfrage dauert ungefähr 15 Sekunden, wenn sie getestet wird us-east-1
.
- Führen Sie die folgende Abfrage aus, um die verfügbaren Partitionen aufzulisten. Das Beispiel-Dataset hat Partitionen basierend auf
product_category
.
SHOW PARTITIONS athena_prepared_statements.amazon_reviews_parquet;
- Führen Sie eine SELECT-Anweisung aus, um ein Beispiel der in der Tabelle verfügbaren Daten auszugeben:
SELECT * FROM athena_prepared_statements.amazon_reviews_parquet limit 10;
Erstellen Sie vorbereitete Erklärungen
Um parametrisierte Athena-Abfragen zu verwenden, führen Sie zuerst die PREPARE-SQL-Anweisung aus und geben Ihre Positionsparameter an, die durch Fragezeichen gekennzeichnet sind. Die von Athena vorbereitete Anweisung wird unter einem von Ihnen angegebenen Namen gespeichert.
Führen Sie die folgende PREPARE-Anweisung im Athena-Abfrage-Editor aus. Diese Beispielabfrage mit dem Namen product_helpful_reviews
, bietet Kundenrezensionen mit drei Parametern für eine bestimmte Produkt-ID, eine vom Rezensenten bereitgestellte Sternebewertung und eine Mindestanzahl hilfreicher Stimmen, die von anderen Amazon.com-Kunden für die Rezension abgegeben wurden.
PREPARE product_helpful_reviews FROM
SELECT product_id, product_title, star_rating, helpful_votes, review_headline, review_body
FROM amazon_reviews_parquet WHERE product_id = ? AND star_rating = ? AND helpful_votes > ?
ORDER BY helpful_votes DESC
LIMIT 10;
Sie können auch die CreatePreparedStatement-API oder das SDK verwenden. Um beispielsweise Ihre vorbereitete Anweisung über die AWS CLI zu erstellen, führen Sie den folgenden Befehl aus:
aws athena create-prepared-statement --statement-name "product_helpful_reviews" --query-statement "SELECT product_id, product_title, star_rating, helpful_votes, review_headline, review_body FROM amazon_reviews_parquet WHERE product_id = ? AND star_rating = ? AND helpful_votes > ? ORDER BY helpful_votes DESC LIMIT 10;" --work-group PreparedStatementsWG --region region
Weitere Informationen zum Erstellen vorbereiteter Anweisungen finden Sie unter SQL-Anweisungen in Abfragen mit vorbereiteten Anweisungen.
Parametrierte Abfragen ausführen
Sie können eine parametrisierte Abfrage für die vorbereitete Anweisung mit der EXECUTE-SQL-Anweisung und einer USING-Klausel ausführen. Die USING-Klausel gibt die Argumentwerte für die Parameter der vorbereiteten Anweisung an.
Führen Sie die folgende EXECUTE-Anweisung im Athena-Abfrage-Editor aus. Die im vorherigen Abschnitt erstellte vorbereitete Aussage wird mit Parametern ausgeführt, um 4-Sterne-Bewertungen für die Amazon Smile eGift Card-Produkt-ID mit mindestens 10 hilfreichen Stimmen auszugeben.
EXECUTE product_helpful_reviews USING 'BT00DDVMVQ', 4, 10;
Wenn Sie die Nachricht erhalten PreparedStatement product_helpful_reviews was not found in workGroup primary
, vergewissern Sie sich, dass Sie ausgewählt haben PreparedStatementsWG
Arbeitsgruppe.
Weitere Informationen zum Ausführen parametrisierter Abfragen finden Sie unter SQL-Anweisungen in Abfragen mit vorbereiteten Anweisungen.
Maskieren Sie Abfragezeichenfolgendaten in CloudTrail-Ereignissen mithilfe parametrisierter Abfragen
Möglicherweise möchten Sie parametrisierte Abfragen verwenden, um vertrauliche Daten aus der in CloudTrail-Ereignissen sichtbaren Abfragezeichenfolge zu entfernen. Beispielsweise können Sie Spalten haben, die PII als Parameter enthalten, die nicht in Protokollen sichtbar sein sollen. Athena maskiert automatisch Abfragezeichenfolgen aus CloudTrail-Ereignissen für EXECUTE-Anweisungen und ersetzt die Abfragezeichenfolge durch den Wert HIDDEN_DUE_TO_SECURITY_REASONS
. Dadurch können Sie vermeiden, dass geschützte Daten in Ihren Protokollströmen angezeigt werden.
Führen Sie die folgenden Schritte aus, um auf das CloudTrail-Ereignis für die Abfrage zuzugreifen:
- Navigieren Sie zu der Ereignisverlauf Seite auf der CloudTrail-Konsole.
- Wählen Sie im Dropdown-Menü die Option Veranstaltungsname.
- Suchen Sie nach HEIF-Bilderweiterungen.
StartQueryExecution
Veranstaltungen.
CloudTrail-Ereignisdatensätze für parametrisierte Abfragen umfassen a queryString
Wert redigiert mit HIDDEN_DUE_TO_SECURITY_REASONS
. Die Abfragezeichenfolge ist im Abfrageverlauf der Athena-Arbeitsgruppe sichtbar. Sie können den Zugriff steuern, indem Sie IAM-Richtlinien mit geringsten Rechten für Athena, den AWS Glue-Datenkatalog und den Ausgabespeicherort für Amazon S3-Abfragen in Ihren Arbeitsgruppeneinstellungen verwenden. Weitere Informationen zum Anzeigen der letzten Abfragen finden Sie unter Anzeigen der letzten Abfragen. Weitere Informationen zu IAM-Richtlinien finden Sie unter Aktionen, Ressourcen und Bedingungsschlüssel für AWS-Services.
Schutzebene für SQL-Injection
In diesem Abschnitt wird Ihnen ein Beispiel für einen SQL-Injection-Angriff gezeigt und wie vorbereitete Anweisungen vor demselben Angriff schützen können. Wir verwenden die Athena-Konsole, um die aufzurufen StartQueryExecution
API gegen eine Tabelle namens users
mit drei Reihen.
SQL-Injection ist ein Versuch, schädlichen SQL-Code in Anfragen einzufügen, um die Anweisung zu ändern und Daten aus den Tabellen Ihres Datasets zu extrahieren. Wenn Sie ohne parametrisierte Athena-Abfragen ein Dataset direkt abfragen oder Benutzereingaben an eine SQL-Abfrage anhängen und Benutzer SQL-Fragmente anhängen können, ist das Dataset möglicherweise anfällig für SQL-Injection-Angriffe, die nicht autorisierte Daten im Resultset zurückgeben.
Dieser Beitrag zeigt ein Beispiel für das Einfügen eines SQL-Fragments auf böswillige Weise. In dem Beispiel wird eine ODER-Bedingung, die immer wahr zurückgibt (wie z OR 1=1
) wird an die WHERE-Klausel angehängt. Dieselbe Beispielabfrage wird mit parametrisierten Athena-Abfragen gezeigt, und die Abfrage schlägt fehl, weil sie einen ungültigen Parameterwert enthält, da erwartet wird, dass der Parameterwert eine ganze Zahl ist, aber die Zeichen „ODER“ enthält. Wenn der Parameter auf einer String-Spalte basiert, würde derselbe SQL-Injection-Versuch dazu führen, dass die Abfrage keine Ergebnisse zurückgibt, da das Positionsargument als Literalparameterwert interpretiert wird.
Athena bietet eine zusätzliche Verteidigungsebene gegen SQL-Injection-Angriffe mit mehreren Anweisungen. Der Versuch, eine SQL-Injection mit einem ausführbaren Befehl (z. B. DROP) durchzuführen, führt zu einer fehlgeschlagenen Abfrage, wobei Athena einen Fehler ausgibt Only one sql statement is allowed
, da Athena nur einen ausführbaren Befehl pro SQL-Anweisungsübermittlung akzeptiert.
Obwohl vorbereitete Athena-Anweisungen eine Schutzschicht gegen SQL-Injection-Angriffe bieten, bieten andere Vorsichtsmaßnahmen zusätzliche Verteidigungsebenen. Von Athena vorbereitete Erklärungen können Teil Ihrer Defense-in-Depth-Strategie sein. Weitere Informationen zu Sicherheitsebenen finden Sie unter Amazon Athena-Sicherheit.
Beispiel für SQL-Injection
Die beabsichtigte Verwendung der SELECT-Abfrage im Beispiel besteht darin, eine kleine Menge von Werten zu erhalten. Ein Angreifer kann die Eingabe jedoch manipulieren, um bösartigen SQL-Code anzuhängen. Beispielsweise kann ein Angreifer den Wert eingeben 1 OR 1=1
, die eine wahre Bedingung an die WHERE-Klausel anhängt und alle Datensätze in der Tabelle zurückgibt:
SELECT * FROM users WHERE id = 1 OR 1=1;
Durch Anhängen von bösartigem SQL-Code kann der Angreifer alle Zeilen der abrufen users
Tabelle, wie im folgenden Screenshot gezeigt.
SQL-Injection-Versuch mit einer vorbereiteten Anweisung
Wenn wir vorbereitete Anweisungen mit derselben Abfrage aus dem vorherigen Beispiel erstellen, wird der ausführbare Befehl als wörtliches Argument für den Wert des Parameters übergeben. Wenn ein Benutzer versucht, zusätzliches SQL zu übergeben, erhält er einen Syntaxfehler, da die WHERE-Klausel auf ID basiert, die einen ganzzahligen Wert erwartet.
- Erstellen Sie eine vorbereitete Anweisung mit derselben Abfrage für die
users
Tabelle:
PREPARE get_user FROM SELECT * FROM users WHERE id = ?
- Setzen Sie den Parameter auf einen zulässigen Wert:
EXECUTE get_user USING 1
Das erwartete Ergebnis wird zurückgegeben, wie im folgenden Screenshot gezeigt.
- Versuchen Sie nun, einen schädlichen Wert zu übergeben:
EXECUTE get_user USING 1 OR 1=1
Die Ausführung dieser vorbereiteten Anweisung erzeugt einen Syntaxfehler, weil ein ganzzahliger Wert erwartet wird, aber sie erhält einen ungültigen ganzzahligen Wert von 1 OR 1=1
. Die Abfrage und der Syntaxfehler sind im folgenden Screenshot dargestellt.
Arbeiten mit vorbereiteten Statements
Dieser Abschnitt beschreibt administrative Funktionen, um die Arbeit mit vorbereiteten Anweisungen zu erleichtern.
Alle vorbereiteten Kontoauszüge in meinem AWS-Konto auflisten
Zum Auflisten aller vorbereiteten Anweisungen in einer Athena-Arbeitsgruppe aus der AWS-Befehlszeilenschnittstelle (AWS CLI) können Sie den folgenden Befehl ausführen:
aws athena list-prepared-statements --work-group workgroup_name --region region_name
Wenn Sie dem obigen Beispiel folgen, gibt der Befehl die folgende Antwort zurück.
{ "PreparedStatements": [ { "StatementName": "product_helpful_reviews", "LastModifiedTime": "2022-01-14T15:33:07.935000+00:00" } ]
}
Um alle verfügbaren vorbereiteten Kontoauszüge in Ihrem AWS-Konto aufzulisten, können Sie die AWS-APIs verwenden. Dieser Beitrag enthält ein Beispielskript mit der AWS SDK für Python (Boto3) um alle Regionen in Ihrem Konto zu durchlaufen und die vorbereiteten Auszüge pro Athena-Arbeitsgruppe bereitzustellen.
Stellen Sie sicher, dass Sie über AWS-Anmeldeinformationen verfügen, wo Sie das Python-Skript ausführen möchten. Weitere Informationen finden Sie unter Referenzen.
Klonen Sie die GitHub Repo oder kopieren Sie das Python-Skript list-prepared-statements.py
aus dem Repo und führen Sie das Skript aus:
python3 list-prepared-statements.py
Ersetzen <my-profile-name>
mit Ihrem AWS-Profilnamen, wenn Sie dazu aufgefordert werden, oder lassen Sie es leer, um lokale Standardanmeldeinformationen zu verwenden.
Enter the AWS CLI profile name or leave blank if using instance profile: <my-profile-name>
Der folgende Text ist die Ausgabe des Skripts. Wenn Sie weitermachen, gibt die Antwort nur die zurück product_helpful_reviews
vorbereitete Aussage.
eu-north-1:
ap-south-1:
eu-west-3:
eu-west-2:
eu-west-1:
ap-northeast-3:
ap-northeast-2:
ap-northeast-1:
sa-east-1:
ca-central-1:
ap-southeast-1:
ap-southeast-2:
eu-central-1:
us-east-1: athena-v2-wg: my_select PreparedStatementsWG: get_user PreparedStatementsWG: get_contacts_by_company PreparedStatementsWG: product_helpful_reviews PreparedStatementsWG: count_stars PreparedStatementsWG: helpful_reviews PreparedStatementsWG: get_product_info PreparedStatementsWG: check_avg_stars_of_category PreparedStatementsWG: my_select_v1 PreparedStatementsWG: my_select_v2
us-east-2:
us-west-1:
us-west-2:
Vorbereitete Anweisungen aktualisieren
Sie haben einige Optionen zum Aktualisieren von vorbereiteten Kontoauszügen. Möglicherweise möchten Sie dies tun, um Ihre Abfrageleistung zu optimieren, die von Ihnen ausgewählten Werte zu ändern oder aus verschiedenen anderen Gründen.
- Führen Sie die PREPARE-Anweisung mit den Änderungen im Athena-Abfrage-Editor oder gegen die erneut aus
StartQueryExecution
API. - Verwenden Sie das
UpdatePreparedStatement
API über die AWS CLI oder das SDK.
Sie können diese API verwenden, um Ihren vorbereiteten Anweisungen eine Beschreibung hinzuzufügen oder Ihre Abfragen zu aktualisieren. Um Ihre Abfrageanweisung über diese Methode zu aktualisieren, müssen Sie den Anweisungsnamen, den Arbeitsgruppennamen, die aktualisierte Abfrageanweisung und optional eine neue Beschreibung angeben. Für weitere Informationen über die UpdatePreparedStatement
API, siehe update-prepared-statement.
Möglicherweise möchten Sie Versionen Ihrer Abfrage bereitstellen. Um die Abwärtskompatibilität für Benutzer aufrechtzuerhalten, könnten Sie eine neue vorbereitete Anweisung mit einem anderen Namen erstellen. Beispielsweise könnte die vorbereitete Anweisung eine Versionsnummer in ihrem Namen haben (z my_select_v1
und my_select_v2
). Bei Bedarf können Sie Änderungen Teams mitteilen, die sich auf die vorbereitete Anweisung verlassen, und später die alten vorbereiteten Anweisungsversionen freigeben.
Löschen Sie vorbereitete Anweisungen
Um eine vorbereitete Anweisung zu löschen, können Sie die folgende Abfragesyntax verwenden, wenn gegen die StartQueryExecution
API oder im Athena-Abfrage-Editor:
DEALLOCATE PREPARE product_helpful_reviews
Sie könnten auch die verwenden DeletePreparedStatement
API oder SDK. Um beispielsweise Ihre vorbereitete Anweisung aus der AWS CLI zu löschen, führen Sie den folgenden Befehl aus:
aws athena delete-prepared-statement --statement-name product_helpful_reviews --work-group PreparedStatementsWG --region region
Aufräumen
Wenn Sie diesem Beitrag gefolgt sind, haben Sie mehrere Komponenten erstellt, die möglicherweise Kosten verursachen. Um zukünftige Gebühren zu vermeiden, entfernen Sie die Ressourcen mit den folgenden Schritten:
- Löschen Sie das Ergebnispräfix des S3-Buckets erstellt, nachdem Sie eine Abfrage für Ihre Arbeitsgruppe ausgeführt haben.
Bei der Standardvorlage heißt es <S3QueryResultsBucketName>/athena-results
. Gehen Sie bei diesem Schritt vorsichtig vor. Es sei denn, Sie sind es Verwenden der Versionierung für Ihren S3-Bucket, das Löschen von S3-Objekten kann nicht rückgängig gemacht werden.
- Löschen Sie die vorbereiteten Athena-Anweisungen in der PreparedStatementsWG
Sie können die Schritte in der Löschen Sie vorbereitete Anweisungen Abschnitt dieses Beitrags entweder mit der DEALLOCATE PREPARE-Anweisung oder delete-prepared-statement
API für jede von Ihnen erstellte vorbereitete Anweisung.
- Um den CloudFormation-Stack zu entfernen, wählen Sie den Stack in der AWS CloudFormation-Konsole aus, wählen Sie Löschen, und bestätigen Sie.
Zusammenfassung
Parametrisierte Athena-Abfragen machen es einfach, Ihre Codebasis von Ihren Abfragen zu entkoppeln, indem Sie eine Möglichkeit bieten, allgemeine Abfragen in Ihrer Athena-Arbeitsgruppe zu speichern. Dieser Beitrag enthält Informationen darüber, wie Athena parametrisierte Abfragen die Wiederverwendbarkeit Ihres Codes und die Data Lake-Sicherheit verbessern kann. Wir haben gezeigt, wie Sie einen Beispiel-Data Lake einrichten und noch heute parametrisierte Abfragen verwenden können. Wir haben auch ein Beispiel für die Schutzmöglichkeiten parametrisierter Abfragen und detaillierte zusätzliche Verwaltungsfunktionen bereitgestellt.
Sie können mit den vorbereiteten Athena-Anweisungen über beginnen Athena-Konsole, der AWS-CLIOder das AWS-SDK. Weitere Informationen zu Athena finden Sie unter Amazon Athena-Benutzerhandbuch.
Vielen Dank für das Lesen dieses Beitrags! Wenn Sie Fragen zu parametrisierten Athena-Abfragen haben, zögern Sie nicht, einen Kommentar im Kommentarbereich zu hinterlassen.
Über die Autoren
Blayze Stefaniak ist Senior Solutions Architect bei AWS und arbeitet mit Organisationen des öffentlichen Sektors, der Bundesfinanzen und des Gesundheitswesens zusammen. Blayze hat seinen Sitz in Pittsburgh. Er ist leidenschaftlich daran interessiert, komplexe Situationen in etwas Praktisches und Umsetzbares herunterzubrechen. Seine Interessen umfassen künstliche Intelligenz, verteilte Systeme und Excel-Formelturnen. Blayze hat einen BSBA in Rechnungswesen und einen BS in Informationssystemen von der Clarion University of Pennsylvania. In seiner Freizeit hört Blayze Star Wars-Hörbücher, versucht, seine Hunde zum Lachen zu bringen, und spricht wahrscheinlich stumm.
Daniel Tatarkin ist ein Lösungsarchitekt bei Amazon Web Services (AWS) und unterstützt Bundesfinanzorganisationen. Er interessiert sich leidenschaftlich für Big-Data-Analysen und serverlose Technologien. Außerhalb der Arbeit lernt er gerne etwas über persönliche Finanzen, Kaffee und probiert zum Spaß neue Programmiersprachen aus.
- Coinsmart. Europas beste Bitcoin- und Krypto-Börse.
- Platoblockkette. Web3-Metaverse-Intelligenz. Wissen verstärkt. DEN FREIEN ZUGANG.
- CryptoHawk. Altcoin-Radar. Kostenlose Testphase.
- Quelle: https://aws.amazon.com/blogs/big-data/improve-reusability-and-security-using-amazon-athena-parameterized-queries/