版本0.3.0
tap是一个应用程序,需要一个配置文件和可选的状态文件作为输入,并产生有序的流记录, 状态和模式信息作为输出。
一个记录是任何类型的JSON编码的数据。tap 状态消息用于保留一个调用之间的信息。一个模式消息描述stream 中的
数据类型。Tap可以用任何编程语言实现。
tap设计用于从数据库和Web服务API等源生成数据流,以用于数据集成或ETL管道。

概要

 
tap --config CONFIG [--state STATE] [--catalog CATALOG]
CONFIG is a required argument that points to a JSON file containing any
configuration parameters the Tap needs.
STATE is an optional argument pointing to a JSON file that the
Tap can use to remember information from the previous invocation,
like, for example, the point where it left off.
CATALOG is an optional argument pointing to a JSON file that the
Tap can use to filter which streams should be synced.

输入

配置

配置包含Tap需要的任何参数,以便从源中提取数据。通常,这将包括API或数据源的凭据。配置的格式因Tap而异,
但必须采用JSON编码,配置的根必须是对象。
对于需要在运行期间更改配置的tap,tap应将更改写回提供的配置文件,以便可以在后续运行中使用更改。

state

JSON编码状态用于在Tap的调用之间保持信息。
希望持久状态的Tap应该在处理流时定期将STATE消息写入stdout,并且应该期望--state STATE参数命名的文件具有与它发出
的STATE消息的值相同的格式。
状态的一个常见用例是在最后一次调用中断的流中记录该点。如果在没有--state STATE 参数的情况下调用Tap ,它应该从流的
开头或某个适当的默认位置开始。如果使用--state STATE 参数调用它,它应该在状态文件中读取并从流中的相应位置开始。

catalog

catalog 是一个JSON编码文件,列出了可用的stream及其schema。顶级是一个对象,其中一个名为streams的键指向一个流对象数组。
可以修改每个流对象的元数据,以选择是否应复制流和/或其字段,以及应如何复制数据(FULL TABLE与INCREMENTAL)。

示例调用

从头开始同步,无catalog

 
$ tap --config config.json
 

从存储状态开始与目录同步

$ tap --config config.json --state state.json --catalog catalog.json

输出

Tap以 stdout JSON格式输出结构化消息,每行一条消息。可以发出日志和其他信息以stderr 帮助调试。
流式传输器在成功时以退出代码退出,在失败时退出非零。
正文包含编码为JSON映射的消息,每行一条消息。每条消息都必须包含一个type属性。type 允许任何消息,
并且types被解释为不区分大小写。以下types具有特定含义:

record 消息

RECORD消息包含数据流中的数据。它们必须具有以下属性:
record 必填。包含流数据点的JSON映射
stream 必填。流的字符串名称
time_extracted 可选。在源中观察此记录的时间。这应该是 RFC3339格式的日期时间,如“2017-11-20T16:45:33.000Z”。
单个Tap可以输出具有不同流名称的RECORD消息。单个RECORD条目可能只包含单个流的记录。
例:
注意:每条消息必须在它们自己的行上,但这里的示例使用多行来提高可读性。

 
 {
  "type": "RECORD",
  "stream": "users",
  "time_extracted": "2017-11-20T16:45:33.000Z",
  "record": {
    "id": 0,
    "name": "Chris"
  }
}
 

SCHEMA消息

SCHEMA消息描述流中数据的数据类型。它们必须具有以下属性:

schema 必填。一个JSON模式,用于描述data RECORD 的 属性stream

stream 必填。此架构描述的流的字符串名称

key_properties 必填。一个字符串列表,指示哪些属性构成此流的主键。列表中的每个项目都必须是架构中定义的顶级属性的名称。key_properties必须提供值,但它可能是一个空列表,表示没有主键。

bookmark_properties 可选。一个字符串列表,指示抽头用作书签的属性。列表中的每个项目都必须是架构中定义的顶级属性的名称。

单个Tap可以输出具有不同流名称的SCHEMA消息。如果来自流的RECORD消息之前没有SCHEMA该流的 消息,则假定它是无模式的。

例:

注意:每条消息必须在它们自己的行上,但这里的示例使用多行来提高可读性。

{
  "type": "SCHEMA",
  "stream": "users",
  "schema": {
    "properties": {
      "id": {
        "type": "integer"
      },
      "name": {
        "type": "string"
      },
      "updated_at": {
        "type": "string",
        "format": "date-time"
      }
    }
  },
  "key_properties": ["id"],
  "bookmark_properties": ["updated_at"]
}
 

state 消息

STATE消息包含Tap希望保留的状态。STATE消息具有以下属性:
value 必填。JSON格式的状态值
STATE值的语义不是规范的一部分,应由每个Tap独立确定。

 
{"type": "SCHEMA", "stream": "users", "key_properties": ["id"], "schema": {"required": ["id"], "type": "object", "properties": {"id": {"type": "integer"}}}}
{"type": "RECORD", "stream": "users", "record": {"id": 1, "name": "Chris"}}
{"type": "RECORD", "stream": "users", "record": {"id": 2, "name": "Mike"}}
{"type": "SCHEMA", "stream": "locations", "key_properties": ["id"], "schema": {"required": ["id"], "type": "object", "properties": {"id": {"type": "integer"}}}}
{"type": "RECORD", "stream": "locations", "record": {"id": 1, "name": "Philadelphia"}}
{"type": "STATE", "value": {"users": 2, "locations": 1}}
 

版本

Tap的API包含其输入和输出 - 包括其配置,它如何解释状态,以及它产生的数据是如何结构化和解释的。点击应该遵循 语义版本控制,这意味着对其中任何一个的更改应该是新的MAJOR版本,并且向后兼容的更改应该是新的MINOR版本。

参考资料

https://github.com/singer-io/getting-started/blob/master/docs/SPEC.md

Singer 学习十二 指南的更多相关文章

  1. (转)SpringMVC学习(十二)——SpringMVC中的拦截器

    http://blog.csdn.net/yerenyuan_pku/article/details/72567761 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter, ...

  2. Scala学习十二——高阶函数

    一.本章要点 在Scala中函数是”头等公民“(可以作为参数,返回值,赋值给其他); 可以创建匿名函数,通常还会交给其他函数; 函数参数可以给出需要稍后执行的行为; 许多集合方法都接受函数参数,将函数 ...

  3. Singer 学习十 同步模式

    sync 模式是属于tap 的操作,同步模式下,tap 需要提交 schema. record .state message, singer 指南对于每种 类型有详细的说明 streams 每个str ...

  4. JVM学习十二:JVM之性能监控工具

    前面我们学习了很多JVM相关的理论知识,那么本节将重点讲述的是工具的使用,正所谓:工欲善其事,必先利其器.因此,本节介绍常用的性能监控工具,用于性能监控和问题排查. 一.系统性能监控 系统性能工具用于 ...

  5. Java编程思想学习(十二) 数组和容器

    一.数组 1).数组的多种初始化方式 下面总结了初始化数组的多种方式,以及如何对指向数组的引用赋值,使其指向另一个数组对象.值得注意的是:对象数组和普通数组的各种操作基本上都是一样的:要说有什么不同的 ...

  6. java web 学习十二(session)

    一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...

  7. 强化学习(十二) Dueling DQN

    在强化学习(十一) Prioritized Replay DQN中,我们讨论了对DQN的经验回放池按权重采样来优化DQN算法的方法,本文讨论另一种优化方法,Dueling DQN.本章内容主要参考了I ...

  8. Linux网络编程学习(十二) ----- 结语

    该书提前看完了,重点看了第四章和第六章,第七章以后只是大致浏览了一下,如果以后工作中涉及这一块再仔细研究一下,大概花了二十天的样子,主要了解了进程间的通信方式.socket编程以及五种I/O模式,看的 ...

  9. springMVC学习 十二 拦截器

    一 拦截器概述 拦截器技术比较像java web技术中的过滤器技术,都是发送 请求时被拦截器拦截,在控制器的前后添加额外功能.但是和Spring中的Aop技术是由区别的.AOP 在特定方法前后扩充(一 ...

随机推荐

  1. VSTO:使用C#开发Excel、Word【2】

    <Visual Studio Tools for Office: Using C# with Excel, Word, Outlook, and InfoPath >——By Eric C ...

  2. asp.net mvc 获取ajax的 request payload 参数

    注意事项: 传输的格式要设置城:"contentType": "application/x-www-form-urlencoded"

  3. org.quartz-scheduler 动态添加自动任务

    1.添加pom.xml <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId> ...

  4. apache rewrite 规则

    啥是虚拟主机呢?就是说把你自己的本地的开发的机子变成一个虚拟域名,比如:你在开发pptv下面的一个项目 127.0.0.1/pptv_trunk,你想把自己的机器域名变成www.pptv.com.那么 ...

  5. 12.2 关闭DLM 自动收集统计信息 (SCM0)ORA-00600之[ksliwat: bad wait time]

    一.报错日志 db_alert ORA-: ??????, ??: [ksliwat: bad wait time], [], [], [], [], [], [], [], [], [], [], ...

  6. Python之路,第十六篇:Python入门与基础16

    python3   bytes 和 bytearrary bytes 二进制文件的读写: 什么是二进制文件读: 文件中以字节(byte)为单位存储,不以换行符(\n)为单位分隔内容的文件: f = o ...

  7. 倍增求lca

    /* 节点维护的信息多样 如果用树状数组维护到根节点的边权或者点权, 可以直接插入点权和边权值,不需要预处理, 但是记得一定要使用ot[]消除影响.即差分. Housewife Wind 这个坑踩得死 ...

  8. Gym.102059: 2018-2019 XIX Open Cup, Grand Prix of Korea(寒假gym自训第一场)

    整体来说,这一场的质量比较高,但是题意也有些难懂. E.Electronic Circuit 题意:  给你N个点,M根线,问它是否是一个合法的电路. 思路:  一个合法的电路,经过一些串联并联关系, ...

  9. 洛谷P1070 道路游戏(dp+优先队列优化)

    题目链接:传送门 题目大意: 有N条相连的环形道路.在1-M的时间内每条路上都会出现不同数量的金币(j时刻i工厂出现的金币数量为val[i][j]).每条路的起点处都有一个工厂,总共N个. 可以从任意 ...

  10. c++——引用的使用

    1.使用引用避免拷贝 c++中拷贝大的类类型对象或容器对象比较低效,甚至有的类型不支持拷贝,这种情况下只能通过引用形参访问该类型的对象 当函数无需修改引用形参的值时,最好使用常量引用 例1:返回两个字 ...