小编bfa*_*bry的帖子

使用Google Dataflow实现长期生存状态

试着在这里尝试编程模型.场景是我正在使用Pub/Sub + Dataflow来为网络论坛进行分析.我有来自Pub/Sub的数据流,如下所示:

ID | TS | EventType
1  | 1  | Create
1  | 2  | Comment
2  | 2  | Create
1  | 4  | Comment
Run Code Online (Sandbox Code Playgroud)

我想最终得到一个来自Dataflow的流,看起来像:

ID | TS | num_comments
1  | 1  | 0
1  | 2  | 1
2  | 2  | 0
1  | 4  | 2
Run Code Online (Sandbox Code Playgroud)

我希望执行此汇总的作业作为流进程运行,并在新事件进入时填充新计数.我的问题是,作业存储当前主题ID和注释计数的状态的惯用位置在哪里?假设主题可以存活多年.目前的想法是:

  • 将主题id的"当前"条目写入BigTable,并在DoFn查询中查询主题ID的当前注释计数是什么.即使我写这篇文章,我也不是粉丝.
  • 以某种方式使用侧输入?似乎这可能是答案,但如果是这样的话,我并不完全理解.
  • 使用全局窗口设置流式作业,每次获取记录时触发器都会关闭,并依靠Dataflow将整个窗格历史记录保存在某个位置.(无限制的存储要求?)

编辑:只是为了澄清,我不会在实现这三种策略中的任何一种,或者百万种不同的其他方式时遇到任何麻烦,我对使用Dataflow这样做的最佳方式更感兴趣.什么是最有弹性的失败,必须重新处理回填历史等等.

编辑2:数据流服务目前存在一个错误,如果向展平转换添加输入,则更新失败,这意味着如果您对包含添加的作业进行更改,则需要丢弃并重建作业中累积的任何状态事情是扁平化的.

google-cloud-platform google-cloud-dataflow

7
推荐指数
1
解决办法
955
查看次数

数据流作业的初始状态

我正在试图弄清楚我们如何"播种"某些流式数据流作业的窗口状态.场景是我们有一个论坛消息流,我们希望一直为每个主题发出一个运行的消息计数,因此我们有一个带有全局窗口的流数据流作业,并且每次有一个主题的记录进入时都会触发到目前为止一切都很好.但是在流源之前,我们有一个大文件,我们想要处理这些文件以获取历史记录,因为主题永远存在,我们需要历史计数来通知流源的输出,所以我们很友好'我需要相同的逻辑来运行文件,然后在文件耗尽时开始在流源上运行,同时保持窗口状态.

目前的想法:

  • 编写一个自定义无限制的源代码.读取文件直到它耗尽,然后开始从流中读取.没有多大乐趣,因为编写自定义源代码并不是很有趣.
  • 在批处理模式下通过文件运行逻辑,并且最后一步以某种方式将状态发送到流接收器,然后具有从状态流和数据流读取的逻辑启动的流式版本,并以某种方式组合二.这似乎有一定道理,但不确定如何确保流式作业在从数据流读取之前读取从状态源到初始化的所有内容.
  • 将历史数据传输到流中,编写从两个流中读取的作业.与第二种解决方案相同的问题,不确定如何确保首先"消耗"一个流.

编辑:最新选项,以及我们要做的是,编写计算工作,使事件到达的顺序无关紧要,因此我们只需将存档推送到pub/sub主题,一切都会奏效.这适用于这种情况,但显然它影响下游消费者(需要支持更新或撤消),所以我有兴趣知道人们有什么其他解决方案来播种他们的窗口状态.

google-cloud-dataflow

6
推荐指数
1
解决办法
203
查看次数

如何遍历字符串并检查每个字符的字节值?

我有以下代码:

cell_val = CStr(Nz(fld.value, ""))
Dim iter As Long
For iter = 0 To Len(cell_val) - 1 Step 1
    If Asc(Mid(cell_val, iter, 1)) > 127 Then
        addlog "Export contains ascii character > 127"
    End If
Next iter
Run Code Online (Sandbox Code Playgroud)

此代码不起作用.有人知道怎么做吗?我根本不知道VB或VBA.

string excel vba for-loop excel-vba

5
推荐指数
1
解决办法
4万
查看次数