

# 创建架构
<a name="schema-registry-gs4"></a>

您可以使用 AWS Glue API 或 AWS Glue 控制台创建架构。

**AWS Glue API**  
您可以按照以下步骤使用 AWS Glue API 执行此任务。

要添加新架构，请使用 [CreateSchema 操作（Python：create\_schema）](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-CreateSchema) API。

指定 `RegistryId` 结构，指示架构的注册表。或者，忽略 `RegistryId`，使用默认注册表。

指定 `SchemaName`（包含字母、数字、连字符或下划线）和 `DataFormat` 为 **AVRO** 或者 **JSON**。`DataFormat` 一旦在架构上设置，便不可更改。

指定 `Compatibility` 模式：
+ *向后兼容（推荐）*– 使用者可以读取当前版本和先前版本。
+ *向后兼容全部* – 使用者可以读取当前版本和所有先前版本。
+ *向前兼容* – 使用者可以读取当前版本和后续版本。
+ *向前兼容全部* – 使用者可以读取当前版本和所有后续版本。
+ *完整兼容* – 向后兼容和向前兼容的组合。
+ *完整兼容全部* – 向后兼容全部和向前兼容全部的组合。
+ *无* – 不执行兼容性检查。
+ *已禁用* – 防止对此架构进行任何版本控制。

（可选）为您的架构指定 `Tags`。

指定 `SchemaDefinition`，以 Avro、JSON 或 Protobuf 数据格式定义架构。请参阅示例。

对于 Avro 数据格式：

```
aws glue create-schema --registry-id RegistryName="registryName1" --schema-name testschema --compatibility NONE --data-format AVRO --schema-definition "{\"type\": \"record\", \"name\": \"r1\", \"fields\": [ {\"name\": \"f1\", \"type\": \"int\"}, {\"name\": \"f2\", \"type\": \"string\"} ]}"
```

```
aws glue create-schema --registry-id RegistryArn="arn:aws:glue:us-east-2:901234567890:registry/registryName1" --schema-name testschema --compatibility NONE --data-format AVRO  --schema-definition "{\"type\": \"record\", \"name\": \"r1\", \"fields\": [ {\"name\": \"f1\", \"type\": \"int\"}, {\"name\": \"f2\", \"type\": \"string\"} ]}"
```

对于 JSON 数据格式：

```
aws glue create-schema --registry-id RegistryName="registryName" --schema-name testSchemaJson --compatibility NONE --data-format JSON --schema-definition "{\"$schema\": \"http://json-schema.org/draft-07/schema#\",\"type\":\"object\",\"properties\":{\"f1\":{\"type\":\"string\"}}}"
```

```
aws glue create-schema --registry-id RegistryArn="arn:aws:glue:us-east-2:901234567890:registry/registryName" --schema-name testSchemaJson --compatibility NONE --data-format JSON --schema-definition "{\"$schema\": \"http://json-schema.org/draft-07/schema#\",\"type\":\"object\",\"properties\":{\"f1\":{\"type\":\"string\"}}}"
```

对于 Protobuf 数据格式：

```
aws glue create-schema --registry-id RegistryName="registryName" --schema-name testSchemaProtobuf --compatibility NONE --data-format PROTOBUF --schema-definition "syntax = \"proto2\";package org.test;message Basic { optional int32 basic = 1;}"
```

```
aws glue create-schema --registry-id RegistryArn="arn:aws:glue:us-east-2:901234567890:registry/registryName" --schema-name testSchemaProtobuf --compatibility NONE --data-format PROTOBUF --schema-definition "syntax = \"proto2\";package org.test;message Basic { optional int32 basic = 1;}"
```

**AWS Glue 控制台**  
使用 AWS Glue 控制台添加新架构

1. 登录 AWS 管理控制台，然后通过以下网址打开 AWS Glue 控制台：[https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue\)。

1. 在导航窗格的 **Data catalog (数据目录)** 下，选择 **Schemas (架构)**。

1. 选择 **Add schema (添加架构)**。

1. 输入 **Schema name (架构名称)**，包含字母、数字、连字符、下划线、美元符号或哈希标记。此名称不能更改。

1. 选择 **Registry (注册表)**，这是架构在下拉菜单中的存储位置。父注册表在创建后无法更改。

1. 将 **Data format (数据格式)** 保留为 *Apache Avro* 或者 *JSON*。此格式适用于此架构的所有版本。

1. 选择 **Compatibility mode (兼容性模式)**。
   + *向后兼容（推荐）*– 接收者可以读取当前版本和先前版本。
   + *向后兼容全部* – 接收者可以读取当前版本和所有先前版本。
   + *向前兼容* – 发件人可以写入当前版本和先前版本。
   + *向前兼容全部* – 发件人可以写入当前版本和所有先前版本。
   + *完整兼容* – 向后兼容和向前兼容的组合。
   + *完整兼容全部* – 向后兼容全部和向前兼容全部的组合。
   + *无* – 不执行兼容性检查。
   + *已禁用* – 防止对此架构进行任何版本控制。

1. 为注册表输入可选 **Description (说明)**，最多 250 个字符。  
![架构创建示例。](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/schema_reg_create_schema.png)

1. （可选）将一个或多个标签应用于架构。选择 **Add new tag (添加新标签)**，指定 **Tag key (标签键)** 和 **Tag value (标签值)**（可选）。

1. 在 **First schema version (第一个架构版本)** 框中，输入或粘贴您的初始架构。

   有关 Avro 格式的信息，请参阅[使用 Avro 数据格式](#schema-registry-avro)

   有关 JSON 格式的信息，请参阅[使用 JSON 数据格式](#schema-registry-json)

1. （可选）选择 **Add metadata (添加元数据)** 添加版本元数据，对架构版本进行注释或分类。

1. 选择 **Create schema and version (创建架构和版本)**。

![架构创建示例。](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/schema_reg_create_schema2.png)


该架构在 **Schemas (架构)** 下面的列表中创建并显示。

## 使用 Avro 数据格式
<a name="schema-registry-avro"></a>

Avro 提供数据序列化和数据交换服务。Avro 以 JSON 格式存储数据定义，使其易于阅读和解释。数据本身以二进制格式存储。

有关定义 Apache Avro 架构的信息，请参阅 [Apache Avro 规范](http://avro.apache.org/docs/current/spec.html)。

## 使用 JSON 数据格式
<a name="schema-registry-json"></a>

数据可以使用 JSON 格式进行序列化。[JSON 架构格式](https://json-schema.org/)定义了 JSON 架构格式的标准。