Zephyrnet-logo

Verbeter de herbruikbaarheid en beveiliging met behulp van Amazon Athena-geparametriseerde zoekopdrachten

Datum:

Amazone Athene is een serverloze interactieve query-service die het gemakkelijk maakt om gegevens te analyseren in Amazon eenvoudige opslagservice (Amazon S3) met standaard SQL, en jij alleen betalen voor de hoeveelheid gegevens die door uw zoekopdrachten zijn gescand. Als u SQL gebruikt om uw bedrijf dagelijks te analyseren, is het mogelijk dat u herhaaldelijk dezelfde zoekopdrachten uitvoert, of vergelijkbare zoekopdrachten met kleine aanpassingen. Met Athena-geparametriseerde query's kunt u: verklaringen voorbereiden u kunt hergebruiken met verschillende argumentwaarden die u tijdens runtime opgeeft. Athena-geparametriseerde query's bieden ook een beveiligingslaag tegen SQL-injectie-aanvallen en maskeren de queryreeks in AWS CloudTrail voor workloads met gevoelige gegevens.

Dit bericht laat zien hoe u geparameteriseerde query's kunt maken en uitvoeren in Athena. Dit bericht geeft een voorbeeld van hoe Athena-geparametriseerde query's beschermen tegen SQL-injectie en toont de CloudTrail-gebeurtenissen met de gemaskeerde queryreeks. Ten slotte zijn de functies voor postrecensies gerelateerd aan het beheren van door Athena opgestelde verklaringen. Als je wilt volgen, biedt dit bericht stappen om de componenten in te stellen met een voorbeeldgegevensset; als alternatief kunt u uw eigen dataset gebruiken.

herbruikbaarheid

Door Athena voorbereide instructies kunt u query's uitvoeren en hergebruiken binnen uw Athena-werkgroep. Door de query's los te koppelen van de code, kunt u uw voorbereide verklaringen en uw toepassingen onafhankelijk van elkaar bijwerken. Als een data lake schema-updates heeft, kunnen query-updates nodig zijn. Als meerdere applicaties dezelfde Athena-werkgroep delen en vergelijkbare zoekopdrachten gebruiken, kunt u een nieuwe zoekopdracht maken of de bestaande zoekopdracht bijwerken voor meerdere gebruiksscenario's, zonder dat elke applicatie vergelijkbare zoekopdrachten in hun eigen broncode hoeft aan te passen. Query's met parameters worden momenteel ondersteund voor SELECT-, INSERT IGNORE INTO-, CTAS- en UNLOAD-instructies. Voor de meest actuele lijst, zie Overwegingen en beperkingen in Query's met voorbereide verklaringen.

Security

Athena voorbereide instructies bieden een beschermingslaag tegen SQL-injectie. Als u Athena achter een applicatie-interface gebruikt, vormt de invoer van vrije tekst inherent een SQL-injectie-bedreigingsvector die, indien onaangetast, kan leiden tot gegevensexfiltratie. Wanneer de geparametriseerde query wordt uitgevoerd, interpreteert Athena de argumenten als letterlijke waarden, niet als uitvoerbare opdrachten of SQL-fragmenten zoals SQL-operators.

Bij gebruik van Athene, CloudTrail legt alle Athena API-aanroepen vast als auditgebeurtenissen om een ​​overzicht te geven van acties die zijn ondernomen door een AWS-gebruiker, -rol of AWS-service. Klanten met gevoelige gegevens in hun datameren, zoals persoonlijk identificeerbare informatie (PII), hebben ons laten weten dat ze om nalevingsredenen geen queryreeksen in hun CloudTrail-gebeurtenisgeschiedenis willen. Bij het uitvoeren van geparametriseerde query's, wordt de queryreeks gemaskeerd met: HIDDEN_DUE_TO_SECURITY_REASONS in de CloudTrail-gebeurtenis, zodat u geen beveiligde gegevens in uw logstreams weergeeft.

Overzicht oplossingen

Dit bericht documenteert de stappen met behulp van het openbaar Amazon.com klantrecensies dataset; u kunt echter vergelijkbare stappen volgen om uw eigen dataset te gebruiken.

De voorbeeldzoekopdracht is om de 4-sterrenrecensies (van de 5 sterren) van een product te vinden die door andere klanten als het nuttigst zijn beoordeeld. De bedoeling achter de zoekopdracht is om zoekopdrachtresultaten te vinden die op constructieve productfeedback wijzen. De bedoeling is om de feedback te valideren en nuttige feedback op te nemen in de productroadmap. Het product dat in deze use case wordt gebruikt, is de Amazon Smile eGift Card.

Voorwaarden

Als voorwaarde hebt u een basiskennis van de SQL-syntaxis nodig, evenals een basiskennis van de volgende AWS-services:

Dit bericht gaat ervan uit dat je:

Resources implementeren voor de voorbeelddataset

Als u de voorbeeldgegevensset gebruikt, volgt u de stappen in deze sectie. De gegevens bevinden zich in een S3-bucket in een door AWS beheerd AWS-account. U moet Athena- en AWS Glue-resources maken om aan de slag te gaan.

Dit bericht biedt een CloudFormation-sjabloon die de volgende bronnen in uw AWS-account implementeert:

  • AthenaWerkGroep - Een Athena-werkgroep voor uw dataset en voorbereide verklaringen. Op de console heet deze werkgroep PreparedStatementsWG.
  • LijmDatabase – Een database in de AWS Glue Data Catalog voor tabelmetadata. De database heet athena_prepared_statements.
  • LijmTabelAmazonReviews – Een externe tabel met klantrecensies van Amazon.com in de Data Catalog.

In het volgende diagram ziet u hoe de resources samenwerken wanneer de query wordt uitgevoerd.
Diagram met het AWS-account van een klant en een door AWS beheerd AWS-account. In het klantaccount staat een regiovak. In de regio is een Amazon Athena-werkgroep bezig met 3 stappen. In de eerste stap heeft de werkgroep toegang tot metadata uit de AWS Glue Data Catalog genaamd default. De catalogus heeft een stippellijn naar een AWS Glue-tabel met de naam amazon_reviews_parquet, die de attributen en S3-bucketlocatie heeft. De tweede stap van de werkgroep vraagt ​​om gegevens uit de S3-bucket. De S3-bucket bevindt zich in het door AWS beheerde AWS-account. De bucket is voor de Amazon Customer Reviews-dataset. In de derde stap slaat de werkgroep de queryresultaten op in de Amazon S3-bucket in het AWS-account van de klant. De queryresultaten kunnen vervolgens worden gelezen door gebruikers met leestoegang tot de Athena-werkgroep.

Volg deze stappen om de CloudFormation-sjabloon te implementeren:

  1. Navigeer naar dit bericht GitHub-repository.
  2. Kloon de repository of kopieer de CloudFormation-sjabloon athena-prepared-statements.yaml.
  3. Kies op de AWS CloudFormation-console Maak een stapel.< /li>
  4. kies Upload een sjabloonbestand En kies Kies bestand.
  5. Uploaden athena-prepared-statements.yaml, kies dan Volgende.
  6. Op de Geef stapeldetails op pagina, voer de stapelnaam in athena-prepared-statements-blog.
  7. Voor S3QueryResultatenBucketName, voer uw S3-bucketnaam in.
  8. Als je weggaat AthenaWorkGroepsnaam standaard heet de Athena-werkgroep PreparedStatementsWG. Als u de waarde wijzigt, moet de naam van de Athena-werkgroep uniek zijn in uw AWS-regio.
  9. Kies Volgende.
  10. Op de Configureer stapelopties pagina, kies Volgende.
  11. Op de Beoordeling pagina, kies Maak een stapel.

Het script duurt minder dan een minuut om uit te voeren en te veranderen in a CREATE_COMPLETE staat. Als u de stapel twee keer implementeert in hetzelfde AWS-account en dezelfde regio, bestaat de AWS Glue-database, -tabel of Athena-werkgroep mogelijk al en mislukt het proces met een bericht dat aangeeft dat de bron al in een andere sjabloon bestaat.

Voor autorisatie met de minste bevoegdheden voor implementatie van de CloudFormation-sjabloon, kunt u een AWS CloudFormation-servicerol met de volgende IAM-beleidsacties. Om dit te doen, moet u een IAM-beleid en IAM-rolen kies deze rol bij het configureren van stapelopties.

{ "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" } ]
}

Voor autorisatie voor de IAM-principal die de CloudFormation-sjabloon uitvoert en volgt, is dit bericht getest met het volgende door AWS beheerde beleid en het door de klant beheerde beleid hieronder.

Door AWS beheerd beleid:

  • AmazonAthenaVolledige Toegang
  • AWSCloudTrailAlleen lezenToegang
  • AWSCloudFormationVolledige toegang

Door de klant beheerd beleid:

{ "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" } } } ]
}

Partitioneer de voorbeelddataset

De CloudFormation-sjabloon creëerde een externe tabel die wees op een dataset van meer dan 130 miljoen klantrecensies van Amazon.com. Gegevens partitioneren verbetert de queryprestaties en verlaagt de kosten door de hoeveelheid gegevens die door elke query wordt gescand, te beperken. De externe tabel voor deze dataset heeft Hive-compatibele partities. De MSCK REPAIR TABLE SQL-instructie scant de prefixpaden in de S3-bucket en werkt de metagegevens in de gegevenscatalogus bij met de partitiemetagegevens. Om toegang te krijgen tot de dataset, moeten de partities van de externe tabel worden bijgewerkt.

Nadat u de CloudFormation-sjabloon hebt geïmplementeerd, voert u de volgende stappen uit:

  1. Kies op de Athena-console Query-editor in het navigatievenster.
  2. Voor Databron, ga naar binnen AwsDataCatalog.
  3. Voor Database, ga naar binnen athena_prepared_statements.
  4. Op de Werkgroep vervolgkeuzemenu, kies VoorbereidStatementsWG.
  5. Kies Erkennen bevestigen.
  6. Voer in het query-editorvenster de volgende SQL-instructie uit voor uw externe tabel:
MSCK REPAIR TABLE athena_prepared_statements.amazon_reviews_parquet;

Het duurt ongeveer 15 seconden om deze query uit te voeren wanneer deze is getest in us-east-1.

  1. Voer de volgende query uit om de beschikbare partities weer te geven. De voorbeelddataset heeft partities op basis van: product_category.
SHOW PARTITIONS athena_prepared_statements.amazon_reviews_parquet;
  1. Voer een SELECT-instructie uit om een ​​voorbeeld van de beschikbare gegevens in de tabel uit te voeren:
SELECT * FROM athena_prepared_statements.amazon_reviews_parquet limit 10;

Maak voorbereide verklaringen

Om Athena-query's met parameters te gebruiken, voert u eerst de PREPARE SQL-instructie uit en specificeert u uw positionele parameters, aangegeven door vraagtekens. De door Athena voorbereide verklaring wordt opgeslagen met een naam die u opgeeft.

Voer de volgende PREPARE-instructie uit in de Athena-queryeditor. Deze voorbeeldquery, genaamd product_helpful_reviews, biedt klantrecensies met drie parameters voor een gespecificeerde product-ID, sterrenclassificatie die door de recensent is verstrekt en een minimumaantal nuttige stemmen dat door andere Amazon.com-klanten aan de recensie is verstrekt.

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;

U kunt ook de CreatePreparedStatement-API of SDK gebruiken. Om bijvoorbeeld uw voorbereide verklaring van AWS CLI te maken, voert u de volgende opdracht uit:

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

Voor meer informatie over het maken van voorbereide statements, zie SQL Statements in Query's met voorbereide verklaringen.

Query's met parameters uitvoeren

U kunt een geparametriseerde query uitvoeren op de voorbereide instructie met de EXECUTE SQL-instructie en een USING-clausule. De clausule USING specificeert de argumentwaarden voor de parameters van de voorbereide instructie.

Voer de volgende EXECUTE-instructie uit in de Athena-query-editor. De voorbereide verklaring die in de vorige sectie is gemaakt, wordt uitgevoerd met parameters om 4-sterrenrecensies voor de Amazon Smile eGift Card-product-ID uit te voeren met ten minste 10 nuttige stemmen.

EXECUTE product_helpful_reviews USING 'BT00DDVMVQ', 4, 10;

Als u het bericht ontvangt PreparedStatement product_helpful_reviews was not found in workGroup primary, zorg ervoor dat u de . hebt geselecteerd PreparedStatementsWG werkgroep.

Voor meer informatie over het uitvoeren van query's met parameters, zie SQL-statements in Query's met voorbereide verklaringen.

Maskeer queryreeksgegevens in CloudTrail-gebeurtenissen met behulp van geparametriseerde query's

Mogelijk wilt u geparameteriseerde query's gebruiken om gevoelige gegevens te redigeren uit de querytekenreeks die zichtbaar is in CloudTrail-gebeurtenissen. U kunt bijvoorbeeld kolommen hebben met PII als parameters, die u niet zichtbaar wilt maken in logboeken. Athena maskeert automatisch queryreeksen van CloudTrail-gebeurtenissen voor EXECUTE-instructies, waarbij de queryreeks wordt vervangen door de waarde HIDDEN_DUE_TO_SECURITY_REASONS. Dit helpt u te voorkomen dat beveiligde gegevens in uw logstreams worden weergegeven.

Voer de volgende stappen uit om toegang te krijgen tot de CloudTrail-gebeurtenis voor de query:

  1. Navigeer naar de Gebeurtenisgeschiedenis pagina op de CloudTrail-console.
  2. Kies in het vervolgkeuzemenu Evenement naam.
  3. Zoek naar StartQueryExecution evenementen.

CloudTrail-gebeurtenisrecords voor geparametriseerde query's bevatten a queryString waarde geredigeerd met HIDDEN_DUE_TO_SECURITY_REASONS. De queryreeks is zichtbaar in de querygeschiedenis van de Athena-werkgroep. U kunt de toegang beheren door IAM-beleid met de minste bevoegdheden te gebruiken voor Athena, de AWS Glue Data Catalog en de Amazon S3-query-uitvoerlocatie in uw werkgroepinstellingen. Voor meer informatie over het bekijken van recente zoekopdrachten, zie: Recente zoekopdrachten bekijken. Raadpleeg voor meer informatie over IAM-beleid: Acties, bronnen en voorwaardesleutels voor AWS-services.

Beveiligingslaag voor SQL-injectie

In deze sectie ziet u een voorbeeld van een SQL-injectie-aanval en hoe voorbereide instructies kunnen beschermen tegen dezelfde aanval. We gebruiken de Athena-console om de . aan te roepen StartQueryExecution API tegen een tabel met de naam users met drie rijen.

SQL-injectie is een poging om kwaadaardige SQL-code in te voegen in verzoeken om de instructie te wijzigen en gegevens uit de tabellen van uw dataset te extraheren. Als u zonder Athena-geparametriseerde query's rechtstreeks een query uitvoert op een gegevensset of gebruikersinvoer toevoegt aan een SQL-query en gebruikers SQL-fragmenten kunnen toevoegen, kan de gegevensset kwetsbaar zijn voor SQL-injectie-aanvallen die ongeautoriseerde gegevens retourneren in de resultatenset.

Dit bericht toont een voorbeeld van het op een kwaadaardige manier invoegen van een SQL-fragment. In het voorbeeld, een OF-voorwaarde die altijd waar zal retourneren (zoals OR 1=1) wordt toegevoegd aan de WHERE-clausule. Dezelfde voorbeeldquery wordt weergegeven met Athena-query's met parameters, en de query mislukt omdat deze een ongeldige parameterwaarde bevat, aangezien wordt verwacht dat de parameterwaarde een geheel getal is, maar de tekens "OR" bevat. Als de parameter was gebaseerd op een String-kolom, zou dezelfde SQL-injectiepoging ertoe leiden dat de query geen resultaten retourneerde omdat het positionele argument wordt geïnterpreteerd als een letterlijke parameterwaarde.

Athena biedt een extra verdedigingslaag tegen multi-statement SQL-injectie-aanvallen. Poging om SQL-injectie uit te voeren met een uitvoerbaar commando (zoals DROP) resulteert in een mislukte query waarbij Athena een fout geeft Only one sql statement is allowed, omdat Athena slechts één uitvoerbare opdracht per inzending van een SQL-instructie accepteert.

Hoewel door Athena opgestelde verklaringen een beschermingslaag bieden tegen SQL-injectieaanvallen, bieden andere voorzorgsmaatregelen extra verdedigingslagen. Athena voorbereide verklaringen kunnen een onderdeel zijn van uw diepgaande verdedigingsstrategie. Raadpleeg voor meer informatie over beveiligingslagen: Amazon Athena-beveiliging.

Voorbeeld van SQL-injectie

Het beoogde gebruik van de SELECT-query in het voorbeeld is om een ​​kleine set waarden te ontvangen. Een aanvaller kan de invoer echter manipuleren om kwaadaardige SQL-code toe te voegen. Een aanvaller kan bijvoorbeeld een waarde invoeren van 1 OR 1=1, die een true-voorwaarde toevoegt aan de WHERE-component en alle records in de tabel retourneert:

SELECT * FROM users WHERE id = 1 OR 1=1;

Door kwaadaardige SQL-code toe te voegen, kan de aanvaller alle rijen van de users tabel, zoals weergegeven in de volgende schermafbeelding.
Een afbeelding van de grafische gebruikersinterface van Athena. Een query SELECT * FROM gebruikers WHERE id = 1 OR 1=1; is gelopen. Alle 3 gebruikers in de tabel, met id's 1, 2 en 3, keerden terug met alle kolommen van de tabel.

Poging tot SQL-injectie met een voorbereide instructie

Als we voorbereide instructies maken met dezelfde query als in het vorige voorbeeld, wordt het uitvoerbare commando doorgegeven als een letterlijk argument voor de waarde van de parameter. Als een gebruiker extra SQL probeert door te geven, ontvangt hij een syntaxisfout omdat de WHERE-component is gebaseerd op ID, dat een geheel getal verwacht.

  1. Maak een voorbereide instructie met dezelfde query tegen de users tafel:
PREPARE get_user FROM SELECT * FROM users WHERE id = ?
  1. Stel de parameter in op een legitieme waarde:
EXECUTE get_user USING 1

Het verwachte resultaat keert terug, zoals weergegeven in de volgende schermafbeelding.

Grafische gebruikersinterface van Athena die query uitvoert UITVOEREN get_user USING 1. Alleen de gebruiker met id 1 keerde terug.

  1. Probeer nu een kwaadaardige waarde door te geven:
EXECUTE get_user USING 1 OR 1=1

Het uitvoeren van deze voorbereide instructie levert een syntaxisfout op, omdat een geheel getal wordt verwacht, maar het een ongeldige geheel getalwaarde van ontvangt 1 OR 1=1. De query- en syntaxisfout worden weergegeven in de volgende schermafbeelding.

Grafische gebruikersinterface van Athena die opvraagt ​​EXECUTE get_user USING 1 OR 1=1. Er is een fout. De fout zegt "SYNTAX_ERROR: regel 1:24: de linkerkant van de logische uitdrukking moet worden geëvalueerd als een boolean (feitelijk: geheel getal). Deze query is uitgevoerd tegen de "standaard"-database, tenzij gekwalificeerd door de query. Plaats de foutmelding in onze forum."

Werken met voorbereide verklaringen

Deze sectie beschrijft administratieve functies om het werken met voorbereide overzichten te vergemakkelijken.

Maak een lijst van alle voorbereide afschriften in mijn AWS-account

Om alle voorbereide verklaringen in een Athena-werkgroep op te sommen van de AWS-opdrachtregelinterface (AWS CLI), kunt u de volgende opdracht uitvoeren:

aws athena list-prepared-statements --work-group workgroup_name --region region_name

Als u het bovenstaande voorbeeld volgt, retourneert de opdracht het volgende antwoord.

{ "PreparedStatements": [ { "StatementName": "product_helpful_reviews", "LastModifiedTime": "2022-01-14T15:33:07.935000+00:00" } ]
}

Om alle beschikbare voorbereide afschriften in uw AWS-account weer te geven, kunt u de AWS API's gebruiken. Dit bericht biedt een voorbeeldscript met behulp van de AWS SDK voor Python (Boto3) om alle regio's in uw account te doorlopen en de voorbereide verklaringen per Athena-werkgroep te verstrekken.

Zorg ervoor dat u over AWS-referenties beschikt waar u het Python-script wilt uitvoeren. Voor meer informatie, zie: Geloofsbrieven.

Kloon het GitHub repo of kopieer het Python-script list-prepared-statements.py vanuit de repo en voer het script uit:

python3 list-prepared-statements.py

vervangen <my-profile-name> met uw AWS-profielnaam wanneer u daarom wordt gevraagd, of laat leeg om standaard lokale inloggegevens te gebruiken.

Enter the AWS CLI profile name or leave blank if using instance profile: <my-profile-name>

De volgende tekst is de uitvoer van het script. Als u meevolgt, retourneert het antwoord alleen de product_helpful_reviews opgestelde verklaring.

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:

Voorbereide verklaringen bijwerken

U hebt een paar opties om voorbereide overzichten bij te werken. Mogelijk wilt u dit doen om uw queryprestaties te optimaliseren, de waarden die u selecteert te wijzigen of om verschillende andere redenen.

  1. Voer de PREPARE-instructie opnieuw uit met de wijzigingen in de Athena-query-editor of tegen de StartQueryExecution API.
  2. Gebruik de UpdatePreparedStatement API via de AWS CLI of SDK.

U kunt deze API gebruiken om een ​​beschrijving toe te voegen aan uw voorbereide verklaringen of om uw vragen bij te werken. Om uw query-instructie via deze methode bij te werken, moet u de naam van de instructie, de werkgroepnaam, de bijgewerkte query-instructie en optioneel een nieuwe beschrijving opgeven. Voor meer informatie over de UpdatePreparedStatement API, zie: update-voorbereid-statement.

Mogelijk wilt u versies van uw query uitrollen. Om achterwaartse compatibiliteit voor gebruikers te behouden, kunt u een nieuwe voorbereide instructie met een andere naam maken. Het voorbereide statement kan bijvoorbeeld een versienummer in de naam hebben (zoals: my_select_v1 en my_select_v2). Indien nodig kunt u wijzigingen doorgeven aan teams die vertrouwen op de voorbereide verklaring en later de toewijzing van de oude voorbereide versie van de verklaring ongedaan maken.

Voorbereide verklaringen verwijderen

Om een ​​voorbereide instructie te verwijderen, kunt u de volgende querysyntaxis gebruiken wanneer tegen de StartQueryExecution API, of vanuit de Athena-queryeditor:

DEALLOCATE PREPARE product_helpful_reviews

Je zou ook de DeletePreparedStatement API of SDK. Als u bijvoorbeeld uw voorbereide verklaring van AWS CLI wilt verwijderen, voert u de volgende opdracht uit:

aws athena delete-prepared-statement --statement-name product_helpful_reviews --work-group PreparedStatementsWG --region region

Opruimen

Als je dit bericht hebt gevolgd, heb je verschillende componenten gemaakt die mogelijk kosten met zich meebrengen. Om toekomstige kosten te voorkomen, verwijdert u de bronnen met de volgende stappen:

  1. Het resultatenvoorvoegsel van de S3-bucket verwijderen gemaakt nadat u een query op uw werkgroep hebt uitgevoerd.

Met de standaardsjabloon heet het <S3QueryResultsBucketName>/athena-results. Wees voorzichtig bij deze stap. tenzij je bent versiebeheer op uw S3-bucket gebruiken, kan het verwijderen van S3-objecten niet ongedaan worden gemaakt.

  1. Verwijder de door Athena voorbereide verklaringen in de PreparedStatementsWG

U kunt de stappen volgen in de Voorbereide verklaringen verwijderen sectie van dit bericht met behulp van de DEALLOCATE PREPARE-instructie of delete-prepared-statement API voor elke voorbereide verklaring die u hebt gemaakt.

  1. Om de CloudFormation-stack te verwijderen, selecteert u de stapel op de AWS CloudFormation-console, kiest u: Verwijderen bevestig.

Conclusie

Athena-geparametriseerde query's maken het gemakkelijk om uw codebasis los te koppelen van uw query's door een manier te bieden om algemene query's op te slaan binnen uw Athena-werkgroep. Dit bericht bevatte informatie over hoe Athena-query's met parameters de herbruikbaarheid van uw code en de beveiliging van data lakes kunnen verbeteren. We hebben laten zien hoe u een voorbeeldgegevensmeer kunt opzetten en vandaag nog kunt beginnen met het gebruik van geparametriseerde query's. We hebben ook een voorbeeld gegeven van de aanbiedingen voor zoekopdrachten met parameters voor beveiliging en gedetailleerde aanvullende beheerfuncties.

U kunt aan de slag met door Athena opgestelde verklaringen via de Athena-console AWS CLIOf de AWS-SDK. Raadpleeg voor meer informatie over Athena de Amazon Athena-gebruikershandleiding.

Bedankt voor het lezen van dit bericht! Als je vragen hebt over Athena-geparametriseerde zoekopdrachten, aarzel dan niet om een ​​opmerking achter te laten in het opmerkingengedeelte.


Over de auteurs

Blaze Stefaniak is een Senior Solutions Architect bij AWS die werkt met organisaties in de publieke sector, de federale financiële sector en de gezondheidszorg. Blayze is gevestigd in Pittsburgh. Hij is gepassioneerd in het opsplitsen van complexe situaties in iets praktisch en uitvoerbaars. Zijn interesses omvatten kunstmatige intelligentie, gedistribueerde systemen en gymnastiek met Excel-formules. Blayze heeft een BSBA in Accounting en een BS in Informatiesystemen van Clarion University of Pennsylvania. In zijn vrije tijd kun je Blayze naar Star Wars-audioboeken zien luisteren, zijn honden aan het lachen proberen te maken en waarschijnlijk stil praten.

Daniël Tatarkina is een Solutions Architect bij Amazon Web Services (AWS) die federale financiële organisaties ondersteunt. Hij is gepassioneerd door big data-analyse en serverloze technologieën. Naast zijn werk leert hij graag over persoonlijke financiën, koffie en probeert hij voor de lol nieuwe programmeertalen uit.

spot_img

Laatste intelligentie

spot_img

Chat met ons

Hallo daar! Hoe kan ik u helpen?