本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWS Glue架構登錄
注意
AWS Glue AWS Glue 主控台中的下列區域不支援結構描述登錄:亞太區域 (雅加達) 和中東 (UAE)。
S AWS Glue chema 登錄可讓您集中探索、控制和發展資料串流結構描述。結構描述定義資料記錄的結構和格式。透過AWS Glue結構描述登錄,您可以使用與 Apache Kafka、Amazon Kinesis 資料串流、Ap ache Flink 的亞馬遜受管服務
架構註冊表支持AVRO(v1.10.2)數據格式,具有JSON模式格式的JSON數據格式extensions
或groups
,以及 Java 語言支持以及未來的其他數據格式和語言。JSON支援的功能包括相容性、透過中繼資料擷取結構描述、自動註冊結構描述、IAM相容性以及可選的ZLIB壓縮,以減少儲存和資料傳輸。Schema 登錄檔是無伺服器且可免費使用。
使用結構描述作為生產者與消費者之間的資料格式合約,可改善資料控管、更高品質的資料,並讓資料消費者能夠彈性相容上游變更。
Schema 註冊表允許不同的系統共享序列化和反序列化的模式。例如,假設您擁有資料的生產者和消費者。生產者在發佈資料時知道結構描述。架構註冊表為某些系統(如 Amazon MSK 或 Apache Kafka)提供序列化程序和反序列化程序。
如需詳細資訊,請參閱結構描述登錄的運作方式。
主題
結構描述
結構描述定義資料記錄的結構和格式。結構描述是可靠的資料發佈、耗用或儲存的版本化規格。
在 Avro 的這個範例結構描述中,格式和結構由配置和欄位名稱定義,欄位名稱的格式由資料類型定義 (例如,string
、int
)。
{ "type": "record", "namespace": "ABC_Organization", "name": "Employee", "fields": [ { "name": "Name", "type": "string" }, { "name": "Age", "type": "int" }, { "name": "address", "type": { "type": "record", "name": "addressRecord", "fields": [ { "name": "street", "type": "string" }, { "name": "zipcode", "type": "int" } ] } } ] }
在此範例JSON結構描述草稿 -07 中JSON,格式是由JSON結構描述
{ "$id": "https://example.com/person.schema.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "Person", "type": "object", "properties": { "firstName": { "type": "string", "description": "The person's first name." }, "lastName": { "type": "string", "description": "The person's last name." }, "age": { "description": "Age in years which must be equal to or greater than zero.", "type": "integer", "minimum": 0 } } }
在這個 Protobuf 範例中,格式由協定緩衝區語言的版本 2 (proto2)
syntax = "proto2"; package tutorial; option java_multiple_files = true; option java_package = "com.example.tutorial.protos"; option java_outer_classname = "AddressBookProtos"; message Person { optional string name = 1; optional int32 id = 2; optional string email = 3; enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message PhoneNumber { optional string number = 1; optional PhoneType type = 2 [default = HOME]; } repeated PhoneNumber phones = 4; } message AddressBook { repeated Person people = 1; }
登錄檔
登錄檔是結構描述的邏輯容器。登錄檔允許您組織您的結構描述,以及管理應用程式的存取控制。登錄具有 Amazon 資源名稱 (ARN),可讓您組織和設定登錄內結構描述操作的不同存取權限。
您可以使用預設登錄檔,或視需要建立許多新的登錄檔。
|
|
|
|
結構描述版本控制和相容性
每個結構描述可以有多個版本。版本控制是由套用在結構描述上的相容性規則所控制。結構描述登錄檔會根據此規則檢查登錄新結構描述版本的要求,然後才能成功。
標示為檢查點的結構描述版本是用來判斷註冊新結構描述版本的相容性。第一次建立結構描述時,預設檢查點將是第一個版本。隨著結構描述隨著更多版本而發展,您可以使用CLI/SDK將檢查點變更為結構描述的版本,使用遵循一組條UpdateSchema
API件約束的結構描述。在主控台中,編輯結構描述定義或相容性模式預設會將檢查點變更為最新版本。
相容性模式可讓您控制結構描述可以或不可以隨著時間變化的方式。這些模式形成應用程式產生和使用資料之間的合約。當新版的結構描述提交至登錄檔時,會使用套用至結構描述名稱的相容性規則來判斷是否可以接受新版本。共有 8 種相容模式:NONEDISABLEDBACKWARD、ALL、FORWARD、BACKWARD FORWARD _ ALL、_ FULL、FULL _ ALL。
在 Avro 資料格式中,欄位可以是選用的或必要的。選用欄位是其中 Type
包含 null。必要欄位的 Type
沒有 null。
在 Protobuf 資料格式中,proto2 語法中的欄位可以是選用 (包括重複) 或必要欄位,而 proto3 語法中的所有欄位均是選用 (包括重複) 欄位。所有相容性規則均是根據對協定緩衝區規範的理解以及 Google 協定緩衝區文件
NONE:不適用相容模式。您可以在開發案例中使用此選項,或者如果您不知道要套用至結構描述的相容性模式。任何新增的版本都會被接受,而不經過相容性檢查。
DISABLED:此相容性選項可防止特定綱要的版本控制。無法新增新版本。
BACKWARD:建議使用此相容性選項,因為它允許取用者讀取目前和先前的結構描述版本。當您刪除欄位或新增選用欄位時,您可以使用此選項來檢查與先前結構描述版本的相容性。的典型使用案例BACKWARD是針對最新的結構描述建立應用程式時。
AVRO
例如,假設您有一個由名字 (必要)、姓氏 (必要)、電子郵件 (必要) 和電話號碼 (選用) 所定義的結構描述。
如果您的下一個結構描述版本移除必要的電子郵件欄位,將可成功註冊。BACKWARD相容性要求取用者能夠讀取目前和之前的結構描述版本。您的消費者將能夠讀取新的結構描述,因為舊訊息中的額外電子郵件欄位被忽略。
如果您建議的新結構描述版本會新增必填欄位 (例如郵遞區號),則無法成功註冊相BACKWARD容性。新版本的消費者將無法在結構描述變更之前讀取舊訊息,因為他們缺少必要的郵遞區號欄位。但是,如果在新的結構描述中將郵遞區號欄位設定為選用,則提議的版本將成功註冊,因為消費者可以在沒有選用郵遞區碼欄位的情況下讀取舊的結構描述。
JSON
例如,假設您有名字 (選用)、姓氏 (選用)、電子郵件 (選用) 和電話號碼 (選用) 所定義的結構描述版本。
如果您的下一個結構描述版本新增了選用的電話號碼屬性,只要原始結構描述版本不允許透過將
additionalProperties
欄位設定為 false 的任何其他屬性,這就會成功註冊。BACKWARD相容性要求取用者能夠讀取目前和之前的結構描述版本。您的消費者將能夠讀取電話號碼屬性不存在的原始結構描述產生的資料。如果您建議的新結構描述版本會新增選用的電話號碼屬性,則當原始結構描述版本將
additionalProperties
欄位設定為 true (也就是允許任何其他屬BACKWARD性) 時,這將無法成功註冊相容性。新版本的消費者將無法在結構描述變更之前讀取舊訊息,因為他們無法讀取具有不同類型 (例如是字串而不是數字) 之電話號碼屬性的資料。PROTOBUF
例如,假設您有一個由訊息
Person
與 proto2 語法下的first name
(必要)、last name
(必要)、email
(必要) 和phone number
(選用) 等欄位所定義的結構描述版本。與AVRO案例類似,如果您的下一個結構描述版本移除必填
email
欄位,這將成功註冊。BACKWARD相容性要求取用者能夠讀取目前和之前的結構描述版本。舊訊息中的額外email
欄位會被忽略,您的消費者將能夠讀取新的結構描述。例如,如果您有新增必填欄位的建議新結構描述版本
zip code
,則無法成功註冊具有BACKWARD相容性。新版本的消費者將無法讀取結構描述變更之前的舊訊息,因為它們缺少必要的zip code
欄位。但是,如果在新的結構描述中將zip code
欄位設定為選用,則提議的版本可成功註冊,因為消費者可以讀取不含zip code
選用欄位的結構描述。在 g RPC 用例的情況下,添加新的RPC服務或RPC方法是向後兼容的更改。例如,假設您
MyService
使用兩RPC種方法Foo
和的RPC服務定義了結構描述版本Bar
。如果您的下一個模式版本添加了一個名為的新RPC方法
Baz
,這將成功註冊。您的消費者將能夠根據BACKWARD兼容性讀取使用原始模式生成的數據,因為新添加的RPC方法Baz
是可選的。如果您有移除現有RPC方法的建議新結構描述版本
Foo
,則無法成功註冊相BACKWARD容性。您在新版本上的消費者將無法在模式更改之前讀取舊消息,因為他們無法理解和讀取 g RPC 應用程序中不存Foo
在的RPC方法的數據。BACKWARD_ ALL: 此相容性選項可讓消費者讀取目前和所有先前的結構描述版本。當您刪除欄位或新增選用欄位時,您可以使用此選項來檢查所有先前結構描述版本的相容性。
FORWARD:此相容性選項可讓取用者讀取目前和後續的結構描述版本,但不一定是更新的版本。當您新增欄位或刪除選用欄位時,您可以使用此選項來檢查與上一個結構描述版本的相容性。的典型使用案例FORWARD是您的應用程式已針對先前的結構描述建立,且應該能夠處理較新的結構描述時。
AVRO
例如,假設您有一個由名字 (必要)、姓氏 (必要)、電子郵件 (選用) 定義的結構描述版本。
如果您有一個新的結構描述版本新增了必要欄位,例如電話號碼,該版本可成功註冊。FORWARD相容性要求取用者能夠使用舊版來讀取新結構描述所產生的資料。
如果您有刪除必要名字欄位的建議結構描述版本,則無法成功註冊相FORWARD容性。您在以前版本上的消費者將無法讀取提議的結構描述,因為他們缺少必要的名字欄位。但是,如果名字欄位最初是選用的,那麼提議的新結構描述將成功註冊,因為消費者可以根據沒有選用名字欄位的新結構描述讀取資料。
JSON
例如,假設您有名字 (選用)、姓氏 (選用)、電子郵件 (選用) 和電話號碼 (選用) 所定義的結構描述版本。
如果您有移除選用電話號碼屬性的新結構描述版本,只要新結構描述版本不允許透過將
additionalProperties
欄位設定為 false 的任何其他屬性,這就會成功註冊。FORWARD相容性要求取用者能夠使用舊版來讀取新結構描述所產生的資料。如果您建議的結構描述版本會刪除選擇性的電話號碼屬FORWARD性,則當新結構描述版本將
additionalProperties
欄位設定為 true (也就是允許任何其他屬性) 時,這將無法成功註冊相容性。舊版本的消費者將無法讀取提議的結構描述,因為他們可能具有不同類型的電話號碼屬性,例如是字串而不是數字。PROTOBUF
例如,假設您有一個由訊息
Person
與 proto2 語法下的first name
(必要)、last name
(必要) 和email
(選用) 等欄位所定義的結構描述版本。與AVRO場景類似,如果您有添加必填字段的新模式版本,例如
phone number
,這將成功註冊。FORWARD相容性要求取用者能夠使用舊版來讀取新結構描述所產生的資料。如果您有刪除必填
first name
欄位的建議結構描述版本,則無法成功註冊相FORWARD容性。您在以前版本上的消費者將無法讀取提議的結構描述,因為它們缺少必要的first name
欄位。但是,如果first name
欄位最初是選用欄位,則提議的新結構描述可成功註冊,因為消費者可以讀取沒有first name
選用欄位的新結構描述資料。在 g RPC 使用案例的情況下,移除RPC服務或RPC方法是向前相容的變更。例如,假設您
MyService
使用兩RPC種方法Foo
和的RPC服務定義了結構描述版本Bar
。如果您的下一個結構描述版本刪除了名為的現有RPC方法
Foo
,這將成功註冊根據FORWARD相容性,因為消費者可以使用先前的版本讀取使用新結構描述產生的資料。如果您有一個提議的新結構描述版本添加了一個RPC方法Baz
,這將無法成功註冊FORWARD兼容性。您的以前版本的消費者將無法讀取建議的模式,因為他們缺少該RPC方法Baz
。FORWARD_ ALL:此相容性選項允許消費者讀取任何新註冊結構描述的生產者寫入的資料。當您需要新增欄位或刪除選用欄位,並檢查與所有先前結構描述版本的相容性時,您可以使用此選項。
FULL:此相容性選項可讓取用者讀取生產者使用上一個或下一個版本的綱要 (但不是較早或更新版本) 所寫入的資料。當您新增或移除選用欄位時,您可以使用此選項來檢查與上一個結構描述版本的相容性。
FULL_ ALL:此相容性選項可讓消費者讀取使用所有先前結構描述版本的生產者所寫入的資料。當您新增或移除選用欄位時,您可以使用此選項來檢查所有先前結構描述版本的相容性。
開源 Serde 程式庫
AWS 提供開源 Serde 庫作為序列化和反序列化數據的框架。這些程式庫的開源設計允許通用的開源應用程式和架構在他們的專案中支援這些程式庫。
如需 Serde 函式庫如何運作的詳細資訊,請參閱結構描述登錄的運作方式。
結構描述登錄檔的配額
配額 (在中 AWS也稱為限制) 是您 AWS 帳戶中資源、動作和項目的最大值。下列是 AWS Glue 中結構描述登錄檔的軟性限制。
結構描述版本中繼資料索引鍵-值對
每個 AWS 區域最多可以有 10 SchemaVersion 個鍵值對。
您可以使用或來檢視或設定鍵值中繼資料配對。QuerySchemaVersionMetadata 行動(Python:查詢模式版本的元數據) PutSchemaVersionMetadata 行動(Python:放置版本的元數據) APIs
下列是 AWS Glue 中結構描述登錄檔的硬性限制。
登錄檔
此帳戶的每個 AWS 區域最多可有 100 個登錄。
SchemaVersion
此帳戶的每個 AWS 區域最多可以有 10000 個結構描述版本。
每個新模式都會創建一個新的模式版本,因此理論上,如果每個模式只有一個版本,則每個區域每個帳戶最多可以有 10000 個模式。
結構描述承載
結構描述裝載的大小限制為 170 KB。