aws(學習筆記第三十三課) 深入使用cdk 練習aws athena

文章目錄

  • aws(學習筆記第三十三課) 深入使用cdk
  • 學習內容:
    • 1. 使用`aws athena`
      • 1.1 什么是`aws athena`
      • 1.2 什么是`aws glue`
      • 1.2 為什么`aws athena`和`aws glue`一起使用
    • 2. 開始練習`aws athena`
      • 2.1 代碼鏈接
      • 2.2 整體架構
      • 2.3 代碼解析
        • 2.3.1 創建測試數據的`S3 bucket`
        • 2.3.2 創建保存查詢結果的`S3 bucket`
        • 2.3.3 將示例的程序`json`數據文件同期到`S3 bucket`
        • 2.3.4 創建`aws glue`的`cfnDatabase`
        • 2.3.5 創建`aws glue crawler`需要的權限`Role`
        • 2.3.6 創建`aws glue crawler`
        • 2.3.7 創建`aws athena work group`
        • 2.3.8 創建`aws athena query`
        • 2.3.9 調整執行順序
      • 2.4 開始執行`aws cdk for athena`
        • 2.4.1 執行部署
        • 2.4.2 執行`crawler`爬蟲
        • 2.4.3 查看`aws athena`的`queries`
        • 2.4.4 執行`aws athena`的`queries`
        • 2.4.5 查看`aws athena`的`queries`執行結果

aws(學習筆記第三十三課) 深入使用cdk

  • 使用cdk生成athena以及aws glue crawler

學習內容:

  • 使用aws athena + aws glue crawler

1. 使用aws athena

1.1 什么是aws athena

aws athenaaws提供的數據分析service,可以使用SQL語言對S3上保存的數據進行分析。

  • managed service,所以不需要維護。
  • 基于OpenSource的框架構筑
  • 基于處理的數據量進行收費
  • 對數據提供加密功能
    注意 和RDB不能進行JOIN操作,所以只能提供對csvjson進行數據查詢

1.2 什么是aws glue

aws glueaws提供的managed ETL service。能夠簡單的進行分析數據的準備和loadtableschema關聯的metadata能夠作為aws glue catalog data進行保存。

1.2 為什么aws athenaaws glue一起使用

aws athena結合aws glue能夠將aws glue作成的database或者schema,使用aws athena進行查詢。

2. 開始練習aws athena

2.1 代碼鏈接

代碼鏈接aws-cdk-examples

2.2 整體架構

在這里插入圖片描述

2.3 代碼解析

2.3.1 創建測試數據的S3 bucket
 # creating the buckets where the logs will be placedlogs_bucket = s3.Bucket(self, 'logs-bucket',bucket_name=f"auditing-logs-{self.account}",removal_policy=RemovalPolicy.DESTROY,auto_delete_objects=True)

在這里插入圖片描述

2.3.2 創建保存查詢結果的S3 bucket
 # creating the bucket where the  queries output will be placedquery_output_bucket = s3.Bucket(self, 'query-output-bucket',bucket_name=f"auditing-analysis-output-{self.account}",removal_policy=RemovalPolicy.DESTROY,auto_delete_objects=True)

在這里插入圖片描述

2.3.3 將示例的程序json數據文件同期到S3 bucket
# uploading the log files to the bucket as exampless3_deployment.BucketDeployment(self, 'sample-files',destination_bucket=logs_bucket,sources=[s3_deployment.Source.asset('./log-samples')],content_type='application/json',retain_on_delete=False
)

在這里插入圖片描述

2.3.4 創建aws gluecfnDatabase
    # creating the Glue Database to serve as our Data Catalogglue_database = glue.CfnDatabase(self, 'log-database',catalog_id=self.account,database_input=glue.CfnDatabase.DatabaseInputProperty(name="log-database"))

在這里插入圖片描述

2.3.5 創建aws glue crawler需要的權限Role
# creating the permissions for the crawler to enrich our Data Catalogglue_crawler_role = iam.Role(self, 'glue-crawler-role',role_name='glue-crawler-role',assumed_by=iam.ServicePrincipal(service='glue.amazonaws.com'),managed_policies=[# Remember to apply the Least Privilege Principle and provide only the permissions needed to the crawleriam.ManagedPolicy.from_managed_policy_arn(self, 'AmazonS3FullAccess','arn:aws:iam::aws:policy/AmazonS3FullAccess'),iam.ManagedPolicy.from_managed_policy_arn(self, 'AWSGlueServiceRole','arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole')])

這里需要兩個policyAmazonS3FullAccessAWSGlueServiceRole
在這里插入圖片描述

2.3.6 創建aws glue crawler
 # creating the Glue Crawler that will automatically populate our Data Catalog. Don't forget to run the crawler# as soon as the deployment finishes, otherwise our Data Catalog will be empty. Check out the README for more instructionsglue.CfnCrawler(self, 'logs-crawler',name='logs-crawler',database_name=glue_database.database_input.name,role=glue_crawler_role.role_name,targets={"s3Targets": [{"path": f's3://{logs_bucket.bucket_name}/products'},{"path": f's3://{logs_bucket.bucket_name}/users'}]})

這里,aws glue crawler執行ETL Extract Transform Load,將S3 bucket里面的productsusers的數據文件,經過轉換將json數據文件loadglue database
在這里插入圖片描述

2.3.7 創建aws athena work group
# creating the Athena Workgroup to store our querieswork_group = athena.CfnWorkGroup(self, 'log-auditing-work-group',name='log-auditing',work_group_configuration=athena.CfnWorkGroup.WorkGroupConfigurationProperty(result_configuration=athena.CfnWorkGroup.ResultConfigurationProperty(output_location=f"s3://{query_output_bucket.bucket_name}",encryption_configuration=athena.CfnWorkGroup.EncryptionConfigurationProperty(encryption_option="SSE_S3"))))

在這里插入圖片描述
aws athena通過work group進行管理,創建了workgroup之后,在里面繼續創建query

2.3.8 創建aws athena query
# creating an example query to fetch all product events by dateproduct_events_by_date_query = athena.CfnNamedQuery(self, 'product-events-by-date-query',database=glue_database.database_input.name,work_group=work_group.name,name="product-events-by-date",query_string="SELECT * FROM \"log-database\".\"products\" WHERE \"date\" = '2024-01-19'")# creating an example query to fetch all user events by dateuser_events_by_date_query = athena.CfnNamedQuery(self, 'user-events-by-date-query',database=glue_database.database_input.name,work_group=work_group.name,name="user-events-by-date",query_string="SELECT * FROM \"log-database\".\"users\" WHERE \"date\" = '2024-01-22'")# creating an example query to fetch all events by the user IDall_events_by_userid_query = athena.CfnNamedQuery(self, 'all-events-by-userId-query',database=glue_database.database_input.name,work_group=work_group.name,name="all-events-by-userId",query_string="SELECT * FROM (\n""    SELECT transactionid, userid, username, domain, datetime, action FROM \"log-database\".\"products\" \n""UNION \n""    SELECT transactionid, userid, username, domain, datetime, action FROM \"log-database\".\"users\" \n"") WHERE \"userid\" = '123'")
2.3.9 調整執行順序
# adjusting the resource creation order
product_events_by_date_query.add_dependency(work_group)
user_events_by_date_query.add_dependency(work_group)
all_events_by_userid_query.add_dependency(work_group)

2.4 開始執行aws cdk for athena

2.4.1 執行部署
python -m venv .venv
source .venv/Scripts/activate # windows platform
pip install -r requirements.txt
cdk synth
cdk --require-approval never deploy
2.4.2 執行crawler爬蟲

在這里插入圖片描述
默認crawler是不啟動的,需要run起來。
在這里插入圖片描述
正常執行完畢。數據都由S3 bucketjson文件,經過ETL,進入到aws glue database里面了。
在這里插入圖片描述

2.4.3 查看aws athenaqueries

AWS Athena > 查詢編輯器 > 已保存的查詢 > 工作組 > log auditing
在這里插入圖片描述

2.4.4 執行aws athenaqueries

在這里插入圖片描述

2.4.5 查看aws athenaqueries執行結果

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/72731.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/72731.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/72731.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

每日學習Java之一萬個為什么(待補充)

Git分支操作 git branch 分支名 git branch -v git checkout -b 分支名 git checkout 分支名 git merge 分支名 git branch -d | -D 分支名Git沖突 git同名文件合并的最基本單位是行。同名文件同一行不同就會發生沖突。 解決辦法:及時溝通,手動更改&…

C++ 多生產者單消費者(MPSC)模式

根據你的需求,多生產者單消費者(MPSC)模式的日志任務隊列需要調整設計。以下是改進后的代碼實現,重點在于多線程安全入隊、單線程消費任務,并確保停止時隊列任務全部處理完畢: 多生產者單消費者(MPSC)任務隊列實現 #include <iostream> #include <queue> …

OpenCV基礎【圖像和視頻的加載與顯示】

目錄 一.創建一個窗口&#xff0c;顯示圖片 二.顯示攝像頭/多媒體文件 三.把攝像頭錄取到的視頻存儲在本地 四.鼠標回調事件 五.TrackBar滑動條 一.創建一個窗口&#xff0c;顯示圖片 import cv2img_path "src/fengjing.jpg" # 自己的圖片路徑 img cv2.imre…

c++--vector

1.定義vector vector的定義分為四種 (1)vector() ——————無參構造 (2)vector(size_t n,const value_type& val value_type()) ——————構造并初始化n個val (3)vector(const vector& v1) ———————拷貝構造 (4)vector(inputiterator first,inpu…

宇樹科技純技能要求總結

一、嵌入式開發與硬件設計 核心技能 嵌入式開發&#xff1a; 精通C/C&#xff0c;熟悉STM32、ARM開發熟悉Linux BSP開發及驅動框架&#xff08;SPI/UART/USB/FLASH/Camera/GPS/LCD&#xff09;掌握主流平臺&#xff08;英偉達、全志、瑞芯微等&#xff09; 硬件設計&#xff1a…

「Unity3D」UGUI運行時設置元素的錨點Anchor,維持元素Rect的顯示不變,即待在原處

在編輯器中&#xff0c;通過設置Raw edit mode&#xff0c;可以切換兩種&#xff0c;元素錨點的改變模式&#xff1a; 一種是錨點單獨改變&#xff0c;即&#xff1a;不開啟原始模式&#xff0c;保持原樣&#xff0c;改變anchoredPosition與sizeDelta。一種是錨點聯動顯示&…

使用 Google Firebase 控制臺和 ESP8266 NodeMCU 的物聯網控制 LED

使用 Google Firebase 控制臺控制 LED ESP8266 您是否想過從世界任何地方控制任何外圍設備?是的,IoT(物聯網)使從任何地方控制任何設備成為可能,并且有許多 IoT 硬件和云平臺可用于實現這一目標。在前面的教程中,我們已經介紹了許多 IoT 應用程序。今天,我們將使用 Goo…

【數據庫】如何用索引優化查詢性能

引言 在數據庫查詢中&#xff0c;索引是提升性能的關鍵工具。合理使用索引可以顯著減少數據掃描量&#xff0c;加快查詢速度。然而&#xff0c;索引的使用也需要謹慎&#xff0c;錯誤的索引策略可能導致性能下降甚至系統崩潰。本文將深入探討如何通過索引優化查詢性能&#xf…

LeetCode 392. 判斷子序列 java題解

https://leetcode.cn/problems/is-subsequence/description/ 轉化為最長公共子序列問題。求[lens][j]的公共子序列長度是否為lens。 class Solution {//s屬于t,lens<lentpublic boolean isSubsequence(String s, String t) {int lenss.length(),lentt.length();if(s.length…

【Kubernetes】Kube Proxy 如何幫助 Pod 之間通信?Kube-Proxy 實踐案例

kube-proxy 主要通過管理網絡規則和流量轉發來幫助 Pod 之間進行通信&#xff0c;具體方式如下&#xff1a; 1. 維護 Service 相關的網絡規則 kube-proxy 監聽 API Server&#xff0c;當 Service 或 Endpoints 發生變化時&#xff0c;動態更新網絡規則。確保流量能正確地從 S…

平衡樹的模擬實現

一.平衡樹的介紹 平衡樹是以二叉樹結構為基礎&#xff0c;同時引入了平衡因子進行了限制&#xff0c;以保證樹的結點之間的高度差小于等于1&#xff0c;在插入刪除結點時通過旋轉的方法保持高度相對平衡&#xff0c;從而提高搜索等效率。 二.代碼實現 1.平衡樹結點 平衡樹結…

JavaScript基礎-獲取元素

在Web開發中&#xff0c;使用JavaScript動態地訪問和操作網頁上的元素是一項基本技能。通過獲取頁面上的特定元素&#xff0c;我們可以對其進行各種操作&#xff0c;比如修改內容、樣式或屬性等。本文將詳細介紹幾種獲取DOM元素的方法&#xff0c;并探討它們的特點及適用場景。…

為什么要用(:deep、::v-deep、>>>)樣式穿透

在 Vue.js 中&#xff0c;當你使用像 Element UI 這樣的 UI 庫時&#xff0c;它們的樣式通常是全局的&#xff0c;即使你在組件中使用了 scoped 樣式&#xff08;為什么要用scoped&#xff09;&#xff0c;仍然可能需要對這些全局樣式進行修改。 為了實現這一點&#xff0c;樣…

MySQL中的事務隔離級別有哪些

MySQL中的事務隔離級別 一、事務并發問題二、MySQL 事務隔離級別1. READ UNCOMMITTED&#xff08;讀未提交&#xff09;2. READ COMMITTED&#xff08;讀已提交&#xff09;3. REPEATABLE READ&#xff08;可重復讀&#xff09;&#xff08;MySQL 默認級別&#xff09;4. SERIA…

Python----計算機視覺處理(Opencv:圖像鏡像旋轉)

一、圖像鏡像旋轉 圖像的旋轉是圍繞一個特定點進行的&#xff0c;而圖像的鏡像旋轉則是圍繞坐標軸進行的。圖像鏡像旋轉&#xff0c;也可 以叫做圖像翻轉&#xff0c;分為水平翻轉、垂直翻轉、水平垂直翻轉三種。 通俗的理解為&#xff0c;當以圖片的中垂線為x軸和y軸時&#x…

hibernate 自動生成數據庫表和java類 字段順序不一致 這導致添加數據庫數據時 異常

hibernate 自動生成的數據庫表和java類 字段順序不一致 這導致該書寫方式添加數據庫數據時 異常 User user new User( null, username, email, phone, passwordEncoder.encode(password) ); return userRepository.save(user);Hibernate 默認不會保證數據庫表字段的順序與 Ja…

python|結構的模式匹配match|同步迭代

在 Python 中&#xff0c;模式匹配&#xff08;Pattern Matching&#xff09; 是一種強大的功能&#xff0c;用于根據數據的結構或內容進行匹配和處理。Python 3.10 引入了 match 語句&#xff0c;使得模式匹配更加直觀和靈活。模式匹配可以用于處理復雜的數據結構&#xff0c;…

博客圖床 VsCode + PigGo + 阿里云OSS

關鍵字 寫博客&#xff0c;圖床&#xff0c;VsCode&#xff0c;PigGo&#xff0c;阿里云OSS 背景環境 我想把我在本地寫的markdown文檔直接搬到CSDN上和博客園上&#xff0c;但是圖片上傳遇到了問題。我需要手動到不同平臺上傳文件&#xff0c;非常耗費時間和經歷。 為了解決…

路由器安全研究:D-Link DIR-823G v1.02 B05 復現與利用思路

前言 D-Link DIR-823G v1.02 B05存在命令注入漏洞&#xff0c;攻擊者可以通過POST的方式往 /HNAP1發送精心構造的請求&#xff0c;執行任意的操作系統命令。 漏洞分析 binwalk提取固件&#xff0c;成功獲取到固件。 現在我們已經進入到應用里了&#xff0c;那么我們在進行分析…

c++ 類和對象 —— 下 【復習總結】

1. 深入構造函數 1.1 函數體賦值 前文我們提到&#xff0c;創建對象時&#xff0c;編譯器會調用構造函數給成員變量賦值。但這并不能稱為對對象中成員變量的初始化。因為初始化只能初始化一次&#xff0c;但構造函數體內可以多次賦值。構造函數體中語句只能稱為賦初值 那么&…