当前位置: 首页 > news >正文

AWS Quicksight实践:从零到可视化分析

一、什么是 QuickSight?

Amazon QuickSight 是 AWS 提供的一款 云原生商业智能(BI)工具,它能让用户直接在云端快速构建交互式仪表盘、报表和可视化分析,而无需传统 BI 工具繁琐的运维部署。

它的定位是 轻量、快、自动扩展、与 AWS 服务紧密集成。你可以直接连接 Athena、Redshift、RDS、S3 里的数据,还可以直接上传json文件入库,能快速做出图表并分享给团队和个人。

二、QuickSight 的核心特点

  1. 无服务器化:不用自己搭 BI 平台,QuickSight 托管在 AWS。

  2. 数据源丰富:支持直接连接 S3、Athena、RDS、Redshift、Snowflake、Salesforce、Excel、CSV 等。

  3. 交互式仪表盘:不仅能画柱状图、折线图、饼图,还支持 Sankey 图、词云、热力图等高级可视化。

  4. SPICE 引擎:QuickSight 内置了一个高性能内存计算引擎(SPICE),数据加载进去之后查询速度很快,适合大规模交互分析。

  5. 与 AWS 集成:IAM 控制权限,CloudTrail 记录操作日志,CloudWatch 监控,Lambda 触发刷新任务,原生生态优势明显。

三、数据准备与建模

在 QuickSight 里,数据的使用大体分三步:

  1. 数据集(Dataset):
    创建方式如图所示,支持很多方式。数据导入选择SPICE,会大幅度提升页面加载速度。
        

  2. 字段计算

    • QuickSight 支持类似 Excel 的计算字段语法,例如:

      ifelse({status} = 'FAILED', 1, 0)
  3. 数据刷新

    • 导入 SPICE 后可定时刷新

    • 也可以用 boto3 的 create_ingestion API 实现立即刷新

四、可视化实践

        1. 本地自动上传文件为例:

        (1)创建dataset,并选择s3上的json文件创建表结构,也可以用脚本里的 

manifest_demo_reviews_v1.json上传S3创建。     

(2)本地文件生成dataset的表结构,并上传S3自动更新,脚本参考:

import boto3
import botocore
import json
import uuid
import time
from datetime import datetimequicksight_dataset_cache={'demo_reviews_v1': '14194554-2b79-47a9-8b00-c849ea4a23cd'}def get_aws_boto3_config(region_name):bsession = boto3.Session(region_name=region_name,aws_access_key_id="",aws_secret_access_key="")https_config = botocore.config.Config(signature_version='s3v4')return bsession, https_configdef upload_to_s3(file_path, bucket_name, s3_key):"""Upload file to S3 bucket.Args:bucket_name: S3 bucket name.file_path: File path to upload.s3_key: S3 file key."""region_name = 'us-east-1'aws_se, conf = get_aws_boto3_config(region_name)s3 = aws_se.client('s3', config=conf)s3.upload_file(file_path, bucket_name, s3_key)def list_all_datasets(account_id, quicksight):"""分页获取所有数据集"""datasets = []next_token = Nonewhile True:if next_token:response = quicksight.list_data_sets(AwsAccountId=account_id, NextToken=next_token)else:response = quicksight.list_data_sets(AwsAccountId=account_id)datasets.extend(response["DataSetSummaries"])next_token = response.get("NextToken")if not next_token:break# print(f'datasets==>{datasets}')return datasetsdef get_dataset_id_by_name(account_id, dataset_name, quicksight):"""根据数据集名称查找 DataSetId"""if dataset_name not in quicksight_dataset_cache:datasets = list_all_datasets(account_id, quicksight)for ds in datasets:if 'demo_' in ds["Name"]:quicksight_dataset_cache[ds["Name"]] = ds["DataSetId"]dataset_id = quicksight_dataset_cache[dataset_name] if dataset_name in quicksight_dataset_cache else Nonereturn dataset_id# Refresh dataset
def update_quicksight_dataset(dataset_name):try:aws_se, conf = get_aws_boto3_config('us-east-1')quicksight = aws_se.client('quicksight', config=conf)sts = aws_se.client('sts', config=conf)account_id = sts.get_caller_identity()['Account']dataset_id = get_dataset_id_by_name(account_id, dataset_name, quicksight)if not dataset_id:print(f'ERROR: update_quicksight_dataset===>no dataset_id')returningestion_id = str(int(time.time()))# For SPICE dataset, use FULL_REFRESHquicksight.create_ingestion(AwsAccountId=account_id,DataSetId=dataset_id,IngestionId=ingestion_id,IngestionType='FULL_REFRESH')print(f"QuickSight dataset refresh successful: {dataset_name}")except Exception as e:print(f'ERROR: update_quicksight_dataset===>dataset_name={dataset_name}, e = {e}')def demo_reviews_analysis(file_name, output_path, version):with open(file_name, 'r', encoding='utf-8') as f:content = json.load(f)# 此处省略 content的解析过程,以data_list为示例data_list = [{"id": "","name": "","date": ""}]data_list.append(item_obj)file_save_path = f'{output_path}/demo_reviews_{version}.json'with open(file_save_path, 'w', encoding='utf-8') as f:json.dump(data_list, f, indent=2, ensure_ascii=False)# Upload data filedata_s3_key = f'upload/{output_path}/demo_reviews_{version}.json'upload_to_s3(file_save_path, bucket_name='test_bucket', s3_key=data_s3_key)# Create and upload manifest filemanifest = {"fileLocations": [{"URIs": [f"s3://test_bucket/{data_s3_key}"]}],"globalUploadSettings": {"format": "JSON"}}manifest_path = f'{output_path}/manifest_demo_reviews_{version}.json'with open(manifest_path, 'w') as f:json.dump(manifest, f)upload_to_s3(manifest_path, bucket_name='test_bucket', s3_key=f'upload/{output_path}/manifest_demo_reviews_{version}.json')update_quicksight_dataset(f'demo_reviews_{version}')if __name__ == "__main__":version = 'v1'  #Different version configuration namessource_path = f'source_{version}'  #Original fileoutput_path = f'domo_data_{version}'demo_reviews_path = f'{source_path}/demo_reviews.json'demo_reviews_analysis(demo_reviews_path, f'{output_path}', version)

3. 创建analysis,然后可以选择如下各种图表样式创建:

4. 如果需要一些像excel一样的计算方式,可以点增加计算,支持各种类似excel的计算方式。

5.页面创作完成之后要点右上角publish,然后share dashboard分享给想要看到的人。

6.要是想要分享给一个群组,可以点右上角头像后,选择管理quicksight,创建一个群组,之后把上面页面分享给群组,组内的成员就都能看到页面。

http://www.dtcms.com/a/405956.html

相关文章:

  • 微服务注册中心 Spring Cloud Eureka是什么?
  • websocket链接
  • 【oceanbase】Oracle模式查看pl慢sql
  • 电子商务网站规划的流程网站备案申请模板
  • 旺道网站优化公众号怎么推广
  • 内存卡标识全解析:从存储到性能的密码
  • 动态的魔法:列表与条件渲染
  • 乐清联科网站建设wordpress divi 数据
  • ARM单片机中断及中断优先级管理详解
  • python软件操作
  • c++_day2
  • 数据通信与计算机网络-交换
  • 2026考研时间,定了
  • 转:Ubuntu20.04安装NVIDIA驱动+CUDA超详细安装指南
  • 软件系统设计课程-Day1-从用户投诉到系统需求
  • 飞浪网站建设网站开发毕业设计任务书
  • JavaScript学习笔记(十二):call、apply和bind使用指南
  • Java外功基础(1)——Spring Web MVC
  • 【双机位A卷】华为OD笔试之【DP】双机位A-构建数列【Py/Java/C++/C/JS/Go六种语言】【欧弟算法】全网注释最详细分类最全的华子OD真题题解
  • 基于PyTorch深度学习无人机遥感影像目标检测、地物分类及语义分割实践技术应用
  • 基于PyTorch深度学习遥感影像地物分类与目标检测、分割及遥感影像问题深度学习优化实践技术应用
  • Kafka如何保证消息可靠性
  • 前端面经-高级开发(华为od)
  • 网站建设与 维护实训报告范文wordpress 上传网站吗
  • 基于深度学习神经网络协同过滤模型(NCF)的视频推荐系统
  • 网站建立时间软件开发5个过程
  • 【微实验】激光测径系列(六)MATLAB 实现 CCD 图像像素与实际距离标定
  • 设计模式之代理模式-骆驼与巴巴羊的故事
  • Linux安全机制--系统层安全机制
  • 大模型之bert变种