java获取数据流管道内的数据存储实体步骤
我正在尝试设置一个数据流管道
- 从数据存储中读取实体
- 对于找到的每个实体,查找不同的实体以提取属性
- 并使用该属性值更新原始实体李>
如何查找给定读取的特定实体?还是有更好的方法
以下是我目前掌握的情况:
static class LookupOtherEntityFn extends DoFn<Entity, Entity> {
private Entity LookupOtherEntityFn(Entity sourceEntity) {
final Key someOtherEntityKey = sourceEntity.getPropertiesMap()
.get("otherEntityKey")
.getKeyValue();
final DatastoreV1.Read read = DatastoreIO.v1()
.read(); // ...... (uses someOtherEntityKey in query)
// **************************
// How do I retrieve the entity given a Read?
// **************************
}
@ProcessElement
public void processElement(ProcessContext c) {
c.output(createBackupEntity(c.element()));
}
}
Pipeline p = Pipeline.create(options);
p.apply(DatastoreIO.v1().read()...)
.apply(ParDo.of(new LookupOtherEntityFn()))
.apply(ParDo.of(new CreateUpdatedEntityFn())
.apply(DatastoreIO.v1().write()...);
p.run();
# 1 楼答案
您将无法使用
DatastoreV1.Read
类从转换内部的云数据存储中读取数据DatastoreV1.Read
专门用作Apache Beam管道的输入转换您可以使用云数据存储Java客户端读取转换实现中的实体。理想情况下,您应该实现转换,以便在工作线程之间只共享一个连接,并且异步进行调用
API文档中的示例:
参考文献:
1.https://cloud.google.com/datastore/docs/reference/libraries#client-libraries-install-java
2.https://googlecloudplatform.github.io/google-cloud-java/0.42.1/index.html
3.https://googlecloudplatform.github.io/google-cloud-java/0.42.1/apidocs/com/google/cloud/datastore/Datastore.html