# CREATE SCHEMA\_REGISTRY

## Syntax <a href="#synopsis" id="synopsis"></a>

```sql
CREATE SCHEMA_REGISTRY schema_registry_name
WITH (schema_registry_parameter = value [, ... ]);
```

### Description

[Schema registries](https://docs.deltastream.io/overview/core-concepts/store#schema-registry) are useful for storing and managing the many schemas that may define a user's data streams. These schemas are necessary for a system to marshal and unmarshal records and ensure the native data format matches the intended format. After you create a schema registry, look at how to [UPDATE STORE](https://docs.deltastream.io/reference/sql-syntax/ddl/update-store) to attach the schema registry to a [store](https://docs.deltastream.io/overview/core-concepts/store). The newly-created schema registry is accessible to the creator as well as anyone who has been given permissions.

Only a [role](https://docs.deltastream.io/overview/core-concepts/access-control#_role) with [`CREATE_SCHEMA_REGISTRY`](https://docs.deltastream.io/overview/core-concepts/access-control#privilege) privilege can create a schema registry.

{% hint style="info" %}
**Notes**

* A schema registry is required for working with Avro data.
* Currently supported schema registries are Confluent Cloud and Confluent Platform.
* Known limitation: Confluent Schema Registry must use the default [TopicNameStrategy](https://docs.confluent.io/platform/current/schema-registry/fundamentals/serdes-develop/index.html#subject-name-strategy) for creating subject names.
  {% endhint %}

### Arguments

#### schema\_registry\_name

Specifies the name of the new schema registry. If the name is case-sensitive, you must wrap it in double quotes; otherwise, the system uses the lower case name.

#### WITH (schema\_registry\_parameter = value \[, …​ ])

This clause specifies schema registry parameters; see [schema registry parameters](#schema-registry-parameters) below for more information.

### Schema Registry Parameters

| Parameter Name    | Description                                                                                                                                                                                                                                                                                                      |
| ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `type`            | <p>Type of schema registry.<br></p><p><strong>Required:</strong> Yes<br><strong>Type:</strong> <code>SCHEMA\_REGISTRY\_TYPE</code><br><strong>Valid values:</strong> <code>CONFLUENT</code>, <code>CONFLUENT\_CLOUD</code></p>                                                                                   |
| `access_region`   | <p>Region in which the schema registry resides.<br></p><p><strong>Required:</strong> Yes, unless specified in <code>properties.file</code><br><strong>Type:</strong> String<br><strong>Valid values:</strong> See <a href="broken-reference">LIST REGIONS</a></p>                                                |
| `uris`            | <p>List of comma-separated <code>host:port</code> URIs to connect to the schema registry.<br></p><p><strong>Required:</strong> Yes, unless specified in <code>properties.file</code><br><strong>Type:</strong> String<br><strong>Valid values:</strong> Valid URI that corresponds with the schema registry.</p> |
| `properties.file` | <p>Optional. The file path to a .yaml file containing other schema registry parameters.<br></p><p><strong>Required:</strong> No<br><strong>Default value:</strong> None<br><strong>Type:</strong> String<br><strong>Valid values:</strong> File path in current user's filesystem</p>                            |

### Confluent Cloud Schema Registry Specific Parameters

| Parameter Name           | Description                                                                                                                                                                                                                                                                                                |
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `confluent_cloud.key`    | <p>Credentials key for the Confluent Cloud schema registry.<br></p><p><strong>Required:</strong> No<br><strong>Default:</strong> None<br><strong>Type:</strong> String<br><strong>Valid values:</strong> The key corresponding with the credential key pair associated with the schema registry.</p>       |
| `confluent_cloud.secret` | <p>Credentials secret for the Confluent Cloud schema registry.<br></p><p><strong>Required:</strong> No<br><strong>Default:</strong> None<br><strong>Type:</strong> String<br><strong>Valid values:</strong> The secret corresponding with the credential key pair associated with the schema registry.</p> |

### Confluent Platform Schema Registry Specific Parameters

| Parameter Name         | Description                                                                                                                                                                                     |
| ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `confluent.username`   | <p>Login username for the Confluent Platform schema registry.<br><br><strong>Required:</strong> No<br><strong>Default:</strong> None<br><strong>Type:</strong> String</p>                       |
| `confluent.password`   | <p>Login password for the Confluent Platform schema registry.<br><br><strong>Required:</strong> No<br><strong>Default:</strong> None<br><strong>Type:</strong> String</p>                       |
| `tls.client.cert_file` | <p>File path to client certificate for mutual TLS authentication in PEM format.<br><br><strong>Required:</strong> No<br><strong>Default:</strong> None<br><strong>Type:</strong> String</p>     |
| `tls.client.key_file`  | <p>File path to client certificate key for mutual TLS authentication in PEM format.<br><br><strong>Required:</strong> No<br><strong>Default:</strong> None<br><strong>Type:</strong> String</p> |

## Examples

#### Create a Confluent Cloud Schema Registry

The following example statement creates a new `CONFLUENT_CLOUD` schema registry named `ConfluentCloudSR`:

```sh
<no-db>/<no-store># CREATE SCHEMA_REGISTRY "ConfluentCloudSR" WITH (
    'type' = CONFLUENT_CLOUD,
    'access_region' = "AWS us-east-1",
    'uris' = 'https://abcd-efghi.us-east-2.aws.confluent.cloud',
    'confluent_cloud.key' = 'fake_key',
    'confluent_cloud.secret' = 'fake_secret'
);
+-----------------+------------------+------------+------------------------------------------+
|  Type           |  Name            |  Command   |  Summary                                 |
+=================+==================+============+==========================================+
| schema registry | ConfluentCloudSR | CREATE     | schema registry "ConfluentCloudSR" was   |
|                 |                  |            | successfully created                     |
+-----------------+------------------+------------+------------------------------------------+
```

#### Create a Confluent Platform Schema Registry

The following example statement creates a new `CONFLUENT` schema registry named `ConfluentPlatformSR`:

```sh
<no-db>/<no-store># CREATE SCHEMA_REGISTRY "ConfluentPlatformSR" WITH (
    'type' = CONFLUENT,
    'access_region' = "AWS us-east-1",
    'uris' = 'https://url.to.schema.registry.listener:8081',
    'confluent.username' = 'fake_username',
    'confluent.password' = 'fake_password',
    'tls.client.cert_file' = '@/path/to/tls/client_cert_file',
    'tls.client.key_file' = '@/path/to/tls_key'
);
+-----------------+---------------------+------------+------------------------------------------+
|  Type           |  Name               |  Command   |  Summary                                 |
+=================+=====================+============+==========================================+
| schema registry | ConfluentPlatformSR | CREATE     | schema registry "ConfluentPlatformSR"    |
|                 |                     |            | was successfully created                 |
+-----------------+---------------------+------------+------------------------------------------+

```

#### Create a schema registry with credentials from a file

The following creates a new `CONFLUENT_CLOUD` schema registry named `ConfluentCloudSR`:

```sh
$ cat /User/user1/schema_registry/cc/properties.yaml
access_region: "AWS us-east-2"
uris: "https://abcd-efghi.us-east-2.aws.confluent.cloud"
confluent_cloud.key: "SR_KEY"
confluent_cloud.secret: "SR_SECRET"
```

```sql
CREATE SCHEMA_REGISTRY "ConfluentCloudSR" WITH (
    'type' = CONFLUENT_CLOUD,
    'properties.file' = '@/User/user1/schema_registry/cc/properties.yaml'
);
```
