Zephyrnet Logosu

Amazon Athena parametreli sorguları kullanarak yeniden kullanılabilirliği ve güvenliği iyileştirin

Tarih:

Amazon Atina içindeki verileri analiz etmeyi kolaylaştıran sunucusuz etkileşimli bir sorgu hizmetidir. Amazon Basit Depolama Hizmeti (Amazon S3) standart SQL kullanarak ve yalnızca siz sorgularınız tarafından taranan veri miktarı için ödeme yapın. İşinizi günlük olarak analiz etmek için SQL kullanıyorsanız, kendinizi aynı sorguları veya küçük ayarlamalarla benzer sorguları tekrar tekrar çalıştırırken bulabilirsiniz. Athena parametreli sorgular şunları yapmanızı sağlar: ifadeler hazırlamak çalışma zamanında sağladığınız farklı argüman değerleriyle yeniden kullanabilirsiniz. Athena parametreli sorguları ayrıca SQL enjeksiyon saldırılarına karşı bir güvenlik katmanı sağlar ve sorgu dizesini AWS CloudTrail hassas verilere sahip iş yükleri için.

Bu gönderi, Athena'da parametreli sorguların nasıl oluşturulacağını ve çalıştırılacağını gösterir. Bu gönderi, Athena parametreli sorgularının SQL enjeksiyonuna karşı nasıl koruduğuna dair bir örnek sağlar ve maskeli sorgu dizesiyle CloudTrail olaylarını gösterir. Son olarak, Athena'nın hazırladığı ifadeleri yönetmeye ilişkin işlevler gözden geçirilir. Devam etmek istiyorsanız, bu gönderi, bileşenleri örnek bir veri kümesiyle kurmak için adımlar sağlar; alternatif olarak, kendi veri kümenizi kullanabilirsiniz.

Reus yeteneği

Athena tarafından hazırlanan ifadeler, Athena çalışma grubunuzdaki sorguları çalıştırmanıza ve yeniden kullanmanıza olanak tanır. Sorguları koddan ayırarak, hazırladığınız deyimlerinizi ve uygulamalarınızı birbirinden bağımsız olarak güncelleyebilirsiniz. Bir veri gölünün şema güncellemeleri varsa, sorgu güncellemeleri gerektirebilir. Birden çok uygulama aynı Athena çalışma grubunu paylaşıyorsa ve benzer sorgular kullanıyorsa, her uygulamanın kendi kaynak kodunda benzer sorguları ayarlaması gerekmeden yeni bir sorgu oluşturabilir veya mevcut sorguyu birden çok kullanım senaryosuna hizmet edecek şekilde güncelleyebilirsiniz. Parametreli sorgular şu anda SELECT, INSERT IGNORE INTO, CTAS ve UNLOAD deyimleri için desteklenmektedir. En güncel liste için bkz. Hazır İfadelerle Sorgulama.

Güvenlik

Athena tarafından hazırlanan ifadeler, SQL enjeksiyonuna karşı bir koruma katmanı sağlar. Athena'yı bir uygulama arayüzünün arkasında kullanıyorsanız, serbest metin girişleri doğal olarak bir SQL enjeksiyon tehdidi vektörü sunar ve bu, azaltılmadığı takdirde veri sızmasına neden olabilir. Parametreli sorgu çalıştırıldığında, Athena argümanları çalıştırılabilir komutlar veya SQL operatörleri gibi SQL parçaları olarak değil, değişmez değerler olarak yorumlar.

Athena'yı kullanırken, CloudTrail, tüm Athena API çağrılarını yakalar AWS kullanıcısı, rolü veya AWS hizmeti tarafından gerçekleştirilen eylemlerin kaydını sağlamak için denetim olayları olarak. Kişisel olarak tanımlanabilir bilgiler (PII) gibi veri göllerinde hassas verileri olan müşteriler, uyumluluk nedenleriyle CloudTrail olay geçmişlerinde sorgu dizeleri istemediklerini bize bildirdiler. Parametreli sorguları çalıştırırken, sorgu dizesi şu şekilde maskelenir: HIDDEN_DUE_TO_SECURITY_REASONS Günlük akışlarınızda korunan verileri göstermemeniz için CloudTrail etkinliğinde.

Çözüme genel bakış

Bu gönderi, kamuyu kullanan adımları belgeliyor Amazon.com müşteri incelemeleri veri seti; ancak kendi veri kümenizi kullanmak için benzer adımları takip edebilirsiniz.

Örnek sorgu, bir ürünün diğer müşteriler tarafından en yararlı olarak oylanan 4 yıldızlı (5 yıldız üzerinden) incelemelerini bulmaktır. Sorgunun arkasındaki amaç, yapıcı ürün geri bildirimini gösteren sorgu sonuçlarını bulmaktır. Amaç, geri bildirimi doğrulamak ve ürün yol haritasına dahil edilmiş yararlı geri bildirimler almaktır. Bu kullanım örneğinde kullanılan ürün Amazon Smile eHediye Kartıdır.

Önkoşullar

Bir ön koşul olarak, aşağıdaki AWS hizmetlerini temel düzeyde anlamanın yanı sıra SQL sözdizimi hakkında temel bir anlayışa sahip olmanız gerekir:

Bu gönderi, aşağıdakilere sahip olduğunuzu varsayar:

Örnek veri kümesi için kaynakları dağıtın

Örnek veri kümesini kullanıyorsanız bu bölümdeki adımları izleyin. Veriler, AWS tarafından yönetilen bir AWS hesabındaki bir S3 klasöründedir. Başlamak için Athena ve AWS Glue kaynakları oluşturmanız gerekir.

Bu gönderi, AWS hesabınızda aşağıdaki kaynakları dağıtan bir CloudFormation şablonu sağlar:

  • AthenaÇalışma Grubu - Bir Athena çalışma grubu veri kümeniz ve hazırlanan ifadeler için. Konsolda bu çalışma grubunun adı PreparedStatementsWG.
  • TutkalVeritabanı – Tablo meta verileri için AWS Glue Data Catalog'daki bir veritabanı. Veritabanına isim verildi athena_prepared_statements.
  • GlueTableAmazonİncelemeler – Veri Kataloğunda Amazon.com müşteri incelemelerini içeren harici bir tablo.

Aşağıdaki diyagram, sorgu çalıştığında kaynakların nasıl etkileşime girdiğini gösterir.
Bir müşterinin AWS hesabını ve bir AWS tarafından yönetilen AWS hesabını gösteren diyagram. Müşteri hesabında bir bölge kutusu vardır. Bölgede 3 adım atan bir Amazon Athena çalışma grubu bulunmaktadır. İlk adımda, çalışma grubu varsayılan olarak adlandırılan AWS Glue Data Catalog'dan meta verilere erişir. Katalog, özniteliklere ve S3 klasör konumuna sahip amazon_reviews_parquet adlı bir AWS Glue tablosuna giden noktalı bir çizgiye sahiptir. Çalışma grubunun ikinci adımı, S3 kovasındaki verileri sorgular. S3 kovası, AWS tarafından yönetilen AWS hesabındadır. Paket, Amazon Müşteri Yorumları veri kümesi içindir. Üçüncü adımda, çalışma grubu, müşteri AWS hesabındaki Amazon S3 klasöründeki sorgu sonuçlarını depolar. Sorgu sonuçları daha sonra Athena çalışma grubuna okuma erişimi olan kullanıcılar tarafından okunabilir.

CloudFormation şablonunu dağıtmak için şu adımları izleyin:

  1. Bu gönderiye git GitHub deposu.
  2. Depoyu klonlayın veya CloudFormation şablonunu kopyalayın athena-prepared-statements.yaml.
  3. AWS CloudFormation konsolunda şunu seçin: Yığın oluştur.< /li>
  4. seç Bir şablon dosyası yükleyin Ve seç Dosya seçin.
  5. Foto Yükle athena-prepared-statements.yaml, Daha sonra seçmek Sonraki.
  6. Üzerinde Yığın ayrıntılarını belirtme sayfasında yığın adını girin athena-prepared-statements-blog.
  7. İçin S3QueryResultsBucketName, S3 paket adınızı girin.
  8. Eğer gidersen AthenaÇalışmaGrubuAdı varsayılan olarak, Athena çalışma grubu PreparedStatementsWG. Değeri değiştirirseniz Athena çalışma grubu adı, AWS Bölgenizde benzersiz olmalıdır.
  9. Klinik Sonraki.
  10. Üzerinde Yığın seçeneklerini yapılandırma sayfasını seçin Sonraki.
  11. Üzerinde Değerlendirme sayfasını seçin Yığın oluştur.

Komut dosyasının çalıştırılması ve bir CREATE_COMPLETE belirtmek, bildirmek. Yığını aynı AWS hesabında ve Bölgesinde iki kez dağıtırsanız, AWS Glue veritabanı, tablo veya Athena çalışma grubu zaten mevcut olabilir ve işlem, kaynağın zaten başka bir şablonda bulunduğunu belirten bir mesajla başarısız olur.

CloudFormation şablonunun dağıtımı için en az ayrıcalıklı yetkilendirme için bir AWS CloudFormation hizmet rolü aşağıdaki IAM politikası eylemleriyle. Bunu yapmak için, bir oluşturmanız gerekir. IAM politikası ve IAM rolüve yığın seçeneklerini yapılandırırken bu rolü seçin.

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

CloudFormation şablonunu çalıştıran ve takip eden IAM sorumlusu için yetkilendirme için bu gönderi, aşağıdaki AWS tarafından yönetilen politikalar ve aşağıdaki müşteri tarafından yönetilen politika ile test edilmiştir.

AWS tarafından yönetilen politikalar:

  • AmazonAthenaTam Erişim
  • AWSCloudTrailOnlyReadOnlyErişim
  • AWSBulutFormasyonuTam Erişim

Müşteri tarafından yönetilen politika:

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

Örnek veri kümesini bölümlere ayırın

CloudFormation şablonu, Amazon.com'dan 130 milyondan fazla müşteri incelemesinden oluşan bir veri kümesine işaret eden harici bir tablo oluşturdu. bölümleme verileri her sorgu tarafından taranan veri miktarını kısıtlayarak sorgu performansını artırır ve maliyeti düşürür. Bu veri kümesinin dış tablosu, Hive uyumlu bölümlere sahiptir. MSCK REPAIR TABLE SQL deyimi, S3 klasöründeki önek yollarını tarar ve Veri Kataloğu'ndaki meta verileri bölüm meta verileriyle günceller. Veri kümesine erişmek için harici tablonun bölümleri güncellenmelidir.

CloudFormation şablonunu dağıttıktan sonra aşağıdaki adımları tamamlayın:

  1. Athena konsolunda, seçin sorgu düzenleyici Gezinti bölmesinde.
  2. İçin Veri kaynağı, girmek AwsDataCatalog.
  3. İçin veritabanı, girmek athena_prepared_statements.
  4. Üzerinde Çalışma grubu açılır menüden Hazırlanmış İfadelerWG.
  5. Klinik kabul onaylamak.
  6. Sorgu düzenleyici bölmesinde, harici tablonuz için aşağıdaki SQL deyimini çalıştırın:
MSCK REPAIR TABLE athena_prepared_statements.amazon_reviews_parquet;

Bu sorgunun çalıştırılması, test edildiğinde yaklaşık 15 saniye sürer. us-east-1.

  1. Kullanılabilir bölümleri listelemek için aşağıdaki sorguyu çalıştırın. Örnek veri kümesinde aşağıdakilere dayalı bölümler bulunur: product_category.
SHOW PARTITIONS athena_prepared_statements.amazon_reviews_parquet;
  1. Tabloda bulunan bir veri örneğinin çıktısını almak için bir SELECT ifadesi çalıştırın:
SELECT * FROM athena_prepared_statements.amazon_reviews_parquet limit 10;

Hazır ifadeler oluşturun

Athena parametreli sorguları kullanmak için önce PREPARE SQL deyimini çalıştırın ve soru işaretleriyle gösterilen konumsal parametrelerinizi belirtin. Athena'nın hazırladığı deyim belirttiğiniz bir adla saklanır.

Athena sorgu düzenleyicisinde aşağıdaki PREPARE deyimini çalıştırın. adlı bu örnek sorgu product_helpful_reviews, belirli bir ürün kimliği, yorumcu tarafından sağlanan yıldız derecelendirmesi ve diğer Amazon.com müşterileri tarafından incelemeye sağlanan minimum faydalı oy sayısı için üç parametreyle müşteri incelemeleri sağlar.

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;

Ayrıca CreatePreparedStatement API'sini veya SDK'yı da kullanabilirsiniz. Örneğin, AWS CLI'den hazırladığınız ifadeyi oluşturmak için aşağıdaki komutu çalıştırın:

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

Hazır deyimler oluşturma hakkında daha fazla bilgi için bkz. Hazır İfadelerle Sorgulama.

Parametreli sorguları çalıştırın

EXECUTE SQL deyimi ve USING yan tümcesi ile hazırlanan deyime karşı parametreli bir sorgu çalıştırabilirsiniz. USING yan tümcesi, hazırlanan ifadenin parametreleri için bağımsız değişken değerlerini belirtir.

Athena sorgu düzenleyicisinde aşağıdaki EXECUTE deyimini çalıştırın. Bir önceki bölümde oluşturulan hazırlanan ifade, Amazon Smile eGift Card ürün kimliği için en az 4 faydalı oyla 10 yıldızlı incelemeler çıkaracak parametrelerle çalıştırılır.

EXECUTE product_helpful_reviews USING 'BT00DDVMVQ', 4, 10;

Mesajı alırsanız PreparedStatement product_helpful_reviews was not found in workGroup primary, seçtiğinizden emin olun. PreparedStatementsWG çalışma grubu.

Parametreli sorguları çalıştırma hakkında daha fazla bilgi için bkz. Hazır İfadelerle Sorgulama.

Parametreli sorguları kullanarak CloudTrail olaylarında sorgu dizesi verilerini maskeleyin

CloudTrail olaylarında görünen sorgu dizesinden hassas verileri çıkarmak için parametreli sorguları kullanmak isteyebilirsiniz. Örneğin, günlüklerde görünmesini istemediğiniz, parametre olarak PII içeren sütunlarınız olabilir. Athena, EXECUTE ifadeleri için CloudTrail olaylarından sorgu dizelerini otomatik olarak maskeler ve sorgu dizesini değerle değiştirir HIDDEN_DUE_TO_SECURITY_REASONS. Bu, günlük akışlarınızda korunan verilerin görüntülenmesini önlemenize yardımcı olur.

Sorgu için CloudTrail olayına erişmek için aşağıdaki adımları tamamlayın:

  1. gidin Etkinlik geçmişi CloudTrail konsolundaki sayfa.
  2. Açılır menüden şunu seçin: Etkinlik ismi.
  3. Aramak StartQueryExecution olaylar.

Parametreli sorgular için CloudTrail olay kayıtları şunları içerir: queryString ile düzeltilmiş değer HIDDEN_DUE_TO_SECURITY_REASONS. Sorgu dizesi, Athena çalışma grubunun sorgu geçmişinde görünür. Çalışma grubu ayarlarınızda Athena'ya, AWS Glue Data Catalog'a ve Amazon S3 sorgu çıktı konumuna yönelik en az ayrıcalıklı IAM ilkelerini kullanarak erişimi kontrol edebilirsiniz. Son sorguları görüntüleme hakkında daha fazla bilgi için bkz. Son Sorguları Görüntüleme. IAM politikaları hakkında daha fazla bilgi için bkz. AWS hizmetleri için eylemler, kaynaklar ve koşul anahtarları.

SQL enjeksiyonu için koruma katmanı

Bu bölümde, bir SQL enjeksiyon saldırısı örneği ve hazırlanan ifadelerin aynı saldırıya karşı nasıl korunabileceği gösteriliyor. Athena konsolunu çağırmak için kullanıyoruz. StartQueryExecution API adlı bir tabloya karşı users üç sıra ile.

SQL enjeksiyonu, ifadeyi değiştirmek ve veri kümenizin tablolarından veri çıkarmak için isteklere kötü amaçlı SQL kodu ekleme girişimidir. Athena parametreli sorgular olmadan, bir veri kümesini doğrudan sorguluyorsanız veya bir SQL sorgusuna kullanıcı girdisi ekliyorsanız ve kullanıcılar SQL parçaları ekleyebiliyorsa, veri kümesi, sonuç kümesinde yetkisiz veriler döndüren SQL enjeksiyon saldırılarına karşı savunmasız olabilir.

Bu gönderi, kötü amaçlı bir şekilde bir SQL parçası eklemenin bir örneğini gösterir. Örnekte, her zaman doğru döndürecek bir VEYA koşulu (örneğin, OR 1=1) WHERE yan tümcesine eklenir. Aynı örnek sorgu, Athena parametreli sorguları ile gösterilmektedir ve parametre değerinin bir tamsayı olması beklendiğinden ancak “VEYA” karakterlerini içerdiğinden, sorgu geçersiz bir parametre değeri içerdiğinden başarısız olur. Parametre bir String sütununu temel alıyorsa, konumsal bağımsız değişken bir değişmez parametre değeri olarak yorumlandığından, aynı SQL enjeksiyon girişimi, sorgunun hiçbir sonuç döndürmemesine neden olur.

Athena, çok ifadeli SQL enjeksiyon saldırılarına karşı ek bir savunma katmanı sağlar. Yürütülebilir bir komutla (DROP gibi) SQL enjeksiyonu gerçekleştirmeye çalışmak, Athena'nın hata vermesiyle başarısız bir sorguya neden olur Only one sql statement is allowed, çünkü Athena, SQL deyimi gönderimi başına yalnızca bir yürütülebilir komutu kabul eder.

Athena'nın hazırladığı ifadeler, SQL enjeksiyon saldırılarına karşı bir koruma katmanı sağlasa da, diğer önlemler ek savunma katmanları sağlar. Athena'nın hazırladığı açıklamalar, derinlemesine savunma stratejinizin bir parçası olabilir. Güvenlik katmanları hakkında daha fazla bilgi için bkz. Amazon Athena Güvenliği.

SQL enjeksiyon örneği

Örnekte SELECT sorgusunun kullanım amacı, küçük bir değer kümesi almaktır. Ancak, saldırgan kötü amaçlı SQL kodu eklemek için girişi değiştirebilir. Örneğin, bir saldırgan şu değeri girebilir: 1 OR 1=1WHERE yan tümcesine doğru bir koşul ekleyen ve tablodaki tüm kayıtları döndüren:

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

Saldırgan, kötü amaçlı SQL kodu ekleyerek tüm satırları alabilir. users aşağıdaki ekran görüntüsünde gösterildiği gibi tablo.
Athena grafik kullanıcı arabiriminin bir görüntüsü. SELECT * FROM users WHERE id = 1 VEYA 1=1; çalıştırılmıştır. Tablodaki 3, 1 ve 2 kimliklerine sahip 3 kullanıcının tümü, tablonun tüm sütunlarıyla birlikte döndü.

Hazırlanmış bir ifadeyle SQL enjeksiyon girişimi

Önceki örnekteki aynı sorguyla hazırlanmış ifadeler oluşturursak, yürütülebilir komut, parametrenin değeri için değişmez bir argüman olarak iletilir. Bir kullanıcı ek SQL iletmeye çalışırsa, WHERE yan tümcesi bir tamsayı değeri bekleyen kimliği temel aldığından sözdizimi hatası alır.

  1. Aynı sorguyu kullanarak hazırlanmış bir ifade oluşturun. users tablosu:
PREPARE get_user FROM SELECT * FROM users WHERE id = ?
  1. Parametreyi meşru bir değere ayarlayın:
EXECUTE get_user USING 1

Aşağıdaki ekran görüntüsünde gösterildiği gibi beklenen sonuç geri döner.

Athena'nın grafiksel kullanıcı arayüzü sorgu çalıştırıyor get_user USING 1'i KULLANARAK ÇALIŞTIRIN. Yalnızca kimliği 1 olan kullanıcı geri döndü.

  1. Şimdi, kötü niyetli bir değer iletmeyi deneyin:
EXECUTE get_user USING 1 OR 1=1

Bu hazırlanmış ifadeyi çalıştırmak, bir tamsayı değeri beklendiğinden, ancak geçersiz bir tamsayı değeri aldığından bir sözdizimi hatası üretir. 1 OR 1=1. Sorgu ve sözdizimi hatası aşağıdaki ekran görüntüsünde gösterilmektedir.

Athena'nın get_user 1 VEYA 1=1 KULLANARAK YÜRÜTÜNÜ sorgulayan grafik kullanıcı arayüzü. Bir hata var. Hata "SYNTAX_ERROR: satır 1:24: Mantıksal ifadenin sol tarafı bir boolean olarak değerlendirilmelidir (gerçek: tamsayı). Bu sorgu, sorgu tarafından nitelenmedikçe "varsayılan" veritabanına karşı çalıştı. Lütfen hata mesajını bizim sayfamıza gönderin. forumu."

Hazırlanmış ifadelerle çalışma

Bu bölüm, hazırlanan ifadelerle çalışmayı kolaylaştırmak için yönetim işlevlerini açıklar.

AWS hesabımda hazırlanan tüm ifadeleri listele

Bir Athena çalışma grubunda hazırlanan tüm ifadeleri listelemek için AWS Komut Satırı Arayüzü (AWS CLI), aşağıdaki komutu çalıştırabilirsiniz:

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

Yukarıdaki örneği izliyorsanız, komut aşağıdaki yanıtı döndürür.

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

AWS hesabınızdaki mevcut tüm hazırlanmış ifadeleri listelemek için AWS API'lerini kullanabilirsiniz. Bu gönderi, aşağıdakileri kullanarak örnek bir komut dosyası sağlar: Python için AWS SDK (Boto3) hesabınızdaki tüm Bölgeler arasında geçiş yapmak ve Athena çalışma grubuna göre hazırlanmış ifadeleri sağlamak için.

Python betiğini çalıştırmayı planladığınız yerde AWS kimlik bilgileriniz olduğundan emin olun. Daha fazla bilgi için bkz. Tanıtım.

klonlamak GitHub repo veya Python betiğini kopyalayın list-prepared-statements.py depodan ve betiği çalıştırın:

python3 list-prepared-statements.py

değiştirmek <my-profile-name> sizden istendiğinde AWS profil adınızla veya varsayılan yerel kimlik bilgilerini kullanmak için boş bırakın.

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

Aşağıdaki metin betiğin çıktısıdır. Takip ediliyorsa, yanıt yalnızca product_helpful_reviews hazırlanmış beyan.

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:

Hazırlanan ifadeleri güncelleyin

Hazırlanan ifadeleri güncellemek için birkaç seçeneğiniz var. Bunu, sorgu performansınızı optimize etmek, seçtiğiniz değerleri değiştirmek veya başka nedenlerle yapmak isteyebilirsiniz.

  1. PREPARE ifadesini, Athena sorgu düzenleyicisindeki değişikliklerle veya StartQueryExecution API.
  2. Kullan UpdatePreparedStatement AWS CLI veya SDK aracılığıyla API.

Hazırladığınız ifadelere açıklama eklemek veya sorgularınızı güncellemek için bu API'yi kullanabilirsiniz. Sorgu ifadenizi bu yöntemle güncellemek için, ifade adı, çalışma grubu adı, güncellenmiş sorgu ifadesi ve isteğe bağlı olarak yeni bir açıklama sağlamalısınız. hakkında daha fazla bilgi için UpdatePreparedStatement API, bkz. update-prepared-deyimi.

Sorgunuzun sürümlerini kullanıma sunmak isteyebilirsiniz. Kullanıcılar için geriye dönük uyumluluğu korumak için, farklı bir adla yeni hazırlanmış bir ifade oluşturabilirsiniz. Örneğin, hazırlanan ifadenin adında bir sürüm numarası olabilir (örn. my_select_v1 ve my_select_v2). Gerektiğinde, hazırlanan ifadeye güvenen ekiplere değişiklikleri iletebilir ve daha sonra eski hazırlanmış ifade sürümlerini serbest bırakabilirsiniz.

Hazırlanan ifadeleri sil

Hazırlanmış bir ifadeyi silmek için, aşağıdaki sorgu sözdizimini aşağıdaki komuta karşı kullanabilirsiniz: StartQueryExecution API veya Athena sorgu düzenleyicisinin içinden:

DEALLOCATE PREPARE product_helpful_reviews

Ayrıca kullanabilirsiniz DeletePreparedStatement API veya SDK. Örneğin, hazırladığınız ifadeyi AWS CLI'den silmek için aşağıdaki komutu çalıştırın:

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

Temizlemek

Bu gönderiyi takip ettiyseniz, maliyete neden olabilecek birkaç bileşen oluşturdunuz. Gelecekteki ücretleri önlemek için kaynakları aşağıdaki adımlarla kaldırın:

  1. S3 paketinin sonuç önekini silin çalışma grubunuz üzerinde bir sorgu çalıştırdıktan sonra oluşturulur.

Varsayılan şablonla, <S3QueryResultsBucketName>/athena-results. Bu adımda dikkatli olun. sen olmadıkça S3 kovanızda sürüm oluşturmayı kullanma, S3 nesnelerinin silinmesi geri alınamaz.

  1. Athena tarafından hazırlanan deyimleri ReadydStatementsWG'de silin

bölümündeki adımları takip edebilirsiniz. Hazırlanan ifadeleri sil DEALLOCATE PREPARE deyimini kullanarak bu gönderinin bölümünde veya delete-prepared-statement Oluşturduğunuz her hazırlanmış ifade için API.

  1. CloudFormation yığınını kaldırmak için AWS CloudFormation konsolunda yığını seçin, Sil, ve onaylayın.

Sonuç

Athena parametreli sorgular, ortak sorguları Athena çalışma grubunuz içinde depolamak için bir yol sağlayarak kod tabanınızı sorgularınızdan ayırmayı kolaylaştırır. Bu gönderi, Athena'nın parametreleştirilmiş sorgularının kodun yeniden kullanılabilirliğini ve data lake güvenliğini nasıl iyileştirebileceği hakkında bilgi sağladı. Örnek bir veri gölünü nasıl kurabileceğinizi ve parametreli sorguları bugün kullanmaya nasıl başlayacağınızı gösterdik. Ayrıca, parametrelileştirilmiş sorgu tekliflerinin korumalarına bir örnek ve ayrıntılı ek yönetim işlevleri sağladık.

Athena'nın hazırladığı ifadelere şuradan başlayabilirsiniz: Athena konsolu, AWS CLI'siYa da AWS SDK'sı. Athena hakkında daha fazla bilgi için bkz. Amazon Athena Kullanım Kılavuzu.

Bu gönderiyi okuduğunuz için teşekkürler! Athena parametreli sorguları hakkında sorularınız varsa, yorumlar bölümünde yorum bırakmaktan çekinmeyin.


Yazarlar Hakkında

Blayze Stefaniak AWS'de kamu sektörü, federal finans ve sağlık kuruluşlarıyla çalışan Kıdemli Çözüm Mimarıdır. Blayze, Pittsburgh merkezli. Karmaşık durumları pratik ve uygulanabilir bir şeye bölme konusunda tutkulu. İlgi alanları arasında yapay zeka, dağıtılmış sistemler ve Excel formül jimnastiği yer almaktadır. Blayze, Clarion University of Pennsylvania'dan Muhasebe alanında BSBA ve Bilgi Sistemleri alanında lisans derecesine sahiptir. Boş zamanlarında Blayze'yi Star Wars sesli kitaplarını dinlerken, köpeklerini güldürmeye çalışırken ve muhtemelen sessizce konuşurken bulabilirsiniz.

Daniel Tatarkin Amazon Web Services'de (AWS) Federal Finans kuruluşlarını destekleyen bir Çözüm Mimarıdır. Büyük veri analitiği ve sunucusuz teknolojiler konusunda tutkulu. İş dışında, kişisel finans, kahve hakkında bilgi edinmek ve eğlenmek için yeni programlama dilleri denemekten hoşlanıyor.

spot_img

En Son İstihbarat

spot_img

Bizimle sohbet

Merhaba! Size nasıl yardım edebilirim?