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

自网站EXCel数据导入怎么做南京seo排名公司

自网站EXCel数据导入怎么做,南京seo排名公司,网站建设方案书 内容管理制度,微网站建设收费根据缓慢变化维度(SCD)的三种核心类型(类型1、类型2、类型3),以下是基于AWS Glue的实现设计、步骤及测试用例: 一、AWS Glue实现SCD的设计与步骤 1. SCD类型1(覆盖旧值) 设计目标&…

根据缓慢变化维度(SCD)的三种核心类型(类型1、类型2、类型3),以下是基于AWS Glue的实现设计、步骤及测试用例:


一、AWS Glue实现SCD的设计与步骤

1. SCD类型1(覆盖旧值)

设计目标:直接更新目标表中的记录,不保留历史数据。
技术选型

  • 使用AWS Glue ETL作业(PySpark)
  • 目标存储:S3(Parquet格式)或Amazon Redshift
  • 数据比对方式:基于业务键(如customer_id)匹配新旧记录

实现步骤

  1. 数据源准备

    • 源表(Source):实时更新的客户表(如CSV或数据库表)。
    • 目标表(Target):维度表(如dim_customer)。
  2. Glue作业逻辑

    from pyspark.context import SparkContext
    from awsglue.context import GlueContextsc = SparkContext()
    glueContext = GlueContext(sc)# 加载源数据和目标数据
    source_df = glueContext.create_dynamic_frame.from_catalog(database="source_db", table_name="customer").toDF()
    target_df = glueContext.create_dynamic_frame.from_catalog(database="target_db", table_name="dim_customer").toDF()# 合并逻辑:覆盖旧值
    merged_df = target_df.alias("target").join(source_df.alias("source"),target_df.customer_id == source_df.customer_id,"outer"
    ).selectExpr("coalesce(source.customer_id, target.customer_id) as customer_id","source.name as name",  # 直接覆盖"source.address as address"  # 直接覆盖
    ).distinct()# 写入目标表(覆盖模式)
    glueContext.write_dynamic_frame.from_catalog(frame=DynamicFrame.fromDF(merged_df, glueContext, "merged_df"),database="target_db",table_name="dim_customer",transformation_ctx="write_target"
    )
    
  3. 目标表结构

    CREATE TABLE dim_customer (customer_id INT PRIMARY KEY,name STRING,address STRING
    );
    

2. SCD类型2(创建新记录)

设计目标:插入新记录并标记历史版本。
技术选型

  • 使用Glue的窗口函数(row_number)跟踪最新记录
  • 新增字段:is_current(布尔值)、start_dateend_date
  • 存储格式:S3 + Parquet(支持ACID事务)

实现步骤

  1. 目标表结构

    CREATE TABLE dim_customer_scd2 (customer_sk INT AUTOINCREMENT PRIMARY KEY,  -- 代理键customer_id INT,name STRING,address STRING,is_current BOOLEAN,start_date DATE,end_date DATE
    );
    
  2. Glue作业逻辑

    from pyspark.sql.window import Window
    from pyspark.sql.functions import row_number, lit, current_date, when# 加载源数据和目标数据
    source_df = glueContext.create_dynamic_frame.from_catalog(database="source_db", table_name="customer").toDF()
    target_df = glueContext.create_dynamic_frame.from_catalog(database="target_db", table_name="dim_customer_scd2").toDF()# 标记目标表中的旧记录为失效
    target_updated = target_df.withColumn("end_date",when((target_df.customer_id.isin(source_df.select("customer_id").collect())) &(target_df.is_current == True),current_date()).otherwise(target_df.end_date)
    ).withColumn("is_current",when((target_df.customer_id.isin(source_df.select("customer_id").collect())) &(target_df.is_current == True),False).otherwise(target_df.is_current)
    )# 插入新记录
    new_records = source_df.join(target_updated,["customer_id"],"left_anti"  # 仅选择源中存在但目标中不存在的记录
    ).select("customer_id","name","address",lit(True).alias("is_current"),current_date().alias("start_date"),lit(None).cast("date").alias("end_date")
    )# 合并并写入目标表
    final_df = target_updated.unionByName(new_records)
    glueContext.write_dynamic_frame.from_catalog(frame=DynamicFrame.fromDF(final_df, glueContext, "final_df"),database="target_db",table_name="dim_customer_scd2"
    )
    

3. SCD类型3(添加有效日期)

设计目标:维护当前记录和历史记录的有效时间范围。
技术选型

  • 新增字段:valid_fromvalid_to
  • 使用Glue的coalesce处理时间重叠

实现步骤

  1. 目标表结构

    CREATE TABLE dim_customer_scd3 (customer_sk INT PRIMARY KEY,customer_id INT,name STRING,address STRING,valid_from DATE,valid_to DATE
    );
    
  2. Glue作业逻辑

    # 关闭旧记录的valid_to
    target_updated = target_df.withColumn("valid_to",when((target_df.customer_id.isin(source_df.select("customer_id").collect())) &(target_df.valid_to.isNull()),current_date()).otherwise(target_df.valid_to)
    )# 插入新记录
    new_records = source_df.select("customer_id","name","address",current_date().alias("valid_from"),lit(None).cast("date").alias("valid_to")
    )# 合并并写入
    final_df = target_updated.unionByName(new_records)
    glueContext.write_dynamic_frame.from_catalog(...)
    

二、测试用例

通用测试场景
测试场景预期结果
无变化的记录目标表记录保持不变。
新增记录目标表插入新记录(类型2/3新增代理键,类型1直接插入)。
属性值变化类型1覆盖旧值;类型2插入新记录并标记旧记录失效;类型3关闭旧记录有效期。
多次更新同一记录类型2生成多条历史记录;类型3仅保留当前和上一次状态。
类型2专项测试
  1. 历史版本查询

    SELECT * FROM dim_customer_scd2 
    WHERE customer_id = 100 
    ORDER BY start_date DESC;
    

    预期:返回该客户的所有历史地址记录。

  2. 当前标记验证

    SELECT COUNT(*) FROM dim_customer_scd2 
    WHERE customer_id = 100 AND is_current = True;
    

    预期:仅返回1条记录。

类型3专项测试
  1. 时间范围覆盖
    SELECT * FROM dim_customer_scd3 
    WHERE customer_id = 200 
    AND valid_from <= '2023-10-01' 
    AND valid_to >= '2023-10-01';
    
    预期:返回该时间点有效的记录。

三、性能优化建议

  1. 分区策略:按日期或业务键分区目标表(如valid_from)。
  2. 索引优化:在Redshift中为customer_idis_current列创建排序键。
  3. 增量处理:启用Glue Job Bookmark仅处理新增数据。
http://www.dtcms.com/wzjs/55843.html

相关文章:

  • 用服务器ip做网站域名推广软文300字范文
  • 企业咨询师资格证全网搜索引擎优化
  • 建站之星安装教程seo网络优化招聘
  • 广州公关公司招聘信息飞猪关键词排名优化
  • 内容展示型网站 设计特点关键词seo排名优化软件
  • 怎么建设色情网站江门网站定制多少钱
  • 东莞如何编写网站建设网络营销系统
  • 怎样查网站备案人的联系方式常见的搜索引擎有哪些
  • vs做网站链接sql网络销售怎么做才能做好
  • 屏蔽网站ip在线推广
  • 百度地图手机网站开发企业培训考试系统
  • 惠州做百度网站多少软文广告示范
  • 电子商务营销渠道有哪些海南快速seo排名优化
  • 现有的网站开发技术联赛积分榜排名
  • 个人网站制作说明网络营销渠道策略有哪些
  • 杭州网站建设_数据库开发网站_大数据网站开发网络优化大师下载
  • 网站网络推广服务网站优化排名哪家好
  • 网站登录不了怎么办在线超级外链工具
  • 国内返利网站怎么做免费发布推广信息的软件
  • 重庆网站关键词排名海外网站推广优化专员
  • 360网站制作潍坊sem 优化软件
  • 海外人才招聘网泰州seo
  • 做哪种网站浏览量比较高网络互联网推广
  • 常州网站设计制作石家庄抖音seo
  • 建站教程的特点应用商店优化
  • 做网站有没有受骗过seo关键词排名优化系统源码
  • 徐水网站建设企业网站设计论文
  • 做网站做电脑版还是手机版好中国十大外贸平台
  • 免费b2b网站大全不花钱成功的软文推广
  • 外观设计网站网络营销swot分析