| // Licensed to the Apache Software Foundation (ASF) under one or more |
| // contributor license agreements. See the NOTICE file distributed with |
| // this work for additional information regarding copyright ownership. |
| // The ASF licenses this file to You under the Apache License, Version 2.0 |
| // (the "License"); you may not use this file except in compliance with |
| // the License. You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| = Understanding Schemas |
| |
| == Overview |
| |
| Ignite has a number of default schemas and supports creating custom schemas. |
| |
| There are two schemas that are available by default: |
| |
| - The SYS schema, which contains a number of system views with information about cluster nodes. You can't create tables in this schema. Refer to the link:monitoring-metrics/system-views[System Views] page for further information. |
| - The <<PUBLIC Schema,PUBLIC schema>>, which is used by default whenever a schema is not specified. |
| |
| Custom schemas are created in the following cases: |
| |
| - You can specify custom schemas in the cluster configuration. See <<Custom Schemas>>. |
| - Ignite creates a schema for each cache created via one of the programming interfaces or XML configuration. See <<Cache and Schema Names>>. |
| |
| |
| == PUBLIC Schema |
| |
| The PUBLIC schema is used by default whenever a schema is required and is not specified. For example, when you connect to the cluster via JDBC without setting the schema explicitly, you will connect to the PUBLIC schema. |
| |
| |
| == Custom Schemas |
| Custom schemas can be set via the `sqlSchemas` property of `IgniteConfiguration`. You can specify a list of schemas in the configuration before starting your cluster and then create objects in these schemas at runtime. |
| |
| Below is a configuration example with two custom schemas. |
| |
| |
| [tabs] |
| -- |
| tab:XML[] |
| [source,xml] |
| ---- |
| include::code-snippets/xml/schemas.xml[tags=ignite-config;!discovery, indent=0] |
| ---- |
| tab:Java[] |
| [source,java] |
| ---- |
| include::{javaCodeDir}/Schemas.java[tags=custom-schemas, indent=0] |
| ---- |
| tab:C#/.NET[] |
| [source,csharp] |
| ---- |
| include::code-snippets/dotnet/UnderstandingSchemas.cs[tag=schemas,indent=0] |
| ---- |
| |
| tab:C++[unsupported] |
| -- |
| |
| To connect to a specific schema via, for example, a JDBC driver, provide the schema name in the connection string: |
| |
| [source,text] |
| ---- |
| jdbc:ignite:thin://127.0.0.1/MY_SCHEMA |
| ---- |
| |
| == Cache and Schema Names |
| When you create a cache with link:SQL/sql-api#configuring-queryable-fields[queryable fields], you can manipulate the cached data using the link:SQL/sql-api[SQL API]. In SQL terms, each such cache corresponds to a separate schema whose name equals the name of the cache. |
| |
| Similarly, when you create a table via a DDL statement, you can access it as a key-value cache via Ignite's supported programming interfaces. The name of the corresponding cache can be specified by providing the `CACHE_NAME` parameter in the `WITH` part of the `CREATE TABLE` statement. |
| |
| [source,sql] |
| ---- |
| CREATE TABLE City ( |
| ID INT(11), |
| Name CHAR(35), |
| CountryCode CHAR(3), |
| District CHAR(20), |
| Population INT(11), |
| PRIMARY KEY (ID, CountryCode) |
| ) WITH "backups=1, CACHE_NAME=City"; |
| ---- |
| |
| See the link:sql-reference/ddl#create-table[CREATE TABLE] page for more details. |
| |
| If you do not use this parameter, the cache name is defined in the following format (in capital letters): |
| |
| .... |
| SQL_<SCHEMA_NAME>_<TABLE_NAME> |
| .... |