基于AWS Serverless的Glue服务进行ETL(提取、转换和加载)数据分析(三)——serverless数据分析

news2024/9/25 17:13:40

3 serverless数据分析

大纲

  • 3 serverless数据分析
    • 3.1 创建Lambda
    • 3.2 创建API Gateway
    • 3.3 结果
    • 3.4 总结

3.1 创建Lambda

在Lambda中,我们将使用python3作为代码语言。

步骤图例
1、入口在这里插入图片描述
2、创建(我们选择使用python3.7)在这里插入图片描述
3、IAM权限(权限可信实体需要包括Lambda才能将角色绑定到Lambda上)在这里插入图片描述见下方“IAM可信实体描述”
4、指定处理函数(处理程序要为用户程序的入口)在这里插入图片描述
5、添加层(层为我们的代码运行时的环境,并且,兼容运行时要包含上一步中的运行时环境)在这里插入图片描述
6、代码(在此代码中使用了boto3来连接Athena,可自定义sql,使用方法请看官方文档)见下方“Lambda代码”

IAM可信实体描述:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "lambda.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

Lambda代码

import boto3, os, json
import pandas as pd

from pyathena import connect
import time
REGION = "us-west-2"

# expected request: anomaly/{meter_id}?data_start={}&data_end={}&outlier_only={}
def lambda_handler(event, context):
    ATHENA_OUTPUT_BUCKET = "【待替换S3桶路径】/athena"
    DB_SCHEMA = "suzikuo_test_db"

    USE_WEATHER_DATA = 0
    pathParameter = event["pathParameters"]
    queryParameter = event["queryStringParameters"]
    METER_ID = pathParameter['meter_id']
    DATA_START = queryParameter['data_start']
    DATA_END = queryParameter['data_end']
    OUTLIER_ONLY = queryParameter['outlier_only']
    query = '''
    select * from "{}".reading_type_int
    where meter_id = '{}'
    and cast(reading_date_time as timestamp) >= timestamp '{}' and cast(reading_date_time as timestamp) < timestamp '{}'
    '''.format(DB_SCHEMA, METER_ID, DATA_START, DATA_END)

    athena = boto3.client('athena')
    response = athena.start_query_execution(
    QueryString=query,
    QueryExecutionContext={
        'Database': 'suzikuo_test_db'
    },
    ResultConfiguration={
        'OutputLocation': 's3://suzikuo-test-2022-8-4-s3/athena',
        'EncryptionConfiguration': {
            'EncryptionOption': 'SSE_S3'
        }
    }
    )
    while True:
        try:
            query_results = athena.get_query_results(
                QueryExecutionId=response['QueryExecutionId']
            )
            break
        except Exception as err:
            if 'Query has not yet finished' in str(err):
                time.sleep(3)
            else:
                raise(err)

    return query_results['ResultSet']['Rows']

3.2 创建API Gateway

使用API Gateway+Lambda 可轻松实现一个serverless架构。

步骤图例
1、入口在这里插入图片描述
2、API(我们使用的是Lambda,所以选HTTP API)在这里插入图片描述
3、创建集成(指定要绑定的Lambda)在这里插入图片描述
4、配置路由(指定路由要请求的集成(lambda))在这里插入图片描述
5、一直下一步即可

3.3 结果

此案例只查询了某一ID的某个时间段内的数据
通过获取URI和参数,在Lambda中编写逻辑,可以实现我们对数据的任意操作。

在这里插入图片描述

3.4 总结

到此,我们已经完成了基于Glue ETL(提取、转换和加载)的serviceless 数据分析的全部过程了。在此案例中,我们使用到了AWS 服务中的Glue、S3、APIGateway、Lambda等服务实现了一个通过API访问的数据统计与分析接口。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1284800.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HarmonyOS引入其他包,以引入请求axios为例

安装文件 安装文件位置: 总目录的oh-package.json5文件 dependencies&#xff1a;生产环境–上线运行时候必须需要的包 devDependencies&#xff1a;开发环境–开发适合为了方便提高效率的包。 包管理工具 OHPM CLI 作为鸿蒙生态三方库的包管理工具&#xff0c;支持OpenHar…

基于Python自动化测试框架之接口测试

前段时间由于公司测试方向的转型&#xff0c;由原来的web页面功能测试转变成接口测试&#xff0c;之前大多都是手工进行&#xff0c;利用postman和jmeter进行的接口测试&#xff0c;后来&#xff0c;组内有人讲原先web自动化的测试框架移驾成接口的自动化框架&#xff0c;使用的…

ESP32 LVGL Gui-Guider的移植

使用参考&#xff1a; ESP32系列之LVGL&#xff08;三&#xff09;&#xff1a;Gui-Guider的使用_esp32 lvgl-CSDN博客 1、拷贝文件&#xff1a; 按照上面的文章&#xff0c;使用Gui-Guider软件生成C代码之后&#xff0c;custom和generated是我们要使用到的文件&#xff0c;…

异常处理 springboot

全局异常处理 RestcontrollerAdvice Exceptonhandler package com.it.Exception;import com.it.pojo.Result; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice;/*全局异常处理器…

鸿蒙4.0开发笔记之ArkTS装饰器语法基础之监听者模式@Watch案例讲解(十四)

1、Watch定义 Watch实际是指状态变量更改通知。如果开发者需要关注某个状态变量的值是否改变&#xff0c;可以使用Watch为状态变量设置回调函数&#xff08;监听函数&#xff09;。 Watch用于监听状态变量的变化&#xff0c;当状态变量变化时&#xff0c;Watch的回调方法将被…

华清远见嵌入式学习——C++——作业5

作业要求&#xff1a; 代码&#xff1a; #include <iostream>using namespace std;//沙发 类 class Sofa { private:string sitting; //是否可坐double *cost; //花费 public://无参构造函数Sofa(){}//有参构造函数Sofa(string s,double c):sitting(s),cost(new double(…

在 Mac 上使用浅色或深色外观

在 Mac 上&#xff0c;选取苹果菜单 >“系统设置”&#xff0c;然后点按边栏中的“外观” 。&#xff08;你可能需要向下滚动。&#xff09;选择右侧的“浅色”、“深色”或“自动”。 “浅色”表示不会发生变化的浅色外观。 “深色”表示不会发生变化的深色外观。“深色模式…

[MySQL--基础]多表查询

前言 ⭐Hello!这里是欧_aita的博客。 ⭐今日语录&#xff1a;生活中最大的挑战就是发现自己是谁。然后&#xff0c;坚定不移地成为那个人。 ⭐个人主页&#xff1a;欧_aita ψ(._. )>⭐个人专栏&#xff1a; 数据结构与算法 MySQL数据库 多表查询 前言多表关系概述&#x1f…

DNS服务器配置与分析

目录 实验目的&#xff1a; 实验原理&#xff1a; 实验步骤&#xff1a; 步骤1&#xff1a;创建拓扑 步骤2&#xff1a;为PC、Client和Server配置IPv4地址、子网掩码和域名服务器 步骤3&#xff1a;启动设备和服务器 步骤4&#xff1a;测试PC-1、Client-1和Server-1之间…

仅 CSS 阅读进度条

为了构建一个阅读进度条&#xff0c;即显示用户向下滚动时阅读文章的进度&#xff0c;很难不考虑 JavaScript。但是&#xff0c;事实证明&#xff0c;您也可以使用纯 CSS 构建阅读进度条。 从本质上讲&#xff0c;一个名为 animation-timeline 的新实验性 CSS 属性可以让你指定…

剑指 Offer(第2版)面试题 16:数值的整数次方

剑指 Offer&#xff08;第2版&#xff09;面试题 16&#xff1a;数值的整数次方 剑指 Offer&#xff08;第2版&#xff09;面试题 16&#xff1a;数值的整数次方解法1&#xff1a;快速幂 - 递归写法解法2&#xff1a;快速幂 - 非递归写法 剑指 Offer&#xff08;第2版&#xff…

强化学习——简单解释

一、说明 最近 OpenAI 上关于 Q-star 的热议激起了我温习强化学习知识的兴趣。这是为强化学习 (RL) 新手提供的复习内容。 二、强化学习的定义 强化学习是人类和其他动物用来学习的学习类型。即&#xff0c;通过阅读房间来学习。&#xff08;从反馈中学习&#xff09;。让我解…

在线直线度测量仪在圆形轧钢中的重要性

在线直线度测量仪在圆形轧钢中的重要性 在现代轧钢生产中&#xff0c;在线直线度测量仪是一种非常重要的工具&#xff0c;它可以帮助工人和产线进行高精度的直线度和直径测量&#xff0c;从而保证产品质量的稳定性和精度。以下是详细介绍直线度测量仪的重要性和应用。 一、测…

高斯平滑处理

本文主要介绍了高斯滤波器的原理及其实现过程 高斯滤波器是一种线性滤波器,能够有效的抑制噪声,平滑图像。其作用原理和均值滤波器类似,都是取滤波器窗口内的像素的均值作为输出。其窗口模板的系数和均值滤波器不同,均值滤波器的模板系数都是相同的为1;而高斯滤波器的模板…

06、pytest将多个测试放在一个类中

官方用例 # content of test_class.py # 实例1 class TestClass:def test_one(self):x "this"assert "h" in xdef test_two(self):x "hello"assert hasattr(x,"check")# content of test_class_demo.py # 每个测试都有唯一的类实例…

逻辑回归 使用Numpy实现逻辑回归

使用Numpy实现逻辑回归 sigmoid 函数 g ( z ) 1 ( 1 e − z ) g(z)\frac{1}{(1e^{−z} )} g(z)(1e−z)1​ # sigmoid 函数 def sigmod(z):return 1/(1np.exp(-z))线性计算与梯度下降 J ( θ ) − 1 m [ ∑ i 1 m y ( i ) l o g ⁡ ( h θ ( x ( i ) ) ) ( 1 − y ( i ) …

算符优先语法分析程序设计与实现

制作一个简单的C语言词法分析程序_用c语言编写词法分析程序-CSDN博客文章浏览阅读378次。C语言的程序中&#xff0c;有很单词多符号和保留字。一些单词符号还有对应的左线性文法。所以我们需要先做出一个单词字符表&#xff0c;给出对应的识别码&#xff0c;然后跟据对应的表格…

quickapp_快应用_生命周期

生命周期 APP的生命周期页面组件的生命周期页面栈页面的生命周期onBackPressonMenuPress踩坑 onRefreshonConfigurationChanged页面滚动 自定义组件的生命周期父子组件初始化生命周期执行顺序 APP的生命周期 App的生命周期在app.ux 中定义的回调函数。 onCreate() {prompt.sh…

谈谈 .NET8 平台中对 LiteDB 的 CRUD 操作

哪个啥&#xff01;纯 C# 编写的 LiteDB 你还不会操作&#xff1f; LiteDB 简介LiteDB 安装同步版 LiteDB异步版 LiteDB.Async LiteDB StudioLiteDB CRUD 操作举例LiteDB vs SQLite 对比1、谈谈 sqlite 和 litedb 的 ACID 事务支持&#xff1f;2、谈谈 sqlite 和 litedb 的稳定…

股票代码合法验证:python字符串str应用

从键盘输入六位股票代码字符串&#xff0c;判定合法并输出板块分类&#xff0c;否则输出“NO”。 (笔记模板由python脚本于2023年12月04日 19:19:07创建&#xff0c;本篇笔记适合熟悉python字符串和字典的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https:…