Showing
15 changed files
with
1229 additions
and
50 deletions
@@ -116,7 +116,7 @@ public class ThingsboardInstallService { | @@ -116,7 +116,7 @@ public class ThingsboardInstallService { | ||
116 | 116 | ||
117 | log.info("Installing DataBase schema..."); | 117 | log.info("Installing DataBase schema..."); |
118 | 118 | ||
119 | - databaseSchemaService.createDatabaseSchema();//TODO issue 1005 - create both SQL and C* schemas in hybrid mode | 119 | + databaseSchemaService.createDatabaseSchema(); |
120 | 120 | ||
121 | log.info("Loading system data..."); | 121 | log.info("Loading system data..."); |
122 | 122 |
1 | +/** | ||
2 | + * Copyright © 2016-2018 The Thingsboard Authors | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.thingsboard.server.service.install; | ||
17 | + | ||
18 | +import lombok.extern.slf4j.Slf4j; | ||
19 | +import org.springframework.beans.factory.annotation.Autowired; | ||
20 | +import org.thingsboard.server.dao.cassandra.CassandraInstallCluster; | ||
21 | +import org.thingsboard.server.service.install.cql.CQLStatementsParser; | ||
22 | + | ||
23 | +import java.nio.file.Path; | ||
24 | +import java.nio.file.Paths; | ||
25 | +import java.util.List; | ||
26 | + | ||
27 | +@Slf4j | ||
28 | +public abstract class CassandraAbstractDatabaseSchemaService /*implements DatabaseSchemaService*/ { | ||
29 | + | ||
30 | + private static final String CASSANDRA_DIR = "cassandra"; | ||
31 | + | ||
32 | + @Autowired | ||
33 | + private CassandraInstallCluster cluster; | ||
34 | + | ||
35 | + @Autowired | ||
36 | + private InstallScripts installScripts; | ||
37 | + | ||
38 | + private final String schemaCql; | ||
39 | + | ||
40 | + protected CassandraAbstractDatabaseSchemaService(String schemaCql) { | ||
41 | + this.schemaCql = schemaCql; | ||
42 | + } | ||
43 | + | ||
44 | + //@Override | ||
45 | + public void createDatabaseSchema() throws Exception { | ||
46 | + log.info("Installing Cassandra DataBase schema part: " + schemaCql); | ||
47 | + Path schemaFile = Paths.get(installScripts.getDataDir(), CASSANDRA_DIR, schemaCql); | ||
48 | + loadCql(schemaFile); | ||
49 | + | ||
50 | + } | ||
51 | + | ||
52 | + private void loadCql(Path cql) throws Exception { | ||
53 | + List<String> statements = new CQLStatementsParser(cql).getStatements(); | ||
54 | + statements.forEach(statement -> cluster.getSession().execute(statement)); | ||
55 | + } | ||
56 | +} |
application/src/main/java/org/thingsboard/server/service/install/CassandraDatabaseSchemaService.java
@@ -19,39 +19,25 @@ import lombok.extern.slf4j.Slf4j; | @@ -19,39 +19,25 @@ import lombok.extern.slf4j.Slf4j; | ||
19 | import org.springframework.beans.factory.annotation.Autowired; | 19 | import org.springframework.beans.factory.annotation.Autowired; |
20 | import org.springframework.context.annotation.Profile; | 20 | import org.springframework.context.annotation.Profile; |
21 | import org.springframework.stereotype.Service; | 21 | import org.springframework.stereotype.Service; |
22 | -import org.thingsboard.server.dao.cassandra.CassandraInstallCluster; | ||
23 | -import org.thingsboard.server.dao.util.NoSqlAnyDao; | ||
24 | -import org.thingsboard.server.service.install.cql.CQLStatementsParser; | ||
25 | - | ||
26 | -import java.nio.file.Path; | ||
27 | -import java.nio.file.Paths; | ||
28 | -import java.util.List; | 22 | +import org.thingsboard.server.dao.util.NoSqlDao; |
29 | 23 | ||
30 | @Service | 24 | @Service |
31 | -@NoSqlAnyDao | 25 | +@NoSqlDao |
32 | @Profile("install") | 26 | @Profile("install") |
33 | @Slf4j | 27 | @Slf4j |
34 | public class CassandraDatabaseSchemaService implements DatabaseSchemaService { | 28 | public class CassandraDatabaseSchemaService implements DatabaseSchemaService { |
35 | 29 | ||
36 | - private static final String CASSANDRA_DIR = "cassandra"; | ||
37 | - private static final String SCHEMA_CQL = "schema.cql"; | ||
38 | - | ||
39 | @Autowired | 30 | @Autowired |
40 | - private CassandraInstallCluster cluster; | 31 | + private CassandraEntityDatabaseSchemaService cassandraEntityDatabaseSchemaService; |
41 | 32 | ||
42 | @Autowired | 33 | @Autowired |
43 | - private InstallScripts installScripts; | 34 | + private CassandraTsDatabaseSchemaService cassandraTsDatabaseSchemaService; |
35 | + | ||
44 | 36 | ||
45 | @Override | 37 | @Override |
46 | public void createDatabaseSchema() throws Exception { | 38 | public void createDatabaseSchema() throws Exception { |
47 | log.info("Installing Cassandra DataBase schema..."); | 39 | log.info("Installing Cassandra DataBase schema..."); |
48 | - Path schemaFile = Paths.get(installScripts.getDataDir(), CASSANDRA_DIR, SCHEMA_CQL); | ||
49 | - loadCql(schemaFile); | ||
50 | - | ||
51 | - } | ||
52 | - | ||
53 | - private void loadCql(Path cql) throws Exception { | ||
54 | - List<String> statements = new CQLStatementsParser(cql).getStatements(); | ||
55 | - statements.forEach(statement -> cluster.getSession().execute(statement)); | 40 | + cassandraEntityDatabaseSchemaService.createDatabaseSchema(); |
41 | + cassandraTsDatabaseSchemaService.createDatabaseSchema(); | ||
56 | } | 42 | } |
57 | } | 43 | } |
1 | +/** | ||
2 | + * Copyright © 2016-2018 The Thingsboard Authors | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.thingsboard.server.service.install; | ||
17 | + | ||
18 | +import org.springframework.stereotype.Service; | ||
19 | + | ||
20 | +@Service | ||
21 | +public class CassandraEntityDatabaseSchemaService extends CassandraAbstractDatabaseSchemaService { | ||
22 | + public CassandraEntityDatabaseSchemaService() { | ||
23 | + super("schema-entities.cql"); | ||
24 | + } | ||
25 | +} |
1 | +/** | ||
2 | + * Copyright © 2016-2018 The Thingsboard Authors | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.thingsboard.server.service.install; | ||
17 | + | ||
18 | +import org.springframework.stereotype.Service; | ||
19 | + | ||
20 | +@Service | ||
21 | +public class CassandraTsDatabaseSchemaService extends CassandraAbstractDatabaseSchemaService { | ||
22 | + public CassandraTsDatabaseSchemaService() { | ||
23 | + super("schema-ts.cql"); | ||
24 | + } | ||
25 | +} |
application/src/main/java/org/thingsboard/server/service/install/HybridDatabaseSchemaService.java
0 → 100644
1 | +/** | ||
2 | + * Copyright © 2016-2018 The Thingsboard Authors | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.thingsboard.server.service.install; | ||
17 | + | ||
18 | +import lombok.extern.slf4j.Slf4j; | ||
19 | +import org.springframework.beans.factory.annotation.Autowired; | ||
20 | +import org.springframework.context.annotation.Profile; | ||
21 | +import org.springframework.stereotype.Service; | ||
22 | +import org.thingsboard.server.dao.util.HybridDao; | ||
23 | + | ||
24 | +@Service | ||
25 | +@Profile("install") | ||
26 | +@Slf4j | ||
27 | +@HybridDao | ||
28 | +public class HybridDatabaseSchemaService implements DatabaseSchemaService { | ||
29 | + | ||
30 | + @Autowired | ||
31 | + private SqlEntityDatabaseSchemaService sqlEntityDatabaseSchemaService; | ||
32 | + | ||
33 | + @Autowired | ||
34 | + private CassandraTsDatabaseSchemaService cassandraTsDatabaseSchemaService; | ||
35 | + | ||
36 | + | ||
37 | + @Override | ||
38 | + public void createDatabaseSchema() throws Exception { | ||
39 | + log.info("Installing Hybrid SQL/Cassandra DataBase schema..."); | ||
40 | + sqlEntityDatabaseSchemaService.createDatabaseSchema(); | ||
41 | + cassandraTsDatabaseSchemaService.createDatabaseSchema(); | ||
42 | + } | ||
43 | + | ||
44 | +} |
1 | +/** | ||
2 | + * Copyright © 2016-2018 The Thingsboard Authors | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.thingsboard.server.service.install; | ||
17 | + | ||
18 | +import lombok.extern.slf4j.Slf4j; | ||
19 | +import org.springframework.beans.factory.annotation.Autowired; | ||
20 | +import org.springframework.beans.factory.annotation.Value; | ||
21 | + | ||
22 | +import java.nio.charset.Charset; | ||
23 | +import java.nio.file.Files; | ||
24 | +import java.nio.file.Path; | ||
25 | +import java.nio.file.Paths; | ||
26 | +import java.sql.Connection; | ||
27 | +import java.sql.DriverManager; | ||
28 | + | ||
29 | +@Slf4j | ||
30 | +public abstract class SqlAbstractDatabaseSchemaService /*implements DatabaseSchemaService*/ { | ||
31 | + | ||
32 | + private static final String SQL_DIR = "sql"; | ||
33 | + | ||
34 | + @Value("${spring.datasource.url}") | ||
35 | + private String dbUrl; | ||
36 | + | ||
37 | + @Value("${spring.datasource.username}") | ||
38 | + private String dbUserName; | ||
39 | + | ||
40 | + @Value("${spring.datasource.password}") | ||
41 | + private String dbPassword; | ||
42 | + | ||
43 | + @Autowired | ||
44 | + private InstallScripts installScripts; | ||
45 | + | ||
46 | + private final String schemaSql; | ||
47 | + | ||
48 | + protected SqlAbstractDatabaseSchemaService(String schemaSql) { | ||
49 | + this.schemaSql = schemaSql; | ||
50 | + } | ||
51 | + | ||
52 | + //@Override | ||
53 | + public void createDatabaseSchema() throws Exception { | ||
54 | + | ||
55 | + log.info("Installing SQL DataBase schema part: " + schemaSql); | ||
56 | + | ||
57 | + Path schemaFile = Paths.get(installScripts.getDataDir(), SQL_DIR, schemaSql); | ||
58 | + try (Connection conn = DriverManager.getConnection(dbUrl, dbUserName, dbPassword)) { | ||
59 | + String sql = new String(Files.readAllBytes(schemaFile), Charset.forName("UTF-8")); | ||
60 | + conn.createStatement().execute(sql); //NOSONAR, ignoring because method used to load initial thingsboard database schema | ||
61 | + } | ||
62 | + | ||
63 | + } | ||
64 | + | ||
65 | +} |
@@ -17,50 +17,28 @@ package org.thingsboard.server.service.install; | @@ -17,50 +17,28 @@ package org.thingsboard.server.service.install; | ||
17 | 17 | ||
18 | import lombok.extern.slf4j.Slf4j; | 18 | import lombok.extern.slf4j.Slf4j; |
19 | import org.springframework.beans.factory.annotation.Autowired; | 19 | import org.springframework.beans.factory.annotation.Autowired; |
20 | -import org.springframework.beans.factory.annotation.Value; | ||
21 | import org.springframework.context.annotation.Profile; | 20 | import org.springframework.context.annotation.Profile; |
22 | import org.springframework.stereotype.Service; | 21 | import org.springframework.stereotype.Service; |
23 | import org.thingsboard.server.dao.util.SqlDao; | 22 | import org.thingsboard.server.dao.util.SqlDao; |
24 | 23 | ||
25 | -import java.nio.charset.Charset; | ||
26 | -import java.nio.file.Files; | ||
27 | -import java.nio.file.Path; | ||
28 | -import java.nio.file.Paths; | ||
29 | -import java.sql.Connection; | ||
30 | -import java.sql.DriverManager; | ||
31 | - | ||
32 | @Service | 24 | @Service |
33 | @Profile("install") | 25 | @Profile("install") |
34 | @Slf4j | 26 | @Slf4j |
35 | @SqlDao | 27 | @SqlDao |
36 | public class SqlDatabaseSchemaService implements DatabaseSchemaService { | 28 | public class SqlDatabaseSchemaService implements DatabaseSchemaService { |
37 | 29 | ||
38 | - private static final String SQL_DIR = "sql"; | ||
39 | - private static final String SCHEMA_SQL = "schema.sql"; | ||
40 | - | ||
41 | - @Value("${spring.datasource.url}") | ||
42 | - private String dbUrl; | ||
43 | - | ||
44 | - @Value("${spring.datasource.username}") | ||
45 | - private String dbUserName; | ||
46 | - | ||
47 | - @Value("${spring.datasource.password}") | ||
48 | - private String dbPassword; | 30 | + @Autowired |
31 | + private SqlEntityDatabaseSchemaService sqlEntityDatabaseSchemaService; | ||
49 | 32 | ||
50 | @Autowired | 33 | @Autowired |
51 | - private InstallScripts installScripts; | 34 | + private SqlTsDatabaseSchemaService sqlTsDatabaseSchemaService; |
35 | + | ||
52 | 36 | ||
53 | @Override | 37 | @Override |
54 | public void createDatabaseSchema() throws Exception { | 38 | public void createDatabaseSchema() throws Exception { |
55 | - | ||
56 | log.info("Installing SQL DataBase schema..."); | 39 | log.info("Installing SQL DataBase schema..."); |
57 | - | ||
58 | - Path schemaFile = Paths.get(installScripts.getDataDir(), SQL_DIR, SCHEMA_SQL); | ||
59 | - try (Connection conn = DriverManager.getConnection(dbUrl, dbUserName, dbPassword)) { | ||
60 | - String sql = new String(Files.readAllBytes(schemaFile), Charset.forName("UTF-8")); | ||
61 | - conn.createStatement().execute(sql); //NOSONAR, ignoring because method used to load initial thingsboard database schema | ||
62 | - } | ||
63 | - | 40 | + sqlEntityDatabaseSchemaService.createDatabaseSchema(); |
41 | + sqlTsDatabaseSchemaService.createDatabaseSchema(); | ||
64 | } | 42 | } |
65 | 43 | ||
66 | } | 44 | } |
application/src/main/java/org/thingsboard/server/service/install/SqlEntityDatabaseSchemaService.java
0 → 100644
1 | +/** | ||
2 | + * Copyright © 2016-2018 The Thingsboard Authors | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.thingsboard.server.service.install; | ||
17 | + | ||
18 | +import org.springframework.stereotype.Service; | ||
19 | + | ||
20 | +@Service | ||
21 | +public class SqlEntityDatabaseSchemaService extends SqlAbstractDatabaseSchemaService { | ||
22 | + public SqlEntityDatabaseSchemaService() { | ||
23 | + super("schema-entities.sql"); | ||
24 | + } | ||
25 | +} |
application/src/main/java/org/thingsboard/server/service/install/SqlTsDatabaseSchemaService.java
0 → 100644
1 | +/** | ||
2 | + * Copyright © 2016-2018 The Thingsboard Authors | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.thingsboard.server.service.install; | ||
17 | + | ||
18 | +import org.springframework.stereotype.Service; | ||
19 | + | ||
20 | +@Service | ||
21 | +public class SqlTsDatabaseSchemaService extends SqlAbstractDatabaseSchemaService { | ||
22 | + public SqlTsDatabaseSchemaService() { | ||
23 | + super("schema-ts.sql"); | ||
24 | + } | ||
25 | +} |
1 | +/** | ||
2 | + * Copyright © 2016-2018 The Thingsboard Authors | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.thingsboard.server.dao.util; | ||
17 | + | ||
18 | +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; | ||
19 | + | ||
20 | +@ConditionalOnExpression("'${database.entity.type}'=='sql' && '${database.ts.type}'=='cassandra'") | ||
21 | +public @interface HybridDao { | ||
22 | +} |
1 | +-- | ||
2 | +-- Copyright © 2016-2018 The Thingsboard Authors | ||
3 | +-- | ||
4 | +-- Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | +-- you may not use this file except in compliance with the License. | ||
6 | +-- You may obtain a copy of the License at | ||
7 | +-- | ||
8 | +-- http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | +-- | ||
10 | +-- Unless required by applicable law or agreed to in writing, software | ||
11 | +-- distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | +-- See the License for the specific language governing permissions and | ||
14 | +-- limitations under the License. | ||
15 | +-- | ||
16 | + | ||
17 | +CREATE KEYSPACE IF NOT EXISTS thingsboard | ||
18 | +WITH replication = { | ||
19 | + 'class' : 'SimpleStrategy', | ||
20 | + 'replication_factor' : 1 | ||
21 | +}; | ||
22 | + | ||
23 | +CREATE TABLE IF NOT EXISTS thingsboard.user ( | ||
24 | + id timeuuid, | ||
25 | + tenant_id timeuuid, | ||
26 | + customer_id timeuuid, | ||
27 | + email text, | ||
28 | + search_text text, | ||
29 | + authority text, | ||
30 | + first_name text, | ||
31 | + last_name text, | ||
32 | + additional_info text, | ||
33 | + PRIMARY KEY (id, tenant_id, customer_id, authority) | ||
34 | +); | ||
35 | + | ||
36 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.user_by_email AS | ||
37 | + SELECT * | ||
38 | + from thingsboard.user | ||
39 | + WHERE email IS NOT NULL AND tenant_id IS NOT NULL AND customer_id IS NOT NULL AND id IS NOT NULL AND authority IS NOT | ||
40 | + NULL | ||
41 | + PRIMARY KEY ( email, tenant_id, customer_id, id, authority ); | ||
42 | + | ||
43 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.user_by_tenant_and_search_text AS | ||
44 | + SELECT * | ||
45 | + from thingsboard.user | ||
46 | + WHERE tenant_id IS NOT NULL AND customer_id IS NOT NULL AND authority IS NOT NULL AND search_text IS NOT NULL AND id | ||
47 | + IS NOT NULL | ||
48 | + PRIMARY KEY ( tenant_id, customer_id, authority, search_text, id ) | ||
49 | + WITH CLUSTERING ORDER BY ( customer_id DESC, authority DESC, search_text ASC, id DESC ); | ||
50 | + | ||
51 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.user_by_customer_and_search_text AS | ||
52 | + SELECT * | ||
53 | + from thingsboard.user | ||
54 | + WHERE tenant_id IS NOT NULL AND customer_id IS NOT NULL AND authority IS NOT NULL AND search_text IS NOT NULL AND id | ||
55 | + IS NOT NULL | ||
56 | + PRIMARY KEY ( customer_id, tenant_id, authority, search_text, id ) | ||
57 | + WITH CLUSTERING ORDER BY ( tenant_id DESC, authority DESC, search_text ASC, id DESC ); | ||
58 | + | ||
59 | +CREATE TABLE IF NOT EXISTS thingsboard.user_credentials ( | ||
60 | + id timeuuid PRIMARY KEY, | ||
61 | + user_id timeuuid, | ||
62 | + enabled boolean, | ||
63 | + password text, | ||
64 | + activate_token text, | ||
65 | + reset_token text | ||
66 | +); | ||
67 | + | ||
68 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.user_credentials_by_user AS | ||
69 | + SELECT * | ||
70 | + from thingsboard.user_credentials | ||
71 | + WHERE user_id IS NOT NULL AND id IS NOT NULL | ||
72 | + PRIMARY KEY ( user_id, id ); | ||
73 | + | ||
74 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.user_credentials_by_activate_token AS | ||
75 | + SELECT * | ||
76 | + from thingsboard.user_credentials | ||
77 | + WHERE activate_token IS NOT NULL AND id IS NOT NULL | ||
78 | + PRIMARY KEY ( activate_token, id ); | ||
79 | + | ||
80 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.user_credentials_by_reset_token AS | ||
81 | + SELECT * | ||
82 | + from thingsboard.user_credentials | ||
83 | + WHERE reset_token IS NOT NULL AND id IS NOT NULL | ||
84 | + PRIMARY KEY ( reset_token, id ); | ||
85 | + | ||
86 | +CREATE TABLE IF NOT EXISTS thingsboard.admin_settings ( | ||
87 | + id timeuuid PRIMARY KEY, | ||
88 | + key text, | ||
89 | + json_value text | ||
90 | +); | ||
91 | + | ||
92 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.admin_settings_by_key AS | ||
93 | + SELECT * | ||
94 | + from thingsboard.admin_settings | ||
95 | + WHERE key IS NOT NULL AND id IS NOT NULL | ||
96 | + PRIMARY KEY ( key, id ) | ||
97 | + WITH CLUSTERING ORDER BY ( id DESC ); | ||
98 | + | ||
99 | +CREATE TABLE IF NOT EXISTS thingsboard.tenant ( | ||
100 | + id timeuuid, | ||
101 | + title text, | ||
102 | + search_text text, | ||
103 | + region text, | ||
104 | + country text, | ||
105 | + state text, | ||
106 | + city text, | ||
107 | + address text, | ||
108 | + address2 text, | ||
109 | + zip text, | ||
110 | + phone text, | ||
111 | + email text, | ||
112 | + additional_info text, | ||
113 | + PRIMARY KEY (id, region) | ||
114 | +); | ||
115 | + | ||
116 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.tenant_by_region_and_search_text AS | ||
117 | + SELECT * | ||
118 | + from thingsboard.tenant | ||
119 | + WHERE region IS NOT NULL AND search_text IS NOT NULL AND id IS NOT NULL | ||
120 | + PRIMARY KEY ( region, search_text, id ) | ||
121 | + WITH CLUSTERING ORDER BY ( search_text ASC, id DESC ); | ||
122 | + | ||
123 | +CREATE TABLE IF NOT EXISTS thingsboard.customer ( | ||
124 | + id timeuuid, | ||
125 | + tenant_id timeuuid, | ||
126 | + title text, | ||
127 | + search_text text, | ||
128 | + country text, | ||
129 | + state text, | ||
130 | + city text, | ||
131 | + address text, | ||
132 | + address2 text, | ||
133 | + zip text, | ||
134 | + phone text, | ||
135 | + email text, | ||
136 | + additional_info text, | ||
137 | + PRIMARY KEY (id, tenant_id) | ||
138 | +); | ||
139 | + | ||
140 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.customer_by_tenant_and_title AS | ||
141 | + SELECT * | ||
142 | + from thingsboard.customer | ||
143 | + WHERE tenant_id IS NOT NULL AND title IS NOT NULL AND id IS NOT NULL | ||
144 | + PRIMARY KEY ( tenant_id, title, id ) | ||
145 | + WITH CLUSTERING ORDER BY ( title ASC, id DESC ); | ||
146 | + | ||
147 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.customer_by_tenant_and_search_text AS | ||
148 | + SELECT * | ||
149 | + from thingsboard.customer | ||
150 | + WHERE tenant_id IS NOT NULL AND search_text IS NOT NULL AND id IS NOT NULL | ||
151 | + PRIMARY KEY ( tenant_id, search_text, id ) | ||
152 | + WITH CLUSTERING ORDER BY ( search_text ASC, id DESC ); | ||
153 | + | ||
154 | +CREATE TABLE IF NOT EXISTS thingsboard.device ( | ||
155 | + id timeuuid, | ||
156 | + tenant_id timeuuid, | ||
157 | + customer_id timeuuid, | ||
158 | + name text, | ||
159 | + type text, | ||
160 | + search_text text, | ||
161 | + additional_info text, | ||
162 | + PRIMARY KEY (id, tenant_id, customer_id, type) | ||
163 | +); | ||
164 | + | ||
165 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.device_by_tenant_and_name AS | ||
166 | + SELECT * | ||
167 | + from thingsboard.device | ||
168 | + WHERE tenant_id IS NOT NULL AND customer_id IS NOT NULL AND type IS NOT NULL AND name IS NOT NULL AND id IS NOT NULL | ||
169 | + PRIMARY KEY ( tenant_id, name, id, customer_id, type) | ||
170 | + WITH CLUSTERING ORDER BY ( name ASC, id DESC, customer_id DESC); | ||
171 | + | ||
172 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.device_by_tenant_and_search_text AS | ||
173 | + SELECT * | ||
174 | + from thingsboard.device | ||
175 | + WHERE tenant_id IS NOT NULL AND customer_id IS NOT NULL AND type IS NOT NULL AND search_text IS NOT NULL AND id IS NOT NULL | ||
176 | + PRIMARY KEY ( tenant_id, search_text, id, customer_id, type) | ||
177 | + WITH CLUSTERING ORDER BY ( search_text ASC, id DESC, customer_id DESC); | ||
178 | + | ||
179 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.device_by_tenant_by_type_and_search_text AS | ||
180 | + SELECT * | ||
181 | + from thingsboard.device | ||
182 | + WHERE tenant_id IS NOT NULL AND customer_id IS NOT NULL AND type IS NOT NULL AND search_text IS NOT NULL AND id IS NOT NULL | ||
183 | + PRIMARY KEY ( tenant_id, type, search_text, id, customer_id) | ||
184 | + WITH CLUSTERING ORDER BY ( type ASC, search_text ASC, id DESC, customer_id DESC); | ||
185 | + | ||
186 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.device_by_customer_and_search_text AS | ||
187 | + SELECT * | ||
188 | + from thingsboard.device | ||
189 | + WHERE tenant_id IS NOT NULL AND customer_id IS NOT NULL AND type IS NOT NULL AND search_text IS NOT NULL AND id IS NOT NULL | ||
190 | + PRIMARY KEY ( customer_id, tenant_id, search_text, id, type ) | ||
191 | + WITH CLUSTERING ORDER BY ( tenant_id DESC, search_text ASC, id DESC ); | ||
192 | + | ||
193 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.device_by_customer_by_type_and_search_text AS | ||
194 | + SELECT * | ||
195 | + from thingsboard.device | ||
196 | + WHERE tenant_id IS NOT NULL AND customer_id IS NOT NULL AND type IS NOT NULL AND search_text IS NOT NULL AND id IS NOT NULL | ||
197 | + PRIMARY KEY ( customer_id, tenant_id, type, search_text, id ) | ||
198 | + WITH CLUSTERING ORDER BY ( tenant_id DESC, type ASC, search_text ASC, id DESC ); | ||
199 | + | ||
200 | +CREATE TABLE IF NOT EXISTS thingsboard.device_credentials ( | ||
201 | + id timeuuid PRIMARY KEY, | ||
202 | + device_id timeuuid, | ||
203 | + credentials_type text, | ||
204 | + credentials_id text, | ||
205 | + credentials_value text | ||
206 | +); | ||
207 | + | ||
208 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.device_credentials_by_device AS | ||
209 | + SELECT * | ||
210 | + from thingsboard.device_credentials | ||
211 | + WHERE device_id IS NOT NULL AND id IS NOT NULL | ||
212 | + PRIMARY KEY ( device_id, id ); | ||
213 | + | ||
214 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.device_credentials_by_credentials_id AS | ||
215 | + SELECT * | ||
216 | + from thingsboard.device_credentials | ||
217 | + WHERE credentials_id IS NOT NULL AND id IS NOT NULL | ||
218 | + PRIMARY KEY ( credentials_id, id ); | ||
219 | + | ||
220 | +CREATE TABLE IF NOT EXISTS thingsboard.asset ( | ||
221 | + id timeuuid, | ||
222 | + tenant_id timeuuid, | ||
223 | + customer_id timeuuid, | ||
224 | + name text, | ||
225 | + type text, | ||
226 | + search_text text, | ||
227 | + additional_info text, | ||
228 | + PRIMARY KEY (id, tenant_id, customer_id, type) | ||
229 | +); | ||
230 | + | ||
231 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.asset_by_tenant_and_name AS | ||
232 | + SELECT * | ||
233 | + from thingsboard.asset | ||
234 | + WHERE tenant_id IS NOT NULL AND customer_id IS NOT NULL AND type IS NOT NULL AND name IS NOT NULL AND id IS NOT NULL | ||
235 | + PRIMARY KEY ( tenant_id, name, id, customer_id, type) | ||
236 | + WITH CLUSTERING ORDER BY ( name ASC, id DESC, customer_id DESC); | ||
237 | + | ||
238 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.asset_by_tenant_and_search_text AS | ||
239 | + SELECT * | ||
240 | + from thingsboard.asset | ||
241 | + WHERE tenant_id IS NOT NULL AND customer_id IS NOT NULL AND type IS NOT NULL AND search_text IS NOT NULL AND id IS NOT NULL | ||
242 | + PRIMARY KEY ( tenant_id, search_text, id, customer_id, type) | ||
243 | + WITH CLUSTERING ORDER BY ( search_text ASC, id DESC, customer_id DESC); | ||
244 | + | ||
245 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.asset_by_tenant_by_type_and_search_text AS | ||
246 | + SELECT * | ||
247 | + from thingsboard.asset | ||
248 | + WHERE tenant_id IS NOT NULL AND customer_id IS NOT NULL AND type IS NOT NULL AND search_text IS NOT NULL AND id IS NOT NULL | ||
249 | + PRIMARY KEY ( tenant_id, type, search_text, id, customer_id) | ||
250 | + WITH CLUSTERING ORDER BY ( type ASC, search_text ASC, id DESC, customer_id DESC); | ||
251 | + | ||
252 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.asset_by_customer_and_search_text AS | ||
253 | + SELECT * | ||
254 | + from thingsboard.asset | ||
255 | + WHERE tenant_id IS NOT NULL AND customer_id IS NOT NULL AND type IS NOT NULL AND search_text IS NOT NULL AND id IS NOT NULL | ||
256 | + PRIMARY KEY ( customer_id, tenant_id, search_text, id, type ) | ||
257 | + WITH CLUSTERING ORDER BY ( tenant_id DESC, search_text ASC, id DESC ); | ||
258 | + | ||
259 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.asset_by_customer_by_type_and_search_text AS | ||
260 | + SELECT * | ||
261 | + from thingsboard.asset | ||
262 | + WHERE tenant_id IS NOT NULL AND customer_id IS NOT NULL AND type IS NOT NULL AND search_text IS NOT NULL AND id IS NOT NULL | ||
263 | + PRIMARY KEY ( customer_id, tenant_id, type, search_text, id ) | ||
264 | + WITH CLUSTERING ORDER BY ( tenant_id DESC, type ASC, search_text ASC, id DESC ); | ||
265 | + | ||
266 | +CREATE TABLE IF NOT EXISTS thingsboard.entity_subtype ( | ||
267 | + tenant_id timeuuid, | ||
268 | + entity_type text, // (DEVICE, ASSET) | ||
269 | + type text, | ||
270 | + PRIMARY KEY (tenant_id, entity_type, type) | ||
271 | +); | ||
272 | + | ||
273 | +CREATE TABLE IF NOT EXISTS thingsboard.alarm ( | ||
274 | + id timeuuid, | ||
275 | + tenant_id timeuuid, | ||
276 | + type text, | ||
277 | + originator_id timeuuid, | ||
278 | + originator_type text, | ||
279 | + severity text, | ||
280 | + status text, | ||
281 | + start_ts bigint, | ||
282 | + end_ts bigint, | ||
283 | + ack_ts bigint, | ||
284 | + clear_ts bigint, | ||
285 | + details text, | ||
286 | + propagate boolean, | ||
287 | + PRIMARY KEY ((tenant_id, originator_id, originator_type), type, id) | ||
288 | +) WITH CLUSTERING ORDER BY ( type ASC, id DESC); | ||
289 | + | ||
290 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.alarm_by_id AS | ||
291 | + SELECT * | ||
292 | + from thingsboard.alarm | ||
293 | + WHERE tenant_id IS NOT NULL AND originator_id IS NOT NULL AND originator_type IS NOT NULL AND type IS NOT NULL | ||
294 | + AND type IS NOT NULL AND id IS NOT NULL | ||
295 | + PRIMARY KEY (id, tenant_id, originator_id, originator_type, type) | ||
296 | + WITH CLUSTERING ORDER BY ( tenant_id ASC, originator_id ASC, originator_type ASC, type ASC); | ||
297 | + | ||
298 | +CREATE TABLE IF NOT EXISTS thingsboard.relation ( | ||
299 | + from_id timeuuid, | ||
300 | + from_type text, | ||
301 | + to_id timeuuid, | ||
302 | + to_type text, | ||
303 | + relation_type_group text, | ||
304 | + relation_type text, | ||
305 | + additional_info text, | ||
306 | + PRIMARY KEY ((from_id, from_type), relation_type_group, relation_type, to_id, to_type) | ||
307 | +) WITH CLUSTERING ORDER BY ( relation_type_group ASC, relation_type ASC, to_id ASC, to_type ASC); | ||
308 | + | ||
309 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.relation_by_type_and_child_type AS | ||
310 | + SELECT * | ||
311 | + from thingsboard.relation | ||
312 | + WHERE from_id IS NOT NULL AND from_type IS NOT NULL AND relation_type_group IS NOT NULL AND relation_type IS NOT NULL AND to_id IS NOT NULL AND to_type IS NOT NULL | ||
313 | + PRIMARY KEY ((from_id, from_type), relation_type_group, relation_type, to_type, to_id) | ||
314 | + WITH CLUSTERING ORDER BY ( relation_type_group ASC, relation_type ASC, to_type ASC, to_id DESC); | ||
315 | + | ||
316 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.reverse_relation AS | ||
317 | + SELECT * | ||
318 | + from thingsboard.relation | ||
319 | + WHERE from_id IS NOT NULL AND from_type IS NOT NULL AND relation_type_group IS NOT NULL AND relation_type IS NOT NULL AND to_id IS NOT NULL AND to_type IS NOT NULL | ||
320 | + PRIMARY KEY ((to_id, to_type), relation_type_group, relation_type, from_id, from_type) | ||
321 | + WITH CLUSTERING ORDER BY ( relation_type_group ASC, relation_type ASC, from_id ASC, from_type ASC); | ||
322 | + | ||
323 | +CREATE TABLE IF NOT EXISTS thingsboard.widgets_bundle ( | ||
324 | + id timeuuid, | ||
325 | + tenant_id timeuuid, | ||
326 | + alias text, | ||
327 | + title text, | ||
328 | + search_text text, | ||
329 | + image blob, | ||
330 | + PRIMARY KEY (id, tenant_id) | ||
331 | +); | ||
332 | + | ||
333 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.widgets_bundle_by_tenant_and_search_text AS | ||
334 | + SELECT * | ||
335 | + from thingsboard.widgets_bundle | ||
336 | + WHERE tenant_id IS NOT NULL AND search_text IS NOT NULL AND id IS NOT NULL | ||
337 | + PRIMARY KEY ( tenant_id, search_text, id ) | ||
338 | + WITH CLUSTERING ORDER BY ( search_text ASC, id DESC ); | ||
339 | + | ||
340 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.widgets_bundle_by_tenant_and_alias AS | ||
341 | + SELECT * | ||
342 | + from thingsboard.widgets_bundle | ||
343 | + WHERE tenant_id IS NOT NULL AND alias IS NOT NULL AND id IS NOT NULL | ||
344 | + PRIMARY KEY ( tenant_id, alias, id ) | ||
345 | + WITH CLUSTERING ORDER BY ( alias ASC, id DESC ); | ||
346 | + | ||
347 | +CREATE TABLE IF NOT EXISTS thingsboard.widget_type ( | ||
348 | + id timeuuid, | ||
349 | + tenant_id timeuuid, | ||
350 | + bundle_alias text, | ||
351 | + alias text, | ||
352 | + name text, | ||
353 | + descriptor text, | ||
354 | + PRIMARY KEY (id, tenant_id, bundle_alias) | ||
355 | +); | ||
356 | + | ||
357 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.widget_type_by_tenant_and_aliases AS | ||
358 | + SELECT * | ||
359 | + from thingsboard.widget_type | ||
360 | + WHERE tenant_id IS NOT NULL AND bundle_alias IS NOT NULL AND alias IS NOT NULL AND id IS NOT NULL | ||
361 | + PRIMARY KEY ( tenant_id, bundle_alias, alias, id ) | ||
362 | + WITH CLUSTERING ORDER BY ( bundle_alias ASC, alias ASC, id DESC ); | ||
363 | + | ||
364 | +CREATE TABLE IF NOT EXISTS thingsboard.dashboard ( | ||
365 | + id timeuuid, | ||
366 | + tenant_id timeuuid, | ||
367 | + title text, | ||
368 | + search_text text, | ||
369 | + assigned_customers text, | ||
370 | + configuration text, | ||
371 | + PRIMARY KEY (id, tenant_id) | ||
372 | +); | ||
373 | + | ||
374 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.dashboard_by_tenant_and_search_text AS | ||
375 | + SELECT * | ||
376 | + from thingsboard.dashboard | ||
377 | + WHERE tenant_id IS NOT NULL AND search_text IS NOT NULL AND id IS NOT NULL | ||
378 | + PRIMARY KEY ( tenant_id, search_text, id ) | ||
379 | + WITH CLUSTERING ORDER BY ( search_text ASC, id DESC ); | ||
380 | + | ||
381 | +CREATE TABLE IF NOT EXISTS thingsboard.attributes_kv_cf ( | ||
382 | + entity_type text, // (DEVICE, CUSTOMER, TENANT) | ||
383 | + entity_id timeuuid, | ||
384 | + attribute_type text, // (CLIENT_SIDE, SHARED, SERVER_SIDE) | ||
385 | + attribute_key text, | ||
386 | + bool_v boolean, | ||
387 | + str_v text, | ||
388 | + long_v bigint, | ||
389 | + dbl_v double, | ||
390 | + last_update_ts bigint, | ||
391 | + PRIMARY KEY ((entity_type, entity_id, attribute_type), attribute_key) | ||
392 | +) WITH compaction = { 'class' : 'LeveledCompactionStrategy' }; | ||
393 | + | ||
394 | +CREATE TABLE IF NOT EXISTS thingsboard.component_descriptor ( | ||
395 | + id timeuuid, | ||
396 | + type text, | ||
397 | + scope text, | ||
398 | + name text, | ||
399 | + search_text text, | ||
400 | + clazz text, | ||
401 | + configuration_descriptor text, | ||
402 | + actions text, | ||
403 | + PRIMARY KEY (clazz, id, type, scope) | ||
404 | +); | ||
405 | + | ||
406 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.component_desc_by_type_search_text AS | ||
407 | + SELECT * | ||
408 | + from thingsboard.component_descriptor | ||
409 | + WHERE type IS NOT NULL AND scope IS NOT NULL AND search_text IS NOT NULL AND id IS NOT NULL AND clazz IS NOT NULL | ||
410 | + PRIMARY KEY ( type, search_text, id, clazz, scope) | ||
411 | + WITH CLUSTERING ORDER BY ( search_text DESC); | ||
412 | + | ||
413 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.component_desc_by_scope_type_search_text AS | ||
414 | + SELECT * | ||
415 | + from thingsboard.component_descriptor | ||
416 | + WHERE type IS NOT NULL AND scope IS NOT NULL AND search_text IS NOT NULL AND id IS NOT NULL AND clazz IS NOT NULL | ||
417 | + PRIMARY KEY ( (scope, type), search_text, id, clazz) | ||
418 | + WITH CLUSTERING ORDER BY ( search_text DESC); | ||
419 | + | ||
420 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.component_desc_by_id AS | ||
421 | + SELECT * | ||
422 | + from thingsboard.component_descriptor | ||
423 | + WHERE type IS NOT NULL AND scope IS NOT NULL AND id IS NOT NULL AND clazz IS NOT NULL | ||
424 | + PRIMARY KEY ( id, clazz, scope, type ) | ||
425 | + WITH CLUSTERING ORDER BY ( clazz ASC, scope ASC, type DESC); | ||
426 | + | ||
427 | +CREATE TABLE IF NOT EXISTS thingsboard.event ( | ||
428 | + tenant_id timeuuid, // tenant or system | ||
429 | + id timeuuid, | ||
430 | + event_type text, | ||
431 | + event_uid text, | ||
432 | + entity_type text, | ||
433 | + entity_id timeuuid, | ||
434 | + body text, | ||
435 | + PRIMARY KEY ((tenant_id, entity_type, entity_id), event_type, event_uid) | ||
436 | +); | ||
437 | + | ||
438 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.event_by_type_and_id AS | ||
439 | + SELECT * | ||
440 | + FROM thingsboard.event | ||
441 | + WHERE tenant_id IS NOT NULL AND entity_type IS NOT NULL AND entity_id IS NOT NULL AND id IS NOT NULL | ||
442 | + AND event_type IS NOT NULL AND event_uid IS NOT NULL | ||
443 | + PRIMARY KEY ((tenant_id, entity_type, entity_id), event_type, id, event_uid) | ||
444 | + WITH CLUSTERING ORDER BY (event_type ASC, id ASC, event_uid ASC); | ||
445 | + | ||
446 | + | ||
447 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.event_by_id AS | ||
448 | + SELECT * | ||
449 | + FROM thingsboard.event | ||
450 | + WHERE tenant_id IS NOT NULL AND entity_type IS NOT NULL AND entity_id IS NOT NULL AND id IS NOT NULL | ||
451 | + AND event_type IS NOT NULL AND event_uid IS NOT NULL | ||
452 | + PRIMARY KEY ((tenant_id, entity_type, entity_id), id, event_type, event_uid) | ||
453 | + WITH CLUSTERING ORDER BY (id ASC, event_type ASC, event_uid ASC); | ||
454 | + | ||
455 | +CREATE TABLE IF NOT EXISTS thingsboard.audit_log_by_entity_id ( | ||
456 | + tenant_id timeuuid, | ||
457 | + id timeuuid, | ||
458 | + customer_id timeuuid, | ||
459 | + entity_id timeuuid, | ||
460 | + entity_type text, | ||
461 | + entity_name text, | ||
462 | + user_id timeuuid, | ||
463 | + user_name text, | ||
464 | + action_type text, | ||
465 | + action_data text, | ||
466 | + action_status text, | ||
467 | + action_failure_details text, | ||
468 | + PRIMARY KEY ((tenant_id, entity_id, entity_type), id) | ||
469 | +); | ||
470 | + | ||
471 | +CREATE TABLE IF NOT EXISTS thingsboard.audit_log_by_customer_id ( | ||
472 | + tenant_id timeuuid, | ||
473 | + id timeuuid, | ||
474 | + customer_id timeuuid, | ||
475 | + entity_id timeuuid, | ||
476 | + entity_type text, | ||
477 | + entity_name text, | ||
478 | + user_id timeuuid, | ||
479 | + user_name text, | ||
480 | + action_type text, | ||
481 | + action_data text, | ||
482 | + action_status text, | ||
483 | + action_failure_details text, | ||
484 | + PRIMARY KEY ((tenant_id, customer_id), id) | ||
485 | +); | ||
486 | + | ||
487 | +CREATE TABLE IF NOT EXISTS thingsboard.audit_log_by_user_id ( | ||
488 | + tenant_id timeuuid, | ||
489 | + id timeuuid, | ||
490 | + customer_id timeuuid, | ||
491 | + entity_id timeuuid, | ||
492 | + entity_type text, | ||
493 | + entity_name text, | ||
494 | + user_id timeuuid, | ||
495 | + user_name text, | ||
496 | + action_type text, | ||
497 | + action_data text, | ||
498 | + action_status text, | ||
499 | + action_failure_details text, | ||
500 | + PRIMARY KEY ((tenant_id, user_id), id) | ||
501 | +); | ||
502 | + | ||
503 | +CREATE TABLE IF NOT EXISTS thingsboard.audit_log_by_tenant_id ( | ||
504 | + tenant_id timeuuid, | ||
505 | + id timeuuid, | ||
506 | + partition bigint, | ||
507 | + customer_id timeuuid, | ||
508 | + entity_id timeuuid, | ||
509 | + entity_type text, | ||
510 | + entity_name text, | ||
511 | + user_id timeuuid, | ||
512 | + user_name text, | ||
513 | + action_type text, | ||
514 | + action_data text, | ||
515 | + action_status text, | ||
516 | + action_failure_details text, | ||
517 | + PRIMARY KEY ((tenant_id, partition), id) | ||
518 | +); | ||
519 | + | ||
520 | +CREATE TABLE IF NOT EXISTS thingsboard.audit_log_by_tenant_id_partitions ( | ||
521 | + tenant_id timeuuid, | ||
522 | + partition bigint, | ||
523 | + PRIMARY KEY (( tenant_id ), partition) | ||
524 | +) WITH CLUSTERING ORDER BY ( partition ASC ) | ||
525 | +AND compaction = { 'class' : 'LeveledCompactionStrategy' }; | ||
526 | + | ||
527 | +CREATE TABLE IF NOT EXISTS thingsboard.msg_queue ( | ||
528 | + node_id timeuuid, | ||
529 | + cluster_partition bigint, | ||
530 | + ts_partition bigint, | ||
531 | + ts bigint, | ||
532 | + msg blob, | ||
533 | + PRIMARY KEY ((node_id, cluster_partition, ts_partition), ts)) | ||
534 | +WITH CLUSTERING ORDER BY (ts DESC) | ||
535 | +AND compaction = { | ||
536 | + 'class': 'org.apache.cassandra.db.compaction.DateTieredCompactionStrategy', | ||
537 | + 'min_threshold': '5', | ||
538 | + 'base_time_seconds': '43200', | ||
539 | + 'max_window_size_seconds': '43200', | ||
540 | + 'tombstone_threshold': '0.9', | ||
541 | + 'unchecked_tombstone_compaction': 'true' | ||
542 | +}; | ||
543 | + | ||
544 | +CREATE TABLE IF NOT EXISTS thingsboard.msg_ack_queue ( | ||
545 | + node_id timeuuid, | ||
546 | + cluster_partition bigint, | ||
547 | + ts_partition bigint, | ||
548 | + msg_id timeuuid, | ||
549 | + PRIMARY KEY ((node_id, cluster_partition, ts_partition), msg_id)) | ||
550 | +WITH CLUSTERING ORDER BY (msg_id DESC) | ||
551 | +AND compaction = { | ||
552 | + 'class': 'org.apache.cassandra.db.compaction.DateTieredCompactionStrategy', | ||
553 | + 'min_threshold': '5', | ||
554 | + 'base_time_seconds': '43200', | ||
555 | + 'max_window_size_seconds': '43200', | ||
556 | + 'tombstone_threshold': '0.9', | ||
557 | + 'unchecked_tombstone_compaction': 'true' | ||
558 | +}; | ||
559 | + | ||
560 | +CREATE TABLE IF NOT EXISTS thingsboard.processed_msg_partitions ( | ||
561 | + node_id timeuuid, | ||
562 | + cluster_partition bigint, | ||
563 | + ts_partition bigint, | ||
564 | + PRIMARY KEY ((node_id, cluster_partition), ts_partition)) | ||
565 | +WITH CLUSTERING ORDER BY (ts_partition DESC) | ||
566 | +AND compaction = { | ||
567 | + 'class': 'org.apache.cassandra.db.compaction.DateTieredCompactionStrategy', | ||
568 | + 'min_threshold': '5', | ||
569 | + 'base_time_seconds': '43200', | ||
570 | + 'max_window_size_seconds': '43200', | ||
571 | + 'tombstone_threshold': '0.9', | ||
572 | + 'unchecked_tombstone_compaction': 'true' | ||
573 | +}; | ||
574 | + | ||
575 | +CREATE TABLE IF NOT EXISTS thingsboard.rule_chain ( | ||
576 | + id uuid, | ||
577 | + tenant_id uuid, | ||
578 | + name text, | ||
579 | + search_text text, | ||
580 | + first_rule_node_id uuid, | ||
581 | + root boolean, | ||
582 | + debug_mode boolean, | ||
583 | + configuration text, | ||
584 | + additional_info text, | ||
585 | + PRIMARY KEY (id, tenant_id) | ||
586 | +); | ||
587 | + | ||
588 | +CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.rule_chain_by_tenant_and_search_text AS | ||
589 | + SELECT * | ||
590 | + from thingsboard.rule_chain | ||
591 | + WHERE tenant_id IS NOT NULL AND search_text IS NOT NULL AND id IS NOT NULL | ||
592 | + PRIMARY KEY ( tenant_id, search_text, id ) | ||
593 | + WITH CLUSTERING ORDER BY ( search_text ASC, id DESC ); | ||
594 | + | ||
595 | +CREATE TABLE IF NOT EXISTS thingsboard.rule_node ( | ||
596 | + id uuid, | ||
597 | + rule_chain_id uuid, | ||
598 | + type text, | ||
599 | + name text, | ||
600 | + debug_mode boolean, | ||
601 | + search_text text, | ||
602 | + configuration text, | ||
603 | + additional_info text, | ||
604 | + PRIMARY KEY (id) | ||
605 | +); |
1 | +-- | ||
2 | +-- Copyright © 2016-2018 The Thingsboard Authors | ||
3 | +-- | ||
4 | +-- Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | +-- you may not use this file except in compliance with the License. | ||
6 | +-- You may obtain a copy of the License at | ||
7 | +-- | ||
8 | +-- http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | +-- | ||
10 | +-- Unless required by applicable law or agreed to in writing, software | ||
11 | +-- distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | +-- See the License for the specific language governing permissions and | ||
14 | +-- limitations under the License. | ||
15 | +-- | ||
16 | + | ||
17 | +CREATE KEYSPACE IF NOT EXISTS thingsboard | ||
18 | +WITH replication = { | ||
19 | + 'class' : 'SimpleStrategy', | ||
20 | + 'replication_factor' : 1 | ||
21 | +}; | ||
22 | + | ||
23 | +CREATE TABLE IF NOT EXISTS thingsboard.ts_kv_cf ( | ||
24 | + entity_type text, // (DEVICE, CUSTOMER, TENANT) | ||
25 | + entity_id timeuuid, | ||
26 | + key text, | ||
27 | + partition bigint, | ||
28 | + ts bigint, | ||
29 | + bool_v boolean, | ||
30 | + str_v text, | ||
31 | + long_v bigint, | ||
32 | + dbl_v double, | ||
33 | + PRIMARY KEY (( entity_type, entity_id, key, partition ), ts) | ||
34 | +); | ||
35 | + | ||
36 | +CREATE TABLE IF NOT EXISTS thingsboard.ts_kv_partitions_cf ( | ||
37 | + entity_type text, // (DEVICE, CUSTOMER, TENANT) | ||
38 | + entity_id timeuuid, | ||
39 | + key text, | ||
40 | + partition bigint, | ||
41 | + PRIMARY KEY (( entity_type, entity_id, key ), partition) | ||
42 | +) WITH CLUSTERING ORDER BY ( partition ASC ) | ||
43 | + AND compaction = { 'class' : 'LeveledCompactionStrategy' }; | ||
44 | + | ||
45 | +CREATE TABLE IF NOT EXISTS thingsboard.ts_kv_latest_cf ( | ||
46 | + entity_type text, // (DEVICE, CUSTOMER, TENANT) | ||
47 | + entity_id timeuuid, | ||
48 | + key text, | ||
49 | + ts bigint, | ||
50 | + bool_v boolean, | ||
51 | + str_v text, | ||
52 | + long_v bigint, | ||
53 | + dbl_v double, | ||
54 | + PRIMARY KEY (( entity_type, entity_id ), key) | ||
55 | +) WITH compaction = { 'class' : 'LeveledCompactionStrategy' }; |
1 | +-- | ||
2 | +-- Copyright © 2016-2018 The Thingsboard Authors | ||
3 | +-- | ||
4 | +-- Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | +-- you may not use this file except in compliance with the License. | ||
6 | +-- You may obtain a copy of the License at | ||
7 | +-- | ||
8 | +-- http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | +-- | ||
10 | +-- Unless required by applicable law or agreed to in writing, software | ||
11 | +-- distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | +-- See the License for the specific language governing permissions and | ||
14 | +-- limitations under the License. | ||
15 | +-- | ||
16 | + | ||
17 | + | ||
18 | +CREATE TABLE IF NOT EXISTS admin_settings ( | ||
19 | + id varchar(31) NOT NULL CONSTRAINT admin_settings_pkey PRIMARY KEY, | ||
20 | + json_value varchar, | ||
21 | + key varchar(255) | ||
22 | +); | ||
23 | + | ||
24 | +CREATE TABLE IF NOT EXISTS alarm ( | ||
25 | + id varchar(31) NOT NULL CONSTRAINT alarm_pkey PRIMARY KEY, | ||
26 | + ack_ts bigint, | ||
27 | + clear_ts bigint, | ||
28 | + additional_info varchar, | ||
29 | + end_ts bigint, | ||
30 | + originator_id varchar(31), | ||
31 | + originator_type integer, | ||
32 | + propagate boolean, | ||
33 | + severity varchar(255), | ||
34 | + start_ts bigint, | ||
35 | + status varchar(255), | ||
36 | + tenant_id varchar(31), | ||
37 | + type varchar(255) | ||
38 | +); | ||
39 | + | ||
40 | +CREATE TABLE IF NOT EXISTS asset ( | ||
41 | + id varchar(31) NOT NULL CONSTRAINT asset_pkey PRIMARY KEY, | ||
42 | + additional_info varchar, | ||
43 | + customer_id varchar(31), | ||
44 | + name varchar(255), | ||
45 | + search_text varchar(255), | ||
46 | + tenant_id varchar(31), | ||
47 | + type varchar(255) | ||
48 | +); | ||
49 | + | ||
50 | +CREATE TABLE IF NOT EXISTS audit_log ( | ||
51 | + id varchar(31) NOT NULL CONSTRAINT audit_log_pkey PRIMARY KEY, | ||
52 | + tenant_id varchar(31), | ||
53 | + customer_id varchar(31), | ||
54 | + entity_id varchar(31), | ||
55 | + entity_type varchar(255), | ||
56 | + entity_name varchar(255), | ||
57 | + user_id varchar(31), | ||
58 | + user_name varchar(255), | ||
59 | + action_type varchar(255), | ||
60 | + action_data varchar(1000000), | ||
61 | + action_status varchar(255), | ||
62 | + action_failure_details varchar(1000000) | ||
63 | +); | ||
64 | + | ||
65 | +CREATE TABLE IF NOT EXISTS attribute_kv ( | ||
66 | + entity_type varchar(255), | ||
67 | + entity_id varchar(31), | ||
68 | + attribute_type varchar(255), | ||
69 | + attribute_key varchar(255), | ||
70 | + bool_v boolean, | ||
71 | + str_v varchar(10000000), | ||
72 | + long_v bigint, | ||
73 | + dbl_v double precision, | ||
74 | + last_update_ts bigint, | ||
75 | + CONSTRAINT attribute_kv_unq_key UNIQUE (entity_type, entity_id, attribute_type, attribute_key) | ||
76 | +); | ||
77 | + | ||
78 | +CREATE TABLE IF NOT EXISTS component_descriptor ( | ||
79 | + id varchar(31) NOT NULL CONSTRAINT component_descriptor_pkey PRIMARY KEY, | ||
80 | + actions varchar(255), | ||
81 | + clazz varchar, | ||
82 | + configuration_descriptor varchar, | ||
83 | + name varchar(255), | ||
84 | + scope varchar(255), | ||
85 | + search_text varchar(255), | ||
86 | + type varchar(255) | ||
87 | +); | ||
88 | + | ||
89 | +CREATE TABLE IF NOT EXISTS customer ( | ||
90 | + id varchar(31) NOT NULL CONSTRAINT customer_pkey PRIMARY KEY, | ||
91 | + additional_info varchar, | ||
92 | + address varchar, | ||
93 | + address2 varchar, | ||
94 | + city varchar(255), | ||
95 | + country varchar(255), | ||
96 | + email varchar(255), | ||
97 | + phone varchar(255), | ||
98 | + search_text varchar(255), | ||
99 | + state varchar(255), | ||
100 | + tenant_id varchar(31), | ||
101 | + title varchar(255), | ||
102 | + zip varchar(255) | ||
103 | +); | ||
104 | + | ||
105 | +CREATE TABLE IF NOT EXISTS dashboard ( | ||
106 | + id varchar(31) NOT NULL CONSTRAINT dashboard_pkey PRIMARY KEY, | ||
107 | + configuration varchar(10000000), | ||
108 | + assigned_customers varchar(1000000), | ||
109 | + search_text varchar(255), | ||
110 | + tenant_id varchar(31), | ||
111 | + title varchar(255) | ||
112 | +); | ||
113 | + | ||
114 | +CREATE TABLE IF NOT EXISTS device ( | ||
115 | + id varchar(31) NOT NULL CONSTRAINT device_pkey PRIMARY KEY, | ||
116 | + additional_info varchar, | ||
117 | + customer_id varchar(31), | ||
118 | + type varchar(255), | ||
119 | + name varchar(255), | ||
120 | + search_text varchar(255), | ||
121 | + tenant_id varchar(31) | ||
122 | +); | ||
123 | + | ||
124 | +CREATE TABLE IF NOT EXISTS device_credentials ( | ||
125 | + id varchar(31) NOT NULL CONSTRAINT device_credentials_pkey PRIMARY KEY, | ||
126 | + credentials_id varchar, | ||
127 | + credentials_type varchar(255), | ||
128 | + credentials_value varchar, | ||
129 | + device_id varchar(31) | ||
130 | +); | ||
131 | + | ||
132 | +CREATE TABLE IF NOT EXISTS event ( | ||
133 | + id varchar(31) NOT NULL CONSTRAINT event_pkey PRIMARY KEY, | ||
134 | + body varchar, | ||
135 | + entity_id varchar(31), | ||
136 | + entity_type varchar(255), | ||
137 | + event_type varchar(255), | ||
138 | + event_uid varchar(255), | ||
139 | + tenant_id varchar(31), | ||
140 | + CONSTRAINT event_unq_key UNIQUE (tenant_id, entity_type, entity_id, event_type, event_uid) | ||
141 | +); | ||
142 | + | ||
143 | +CREATE TABLE IF NOT EXISTS relation ( | ||
144 | + from_id varchar(31), | ||
145 | + from_type varchar(255), | ||
146 | + to_id varchar(31), | ||
147 | + to_type varchar(255), | ||
148 | + relation_type_group varchar(255), | ||
149 | + relation_type varchar(255), | ||
150 | + additional_info varchar, | ||
151 | + CONSTRAINT relation_unq_key UNIQUE (from_id, from_type, relation_type_group, relation_type, to_id, to_type) | ||
152 | +); | ||
153 | + | ||
154 | +CREATE TABLE IF NOT EXISTS tb_user ( | ||
155 | + id varchar(31) NOT NULL CONSTRAINT tb_user_pkey PRIMARY KEY, | ||
156 | + additional_info varchar, | ||
157 | + authority varchar(255), | ||
158 | + customer_id varchar(31), | ||
159 | + email varchar(255) UNIQUE, | ||
160 | + first_name varchar(255), | ||
161 | + last_name varchar(255), | ||
162 | + search_text varchar(255), | ||
163 | + tenant_id varchar(31) | ||
164 | +); | ||
165 | + | ||
166 | +CREATE TABLE IF NOT EXISTS tenant ( | ||
167 | + id varchar(31) NOT NULL CONSTRAINT tenant_pkey PRIMARY KEY, | ||
168 | + additional_info varchar, | ||
169 | + address varchar, | ||
170 | + address2 varchar, | ||
171 | + city varchar(255), | ||
172 | + country varchar(255), | ||
173 | + email varchar(255), | ||
174 | + phone varchar(255), | ||
175 | + region varchar(255), | ||
176 | + search_text varchar(255), | ||
177 | + state varchar(255), | ||
178 | + title varchar(255), | ||
179 | + zip varchar(255) | ||
180 | +); | ||
181 | + | ||
182 | +CREATE TABLE IF NOT EXISTS user_credentials ( | ||
183 | + id varchar(31) NOT NULL CONSTRAINT user_credentials_pkey PRIMARY KEY, | ||
184 | + activate_token varchar(255) UNIQUE, | ||
185 | + enabled boolean, | ||
186 | + password varchar(255), | ||
187 | + reset_token varchar(255) UNIQUE, | ||
188 | + user_id varchar(31) UNIQUE | ||
189 | +); | ||
190 | + | ||
191 | +CREATE TABLE IF NOT EXISTS widget_type ( | ||
192 | + id varchar(31) NOT NULL CONSTRAINT widget_type_pkey PRIMARY KEY, | ||
193 | + alias varchar(255), | ||
194 | + bundle_alias varchar(255), | ||
195 | + descriptor varchar(1000000), | ||
196 | + name varchar(255), | ||
197 | + tenant_id varchar(31) | ||
198 | +); | ||
199 | + | ||
200 | +CREATE TABLE IF NOT EXISTS widgets_bundle ( | ||
201 | + id varchar(31) NOT NULL CONSTRAINT widgets_bundle_pkey PRIMARY KEY, | ||
202 | + alias varchar(255), | ||
203 | + search_text varchar(255), | ||
204 | + tenant_id varchar(31), | ||
205 | + title varchar(255) | ||
206 | +); | ||
207 | + | ||
208 | +CREATE TABLE IF NOT EXISTS rule_chain ( | ||
209 | + id varchar(31) NOT NULL CONSTRAINT rule_chain_pkey PRIMARY KEY, | ||
210 | + additional_info varchar, | ||
211 | + configuration varchar(10000000), | ||
212 | + name varchar(255), | ||
213 | + first_rule_node_id varchar(31), | ||
214 | + root boolean, | ||
215 | + debug_mode boolean, | ||
216 | + search_text varchar(255), | ||
217 | + tenant_id varchar(31) | ||
218 | +); | ||
219 | + | ||
220 | +CREATE TABLE IF NOT EXISTS rule_node ( | ||
221 | + id varchar(31) NOT NULL CONSTRAINT rule_node_pkey PRIMARY KEY, | ||
222 | + rule_chain_id varchar(31), | ||
223 | + additional_info varchar, | ||
224 | + configuration varchar(10000000), | ||
225 | + type varchar(255), | ||
226 | + name varchar(255), | ||
227 | + debug_mode boolean, | ||
228 | + search_text varchar(255) | ||
229 | +); |
dao/src/main/resources/sql/schema-ts.sql
0 → 100644
1 | +-- | ||
2 | +-- Copyright © 2016-2018 The Thingsboard Authors | ||
3 | +-- | ||
4 | +-- Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | +-- you may not use this file except in compliance with the License. | ||
6 | +-- You may obtain a copy of the License at | ||
7 | +-- | ||
8 | +-- http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | +-- | ||
10 | +-- Unless required by applicable law or agreed to in writing, software | ||
11 | +-- distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | +-- See the License for the specific language governing permissions and | ||
14 | +-- limitations under the License. | ||
15 | +-- | ||
16 | + | ||
17 | +CREATE TABLE IF NOT EXISTS ts_kv ( | ||
18 | + entity_type varchar(255) NOT NULL, | ||
19 | + entity_id varchar(31) NOT NULL, | ||
20 | + key varchar(255) NOT NULL, | ||
21 | + ts bigint NOT NULL, | ||
22 | + bool_v boolean, | ||
23 | + str_v varchar(10000000), | ||
24 | + long_v bigint, | ||
25 | + dbl_v double precision, | ||
26 | + CONSTRAINT ts_kv_unq_key UNIQUE (entity_type, entity_id, key, ts) | ||
27 | +); | ||
28 | + | ||
29 | +CREATE TABLE IF NOT EXISTS ts_kv_latest ( | ||
30 | + entity_type varchar(255) NOT NULL, | ||
31 | + entity_id varchar(31) NOT NULL, | ||
32 | + key varchar(255) NOT NULL, | ||
33 | + ts bigint NOT NULL, | ||
34 | + bool_v boolean, | ||
35 | + str_v varchar(10000000), | ||
36 | + long_v bigint, | ||
37 | + dbl_v double precision, | ||
38 | + CONSTRAINT ts_kv_latest_unq_key UNIQUE (entity_type, entity_id, key) | ||
39 | +); |