PutDynamoDBRecord

文档中心 › 组件索引 › PutDynamoDBRecord

PutDynamoDBRecord Processor

类型全限定名:cn.org.acal.lynxus.processors.aws.dynamodb.PutDynamoDBRecord

所属 Bundle:cn.org.acal.lynxus:lynxus-aws-nar:2.11.8

描述

基于面向记录的数据将项目插入 DynamoDB。记录字段映射到 DynamoDB 项目字段,包括分区键和排序键(如果已设置)。

标签

AmazonDynamoDBAWSPutInsertRecord

属性

下表中,加粗的属性为必填项;其余为可选项。表格同时标注默认值、是否支持表达式语言,以及是否为敏感属性(值会被加密)。

名称默认值可选值描述
Table NameDynamoDB 表名称
支持表达式语言:是(仅使用环境/系统变量求值)
Regionus-west-2
  • Africa (Cape Town) — AWS Region Code : af-south-1
  • Asia Pacific (Hong Kong) — AWS Region Code : ap-east-1
  • Asia Pacific (Hyderabad) — AWS Region Code : ap-south-2
  • Asia Pacific (Jakarta) — AWS Region Code : ap-southeast-3
  • Asia Pacific (Malaysia) — AWS Region Code : ap-southeast-5
  • Asia Pacific (Melbourne) — AWS Region Code : ap-southeast-4
  • Asia Pacific (Mumbai) — AWS Region Code : ap-south-1
  • Asia Pacific (New Zealand) — AWS Region Code : ap-southeast-6
  • Asia Pacific (Osaka) — AWS Region Code : ap-northeast-3
  • Asia Pacific (Seoul) — AWS Region Code : ap-northeast-2
  • Asia Pacific (Singapore) — AWS Region Code : ap-southeast-1
  • Asia Pacific (Sydney) — AWS Region Code : ap-southeast-2
  • Asia Pacific (Taipei) — AWS Region Code : ap-east-2
  • Asia Pacific (Thailand) — AWS Region Code : ap-southeast-7
  • Asia Pacific (Tokyo) — AWS Region Code : ap-northeast-1
  • AWS European Sovereign Cloud (Germany) — AWS Region Code : eusc-de-east-1
  • aws global region — AWS Region Code : aws-global
  • AWS GovCloud (US-East) — AWS Region Code : us-gov-east-1
  • AWS GovCloud (US-West) — AWS Region Code : us-gov-west-1
  • aws-cn global region — AWS Region Code : aws-cn-global
  • aws-iso global region — AWS Region Code : aws-iso-global
  • aws-iso-b global region — AWS Region Code : aws-iso-b-global
  • aws-iso-e global region — AWS Region Code : aws-iso-e-global
  • aws-iso-f global region — AWS Region Code : aws-iso-f-global
  • aws-us-gov global region — AWS Region Code : aws-us-gov-global
  • Canada (Central) — AWS Region Code : ca-central-1
  • Canada West (Calgary) — AWS Region Code : ca-west-1
  • China (Beijing) — AWS Region Code : cn-north-1
  • China (Ningxia) — AWS Region Code : cn-northwest-1
  • EU ISOE West — AWS Region Code : eu-isoe-west-1
  • Europe (Frankfurt) — AWS Region Code : eu-central-1
  • Europe (Ireland) — AWS Region Code : eu-west-1
  • Europe (London) — AWS Region Code : eu-west-2
  • Europe (Milan) — AWS Region Code : eu-south-1
  • Europe (Paris) — AWS Region Code : eu-west-3
  • Europe (Spain) — AWS Region Code : eu-south-2
  • Europe (Stockholm) — AWS Region Code : eu-north-1
  • Europe (Zurich) — AWS Region Code : eu-central-2
  • Israel (Tel Aviv) — AWS Region Code : il-central-1
  • Mexico (Central) — AWS Region Code : mx-central-1
  • Middle East (Bahrain) — AWS Region Code : me-south-1
  • Middle East (UAE) — AWS Region Code : me-central-1
  • South America (Sao Paulo) — AWS Region Code : sa-east-1
  • US East (N. Virginia) — AWS Region Code : us-east-1
  • US East (Ohio) — AWS Region Code : us-east-2
  • US ISO East — AWS Region Code : us-iso-east-1
  • US ISO WEST — AWS Region Code : us-iso-west-1
  • US ISOB East (Ohio) — AWS Region Code : us-isob-east-1
  • US ISOB West — AWS Region Code : us-isob-west-1
  • US ISOF EAST — AWS Region Code : us-isof-east-1
  • US ISOF SOUTH — AWS Region Code : us-isof-south-1
  • US West (N. California) — AWS Region Code : us-west-1
  • US West (Oregon) — AWS Region Code : us-west-2
  • Use Custom Region — 用户定义的区域,可以是非 AWS 区域,和/或来自表达式语言(Expression Language)
服务所在的 AWS 区域
Custom Region自定义区域,例如 AWS 兼容服务提供商的区域
支持表达式语言:是(仅使用环境/系统变量求值)
AWS Credentials Provider Service控制器服务 API:
AwsCredentialsProviderService
cn.org.acal.lynxus-lynxus-aws-service-api-nar-2.11.8
用于获取AWS凭证提供者的Controller Service
Record Reader控制器服务 API:
RecordReaderFactory
cn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8
指定用于解析传入数据并确定数据模式的 Controller Service。
Partition Key StrategyByField
  • 按字段分区 — 使用 'Partition Key Field' 属性标识的 Record 字段的值作为分区键值。
  • 按属性分区 — 使用 'Partition Key Attribute' 标识的传入 FlowFile 属性作为分区键值。传入的 Record 不能包含与 'Partition Key Field' 定义的同名字段。
  • 生成 UUID — 使用生成的 UUID 作为分区键值。传入的 Record 不能包含与 'Partition Key Field' 定义的同名字段。
定义处理器用于将分区Key-Value分配给插入的项目的策略。
Partition Key Field定义 DynamoDB 表中分区键字段的名称。分区键也称为哈希键。根据「分区键策略」,字段值可能来自传入记录或生成的值。
支持表达式语言:是(仅使用环境/系统变量求值)
Partition Key Attribute指定在使用「按属性分区」分区键策略时将用作分区键值的 FlowFile 属性。
支持表达式语言:是(仅使用环境/系统变量求值)
Sort Key StrategyNone
  • None — 处理器不会为插入的项分配排序键(sort key)。
  • Sort By Field — 使用由 "Sort Key Field" 属性标识的 Record 字段的值作为排序键值。
  • Generate Sequence — 处理器将根据原始记录在传入 FlowFile 中的位置为每个项分配一个编号。该编号将用作排序键值。
定义处理器用于将排序键分配给插入的项目的策略。
Sort Key Field定义 DynamoDB 表中排序键字段的名称。 排序键也称为范围键。
支持表达式语言:是(仅使用环境/系统变量求值)
Communications Timeout30 secs
Endpoint Override URL用于替代 AWS 默认端点的端点 URL,包括协议、主机、端口和路径。AWS 库根据 AWS 区域选择端点 URL,但此属性会覆盖所选端点 URL,允许与其他 S3 兼容端点一起使用。
支持表达式语言:是(仅使用环境/系统变量求值)
Proxy Configuration Service控制器服务 API:
ProxyConfigurationService
cn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8
指定代理配置Controller Service来代理网络请求。
SSL Context Service控制器服务 API:
SSLContextProvider
cn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8
指定可选的 SSL 上下文服务,如果提供,将用于创建连接

关系 (Relationships)

名称描述自动终止
failureFlowFiles被路由到故障关系否
successFlowFiles被路由到成功关系否
unprocessed当 DynamoDB 无法处理请求中的所有项目时,FlowFile 被路由到未处理关系。典型原因是表吞吐量不足和超过每个请求的最大字节数。未处理的 FlowFile 可以通过新请求重试。否

读取的 FlowFile 属性

名称描述
dynamodb.chunks.processed成功插入 DynamoDB 的块数。 如果不设置则视为0

写入的 FlowFile 属性

名称描述
dynamodb.chunks.processed成功插入 DynamoDB 的块数。 如果不设置则视为0
dynamodb.key.error.unprocessedDynamoDB 未处理的密钥
dynmodb.range.key.value.errorDynamoDB 范围键错误
dynamodb.key.error.not.found未找到 DynamoDB 密钥
dynamodb.error.exception.messageDynamoDB 异常消息
dynamodb.error.codeDynamoDB 错误代码
dynamodb.error.messageDynamoDB 错误消息
dynamodb.error.serviceDynamoDB 错误服务
dynamodb.error.retryableDynamoDB 错误可重试
dynamodb.error.request.idDynamoDB 错误请求 ID
dynamodb.error.status.codeDynamoDB 错误状态代码
dynamodb.item.io.error创建项目时的 IO 异常消息

状态管理

该组件不存储状态。

受限 (Restricted)

该组件不受限。

输入要求

该组件要求有传入连接。

系统资源考量

资源描述
MEMORYAn instance of this component can cause high usage of this system resource. Multiple instances or high concurrency settings may result a degradation of performance.
NETWORKAn instance of this component can cause high usage of this system resource. Multiple instances or high concurrency settings may result a degradation of performance.

详细说明

PutDynamoDBRecord

说明

PutDynamoDBRecord 提供了从面向记录的 FlowFile 向 DynamoDB 表插入多个 Item 的能力。与 PutDynamoDB 相比,该 Processor 能够处理 JSON 之外其他 格式的数据,并能为给定 Item 添加多个字段。此外,PutDynamoDBRecord 设计上支持向数据库插入更大批次的数据。

数据类型

DynamoDB 支持的数据类型列表与 Record 数据结构的能力并不完全重合。插入 数据时需要进行一些转换和简化,包括:

  • 数值在 Item 内以浮点数据结构存储。在某些情况下,这种表示可能带来 精度问题。
  • Char 不是 DynamoDB 支持的类型,这些字段会被转换为 String 值。
  • Enum 类型存储为 String 字段,使用枚举的名称。
  • DynamoDB 把时间和日期相关信息存储为 String。
  • 内部 record 结构会被转换为 map。
  • Choice 不是受支持的数据类型,无论实际包裹的数据类型是什么,包裹在 Choice 中的值都会按 String 处理。
  • 未知数据类型按字符串处理。

限制

使用 DynamoDB 批量插入有两个固有限制。首先,任何情况下一次插入的 Item 数量都限制为 25。为了克服这一点,PutDynamoDBRecord 在一次 执行中会根据传入 FlowFile 的记录数量,向数据库服务器发起多次插入 调用。采用这种方式,流程在大多数情况下不必关心这个限制。

多次外部操作伴随着某一步出现意外结果的风险。例如,传入 FlowFile 包含 70 条记录时,会被拆成 3 块,每块执行一次插入操作。前两块每块 包含 25 个待插入 Item,第三块包含剩余的 20 个。某些情况下可能出现 前两次插入成功而第三次失败。此时我们把该 FlowFile 视为"部分处理", 并根据问题的性质把它转移到 "failure" 或 "unprocessed" Relationship。 为了保留已成功处理块的信息,Processor 会给 FlowFile 赋 "dynamodb.chunks.processed" Attribute,值为成功处理的块数。

该行为最常见的原因来自 DynamoDB 插入的另一个限制:数据库对插入的 数据量有内置的管控。当客户端达到"吞吐量上限"时,服务器会在一段 时间内拒绝处理插入请求。更多信息参见这里。 从 PutDynamoDBRecord 的角度,我们把这类情况视为临时问题, FlowFile 会被转移到 "unprocessed" Relationship,之后 Processor 会让出(yield)以避免进一步的吞吐量问题。(其他类型的失败会导致 转移到 "failure" Relationship。)

分区键和排序键

该 Processor 支持多种为插入的 Item 分配分区键和排序键的策略:

分区键策略

Partition By Field

Processor 把某个记录字段指定为分区键。记录字段的名称由 "Partition Key Field" 属性指定,值为同名记录字段的值。

Partition By Attribute

Processor 把某个 FlowFile Attribute 的值指定为分区键。使用该策略时, FlowFile 内的所有 Item 共享同一个分区键值。建议配合同时具有排序键的 表使用,以满足 DynamoDB 的主键要求。"Partition Key Field" 属性定义 Item 字段的名称,"Partition Key Attribute" 属性指定哪个 Attribute 的值会被赋给分区键。使用该策略时,"Partition Key Field" 必须与 传入记录包含的字段不同。

Generated UUID

使用该策略时,Processor 会为每个 Item 生成一个 UUID 标识符,并把 它作为分区键的值。用作分区键的字段名由 "Partition Key Field" 属性 定义。使用该策略时,"Partition Key Field" 必须与传入记录包含的 字段不同。使用该策略时,DynamoDB 表中的分区键必须是 String 类型。

排序键策略

None

不给 Item 分配排序键。如果表定义要求排序键,使用该策略会导致插入失败。

Sort By Field

Processor 把某个记录字段指定为排序键。记录字段的名称由 "Sort Key Field" 属性指定,值为同名记录字段的值。使用该策略时, "Sort Key Field" 必须与传入记录包含的字段不同。

Generate Sequence

Processor 根据原始记录在传入 FlowFile 中的位置(与分块无关)为每个 Item 分配一个生成的值。第一个 Item 的排序键为 1,第二个为 2,以此 类推。生成的键在给定 FlowFile 内唯一。记录字段的名称由 "Sort Key Field" 属性指定。使用该策略时,"Sort Key Field" 必须与 传入记录包含的字段不同。使用该策略时,DynamoDB 表中的排序键必须是 Number 类型。

示例

使用字段作为分区键和排序键

配置

  • Partition Key Strategy: Partition By Field
  • Partition Key Field: class
  • Sort Key Strategy: Sort By Field
  • Sort Key Field: size

注意:两个字段都必须存在于传入记录中!

结果

使用这一对策略得到的 Item 与传入记录一致(不计转换带来的表示变化)。 属性指定的字段会正常添加到 Item,唯一的区别是被标记为(主)键项。

输入

[
  {
    "type": "A",
    "subtype": 4,
    "class": "t",
    "size": 1
  }
]

输出(示意)

  • type: 值为 "A" 的 String 字段
  • subtype: 值为 4 的 Number 字段
  • class: 值为 "t" 的 String 字段,作为分区键
  • size: 值为 1 的 Number 字段,作为排序键

使用 FlowFile 文件名作为分区键,排序键自动生成

配置

  • Partition Key Strategy: Partition By Attribute
  • Partition Key Field: source
  • Partition Key Attribute: filename
  • Sort Key Strategy: Generate Sequence
  • Sort Key Field: sort

结果

FlowFile 的 filename Attribute 会被用作分区键。此时同一 FlowFile 内的所有记录共享同一个分区键。为避免冲突,如果 FlowFile 包含多条记录,建议使用排序键。此时使用生成的序列, 它在给定 FlowFile 内保证唯一。

输入

[
  {
    "type": "A",
    "subtype": 4,
    "class": "t",
    "size": 1
  },
  {
    "type": "B",
    "subtype": 5,
    "class": "m",
    "size": 2
  }
]

输出(示意)

第一个 Item
  • source: 值为 "data46362.json" 的 String 字段,作为分区键
  • type: 值为 "A" 的 String 字段
  • subtype: 值为 4 的 Number 字段
  • class: 值为 "t" 的 String 字段
  • size: 值为 1 的 Number 字段
  • sort: 值为 1 的 Number 字段,作为排序键
第二个 Item
  • source: 值为 "data46362.json" 的 String 字段,作为分区键
  • type: 值为 "B" 的 String 字段
  • subtype: 值为 5 的 Number 字段
  • class: 值为 "m" 的 String 字段
  • size: 值为 2 的 Number 字段
  • sort: 值为 2 的 Number 字段,作为排序键

使用生成的分区键

配置

  • Partition Key Strategy: Generated UUID
  • Partition Key Field: identifier
  • Sort Key Strategy: None

结果

会生成一个 UUID 作为分区键,每个 Item 生成的 UUID 都不同。

输入

[
  {
    "type": "A",
    "subtype": 4,
    "class": "t",
    "size": 1
  }
]

输出(示意)

  • identifier: 值为 "872ab776-ed73-4d37-a04a-807f0297e06e" 的 String 字段,作为分区键
  • type: 值为 "A" 的 String 字段
  • subtype: 值为 4 的 Number 字段
  • class: 值为 "t" 的 String 字段