Singer 學習十三 發現模式

發現模式

發現模式提供了一種描述tap 支持數據流的方式,使用了json schema 作爲描述數據的結構以及每一個數據流的
類型,發現模式的實現依賴tap 的數據源,有些taps 將硬編碼每一個流的模式,而其餘的將鏈接到提供可用流的
描述的api,當運行發現模式時,tap 應該寫如stdout 流列表,稱爲目錄,每一個條目包含關於流的一些基本信息和
描述流的json schema
發現模式下運行tap, 使用--discovernode

 
tap --config CONFIG --discover

咱們能夠在運行的時候將輸出重定向到一個文件git

tap --config CONFIG --discover > catalog.json
 

對於一些遺留的taps ,會使用properties.json 作爲目錄github

schema

JSON用於表示數據,由於它無處不在,可讀,而且特別適用於將數據公開爲JSON(如Web API)的大量源。可是,
JSON遠非完美:sql

  • 它有一個有限類型的系統,不支持日期等常見類型,也沒有整數和浮點數之間的區別
  • 雖然它的靈活性使其易於使用,但它也可能致使兼容性問題
    模式用於解決這些問題。通常而言,模式是描述數據結構的任何方式。模式由TEMA在SCHEMA消息中編寫,格式遵循
    JSON模式規範。
    模式經過提供有關如何解釋JSON基本類型的更多信息來解決有限的數據類型問題。例如,JSON Schema規範區分integer和number
    類型,後者被適當地解釋爲浮點。此外,它定義了一個名爲的字符串格式date-time,可用於指示數據點什麼時候應爲格式正確的時間戳字符串。
    Schema提供了一種驗證一組數據點結構的簡便方法,從而減輕了JSON的兼容性問題。Taps經過鼓勵每一個流僅使用單個模式,並在持
    久性以前根據其schema驗證每一個數據點來部署此概念。這迫使Tap做者思考如何解決模式演變和兼容性問題,將該責任儘量接近原始數據源,
    並使下游系統無需作出明智的假設來解決這些問題。
    schema 是必需的,但它們能夠用最普遍的術語定義 - 「{}」的JSON schema 驗證全部數據點。可是,Tap做者最好以儘量窄的方式定義schema。

Stitch中的schema

Stitch Target和Stitch API使用schema以下:數據庫

  • 當Stitch Target遇到未根據其流的最新schema驗證的數據點時,它會失敗
  • schema必須是頂級的「對象」
  • Stitch支持具備嵌套到任何深度的對象的schema,以及嵌套到任何深度的對象數組 - Stitch docs中的更多信息
  • 在構造消息以前,必須徹底解析並替換使用JSON模式$ref功能的引用SCHEMA。規範不支持傳遞額外schema以做爲參考分辨率的方法。
  • 類型string和格式的屬性date-time將轉換爲目標數據庫中的相應時間戳或日期時間類型
  • 類型的屬性integer在目標數據庫中轉換爲整數
  • 類型的屬性number在目標數據庫中轉換爲十進制或數字
    (很快)maxLengthtype屬性的參數string用於定義目標數據庫中相應varchar列的寬度
  • 當Stitch遇到與要在目標數據庫中加載流的表不兼容的流的schema時,它會將數據添加到拒絕堆中
    參考:
 
{
  "type": [
    "null", 
    "object"
  ],
  "additionalProperties": false,
  "properties": {
    "id": {
      "type": [
        "null",
        "string"
      ],
    },
    "name": {
      "type": [
        "null",
        "string"
      ],
    },
    "date_modified": {
      "type": [
        "null",
        "string"
      ],
      "format": "date-time",
    }
  }
}

目錄(catalog)

發現模式的輸出應該是Tap支持的數據流列表。此JSON格式的列表稱爲目錄。頂層是一個對象,其中一個被調用的鍵"streams"指向一個對象數組,
每一個對象都有如下字段:
tap_stream_id 字符串 須要 流的惟一標識符。容許這與流的名稱不一樣,以容許具備重複流名稱的源。
schema 對象 須要 流的JSON模式。
table_name 字符串 可選的 對於數據庫源,表的名稱。
metadata 元數據數組 可選的 請參閱下面的元數據以獲取解釋
參考:express

 
{
  "streams": [
    {
      "tap_stream_id": "users",
      "stream": "users",
      "schema": {
        "type": ["null", "object"],
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": [
              "null",
              "string"
            ],
          },
          "name": {
            "type": [
              "null",
              "string"
            ],
          },
          "date_modified": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time",
          }
        }
      }
    }
  ]
}
 

metadata

元數據是關聯模式中節點的額外信息的首選機制。
應該經過tap 來寫入和讀取某些元數據。此元數據稱爲discoverable元數據。其餘元數據將由其餘系統(如UI)編寫
,所以只能經過tap讀取。這種類型的元數據稱爲non-discoverable元數據
參考的字段信息:json

Keyword Tap Type Discoverable? Description
selected any non-discoverable Either true or false. Indicates that this node in the schema has been selected by the user for replication.
replication-method any non-discoverable Either FULL_TABLE, INCREMENTAL, or LOG_BASED. The replication method to use for a stream.
replication-key any non-discoverable The name of a property in the source to use as a "bookmark". For example, this will often be an "updated-at" field or an auto-incrementing primary key (requires replication-method).
view-key-properties database non-discoverable List of key properties for a database view.
inclusion any discoverable Either available, automatic, or unsupported.

available means the field is available for selection, and the tap will only emit values for that field if it is marked with "selected": true.

automatic means that the tap will emit values for the field.

unsupported means that the field exists in the source data but the tap is unable to provide it.
selected-by-default any discoverable Either true or false. Indicates if a node in the schema should be replicated if a user has not expressed any opinion on whether or not to replicate it.
valid-replication-keys any discoverable List of the fields that could be used as replication keys.
schema-name any discoverable The name of the stream.
forced-replication-method any discoverable Used to force the replication method to either FULL_TABLE or INCREMENTAL.
table-key-properties database discoverable List of key properties for a database table.
is-view database discoverable Either true or false. Indicates whether a stream corresponds to a database view.
row-count database discoverable Number of rows in a database table/view.
database-name database discoverable Name of database.
sql-datatype database discoverable Represents the datatype of a database column.

參考的數據格式api

 
{
  "metadata" : {
    "selected" : true,
    "some-other-metadata" : "whatever"
  },
  "breadcrumb" : ["properties", "some-field-name"]
}
 
 

上面的breadcrumb對象定義了到元數據所屬節點的模式的路徑。流的元數據將具備空的麪包屑。
參考完整例子數組

 
{
  "streams": [
    {
      "tap_stream_id": "users",
      "stream": "users",
      "schema": {
        "type": ["null", "object"],
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": [
              "null",
              "string"
            ],
          },
          "name": {
            "type": [
              "null",
              "string"
            ],
          },
          "date_modified": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time",
          }
        }
      },
      "metadata": [
        {
          "metadata": {
            "inclusion": "available",
            "table-key-properties": ["id"],
            "selected-by-default": true,
            "valid-replication-keys": ["date_modified"],
            "schema-name": "users",
          },
          "breadcrumb": []
        },
        {
          "metadata": {
            "inclusion": "automatic",
          },
          "breadcrumb": ["properties", "id"]
        },
        {
          "metadata": {
            "inclusion": "available",
            "selected-by-default": true,
          },
          "breadcrumb": ["properties", "name"]
        },
        {
          "metadata": {
            "inclusion": "automatic",
          },
          "breadcrumb": ["properties", "date_modified"]
        }
      ]
    }
  ]
}
 

參考資料

https://github.com/singer-io/getting-started/blob/master/docs/DISCOVERY_MODE.md數據結構

相關文章
相關標籤/搜索