DynamoDB 零 ETL 集成与 Amazon Glue 集成
DynamoDB 零 ETL 分区
分区规范 API 参考
使用 CreateIntegrationTableProperties API 中的以下参数来配置分区:
- PartitionSpec
-
分区规范数组,定义如何在目标位置对数据进行分区。
{ "partitionSpec": [ { "fieldName": "timestamp_col", "functionSpec": "month", "conversionSpec": "epoch_milli" }, { "fieldName": "category", "functionSpec": "identity" } ] }
- FieldName
-
指定用于分区的列名的 UTF-8 字符串(1-128 字节)。
- FunctionSpec
-
指定分区函数。有效值:
identity
- 直接使用源值year
- 按年分区month
- 按月分区day
- 按天分区hour
- 按小时分区
- ConversionSpec
-
指定源数据的时间戳格式的 UTF-8 字符串。有效值为:
-
epoch_sec
- Unix 纪元时间戳(以秒为单位) -
epoch_milli
- Unix 纪元时间戳(以豪秒为单位) -
iso
- ISO 8601 格式的时间戳
注意
仅在使用基于时间戳的分区函数(年、月、日或小时)时指定
ConversionSpec
。Amazon在应用 iceberg 支持的分区转换之前,Glue 零 ETL 会使用此参数将源数据正确转换为时间戳格式。 -
分区策略
默认分区
当未指定分区列时,Amazon Glue 零 ETL 会自动使用 DynamoDB 表的哈希键对数据进行分区。此策略:
应用分桶以防止分区爆炸
使用单主键和复合主键
针对常见的查询模式进行优化
自定义分区
使用 PartitionSpec 参数指定自定义分区。您可以:
定义精确的分区序列
添加二级分区
使用基于时间戳的分区
基于时间戳的分区
使用 Amazon Glue 零 ETL 基于时间戳的分区,您可以使用以不同格式存储的时间戳值对数据进行分区。当您选择一列进行基于时间戳的分区时,Amazon Glue 零 ETL 会对该列执行就地转换。
例 时间戳转换示例
如果您选择基于包含 ISO 格式时间戳的字符串列进行分区,则 Amazon Glue 零 ETL:
-
将列类型从字符串转换为时间戳
-
应用必要的基于时间戳的转换
注意
源数据中的原始列值保持不变。AmazonGlue 仅会将分区列值转换为目标数据库表中的时间戳类型。转换仅适用于时间戳分区过程。
- 支持的源格式
-
Unix 纪元时间戳(精度为秒或毫秒)
ISO 8601 格式的字符串
原生时间戳类型(SAAS 源)
最佳实践
分区列选择
-
不要将高基数列与
identity
分区函数一起使用。使用具有标识分区的高基数列会创建许多小分区,这会显著降低摄取性能。高基数列可能包括:-
主键
-
时间戳字段(例如
LastModifiedTimestamp
、CreatedDate
) -
系统生成的时间戳
-
-
请勿在同一列上选择多个时间戳分区。例如:
"partitionSpec": [ {"fieldName": "col1", "functionSpec": "Year", "ConversionSpec" : "epoch_milli"}, {"fieldName": "col1", "functionSpec": "Month", "ConversionSpec" : "epoch_milli"}, {"fieldName": "col1", "functionSpec": "Day", "ConversionSpec" : "epoch_milli"}, {"fieldName": "col1", "functionSpec": "Hour", "ConversionSpec" : "epoch_milli"} ]
分区 FunctionSpec/ConversionSpec 选择
-
指定正确的 ConversionSpec (eopch_sec | epoch_milli | iso),它表示在使用基于时间戳的分区函数时为基于时间戳的分区选择的列值的格式。AmazonGlue 零 ETL 使用此参数在分区之前将源数据正确转换为时间戳格式。
-
根据数据量使用适当的粒度(年/月/日/小时)。
-
使用 ISO 时间戳时请考虑时区影响。AmazonGlue 零 ETL 使用 UTC 时区填充所选时间戳列的所有记录值。
错误处理
NEEDS_ATTENTION 状态
当出现以下情况时,集成将进入 NEEDS_ATTENTION 状态:
分区列包含空值
源中不存在指定的分区列
分区列的时间戳转换失败