Singer 学习十一 配置以及状态管理
配置和状态文件通过提供身份验证信息,开始时间和有关以前调用的信息,帮助为Taps和Targets提供上下文
配置文件
配置文件包含tap 运行需要的信息,通常包含API,以及数据源的凭据
- 特殊字段
start_data ,首次同步时候使用,指定数据同步的范围
user_agent 提供方便的问题解决,反馈的地址,一般可能是email 地址 - 格式
必须是json 格式文件,参考
{
"api_key" : "ABC123ASDF5432",
"start_date" : "2017-01-01T00:00:00Z",
"user_agent" : "Stitch (+support@stitchdata.com)"
}
状态文件
状态文件是一个json map 被用来存储调用tap 的信息,对于需要处理状态的stream 必须定期的进行状态数据
写入stdout,同时应该支持解析--state 配置参数
状态常用来记录最后一次调用中断的记录点,此时状态通常包含 last_updated_at
与源字段对应的时间戳,如果在
没有--state 参数,应该从头开始,或者某个适当的默认位置,如果包含了--state,就需要从状态记录文件开始
bookmark
用户记录当爱你tap 对于数据源处理的进度,如果tap 的stream 可以各自具有独立的状态,则Tap的状态输出
应符合以下格式:状态对象包含映射到对象的顶级属性“书签”。书签对象包含流标识符作为属性名称,
每个属性名称映射到描述相应流的状态的对象
参考:
{
"bookmarks": {
"orders": {
"last_record": "2017-07-07T10:20:00Z"
},
"customers": {
"last_record": 123
}
}
}
需要记住的事情
- 写入状态时,将不会同步该状态之前的数据,因此在所有可能的异常都将被抛出之前不要更新状态。
- 不支持按更新的时间戳过滤或包含更新的时间戳的端点不支持保存状态。
- 如果API支持按更新的时间戳进行过滤,请使用该过滤进行过滤。如果API不支持过滤但确实返回更新的数据时间戳,
请在流式传输数据之前按时间戳进行过滤。 - 当流入数据时,尽可能按升序流式传输数据。
- 工作可以在任何时候中断。保存的状态永远不应该是无效的。过早保存状态的中断作业将丢失数据。保存状态太晚的中
断作业将导致复制的重复行增加参考资料
https://github.com/singer-io/getting-started/blob/master/docs/CONFIG_AND_STATE.md