寻求可测试Delta Lake与Apache Iceberg MERGE功能的数据集
MERGE性能测试数据集适配方案
自定义生成方案(推荐,完全适配测试需求)
直接通过本地脚本生成可控的测试数据集,可灵活调整量级、主键规则和增量比例,适配任意测试场景:
- 主键设定:选择自增唯一ID(如
order_id、user_id)作为主键,确保无重复值,满足MERGE操作的匹配条件要求 - 初始全量数据:可按测试需要生成100万~1亿行量级的基础表,字段覆盖字符串、数值、时间等常用类型,模拟真实业务表结构即可
- 多份增量数据集:分别按初始全量的1%、5%、10%、20%、30%比例生成增量数据,每份增量中混合70%存量主键的更新数据、30%全新主键的插入数据,完全匹配MERGE操作的典型业务逻辑
生成代码示例(PySpark)
from pyspark.sql import functions as F from pyspark.sql.types import StructType, StructField, LongType, StringType, DoubleType, TimestampType # 定义表结构,order_id为唯一主键 schema = StructType([ StructField("order_id", LongType(), nullable=False), StructField("user_id", LongType(), nullable=False), StructField("order_amount", DoubleType(), nullable=False), StructField("order_status", StringType(), nullable=False), StructField("create_time", TimestampType(), nullable=False) ]) # 生成1000万行初始全量表 initial_df = spark.range(1, 10000001).select( F.col("id").alias("order_id"), (F.rand() * 1000000).cast(LongType()).alias("user_id"), (F.rand() * 10000).cast(DoubleType()).alias("order_amount"), F.lit("paid").alias("order_status"), F.current_timestamp().alias("create_time") ) # 可直接写入作为初始的Delta或Iceberg表 # 生成占比5%的增量数据集(共50万行:40万更新、10万新增) incremental_df = spark.range(9600000, 10000000).select( F.col("id").alias("order_id"), (F.rand() * 1000000).cast(LongType()).alias("user_id"), (F.rand() * 10000).cast(DoubleType()).alias("order_amount"), F.lit("refunded").alias("order_status"), F.current_timestamp().alias("create_time") ).unionByName( spark.range(10000001, 10100001).select( F.col("id").alias("order_id"), (F.rand() * 1000000).cast(LongType()).alias("user_id"), (F.rand() * 10000).cast(DoubleType()).alias("order_amount"), F.lit("paid").alias("order_status"), F.current_timestamp().alias("create_time") ) )
公开数据集改造方案
如果不想自定义生成,可直接改造公开的行程类数据集:
- 选取行程ID作为唯一主键,取某一完整时间周期的全量数据作为初始表
- 拆分后续不同时间区间的行程数据,调整每份数据的量级,将存量行程的状态字段修改作为更新数据,新增行程作为插入数据,即可得到符合要求的MERGE测试集
内容的提问来源于stack exchange,提问作者Patrik Roger
相关产品推荐
相关产品推荐

