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.mzph.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;但构造函数体内可以多次赋值。构造函数体中语句只能称为赋初值 那么&…