/* * Licensed 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. */ package com.facebook.presto.raptor.metadata; import org.skife.jdbi.v2.sqlobject.SqlUpdate; public interface SchemaDao { @SqlUpdate("CREATE TABLE IF NOT EXISTS distributions (\n" + " distribution_id BIGINT PRIMARY KEY AUTO_INCREMENT,\n" + " distribution_name VARCHAR(255),\n" + " column_types TEXT NOT NULL,\n" + " bucket_count INT NOT NULL,\n" + " UNIQUE (distribution_name)\n" + ")") void createTableDistributions(); @SqlUpdate("CREATE TABLE IF NOT EXISTS tables (\n" + " table_id BIGINT PRIMARY KEY AUTO_INCREMENT,\n" + " schema_name VARCHAR(255) NOT NULL,\n" + " table_name VARCHAR(255) NOT NULL,\n" + " temporal_column_id BIGINT,\n" + " compaction_enabled BOOLEAN NOT NULL,\n" + " organization_enabled BOOLEAN NOT NULL,\n" + " distribution_id BIGINT,\n" + " create_time BIGINT NOT NULL,\n" + " update_time BIGINT NOT NULL,\n" + " table_version BIGINT NOT NULL,\n" + " shard_count BIGINT NOT NULL,\n" + " row_count BIGINT NOT NULL,\n" + " compressed_size BIGINT NOT NULL,\n" + " uncompressed_size BIGINT NOT NULL,\n" + " maintenance_blocked DATETIME,\n" + " UNIQUE (schema_name, table_name),\n" + " UNIQUE (distribution_id, table_id),\n" + " UNIQUE (maintenance_blocked, table_id),\n" + " FOREIGN KEY (distribution_id) REFERENCES distributions (distribution_id)\n" + ")") void createTableTables(); @SqlUpdate("CREATE TABLE IF NOT EXISTS columns (\n" + " table_id BIGINT NOT NULL,\n" + " column_id BIGINT NOT NULL,\n" + " column_name VARCHAR(255) NOT NULL,\n" + " ordinal_position INT NOT NULL,\n" + " data_type VARCHAR(255) NOT NULL,\n" + " sort_ordinal_position INT,\n" + " bucket_ordinal_position INT,\n" + " PRIMARY KEY (table_id, column_id),\n" + " UNIQUE (table_id, column_name),\n" + " UNIQUE (table_id, ordinal_position),\n" + " UNIQUE (table_id, sort_ordinal_position),\n" + " UNIQUE (table_id, bucket_ordinal_position),\n" + " FOREIGN KEY (table_id) REFERENCES tables (table_id)\n" + ")") void createTableColumns(); @SqlUpdate("CREATE TABLE IF NOT EXISTS views (\n" + " schema_name VARCHAR(255) NOT NULL,\n" + " table_name VARCHAR(255) NOT NULL,\n" + " data TEXT NOT NULL,\n" + " PRIMARY KEY (schema_name, table_name)\n" + ")") void createTableViews(); @SqlUpdate("CREATE TABLE IF NOT EXISTS nodes (\n" + " node_id INT PRIMARY KEY AUTO_INCREMENT,\n" + " node_identifier VARCHAR(255) NOT NULL,\n" + " UNIQUE (node_identifier)\n" + ")") void createTableNodes(); @SqlUpdate("CREATE TABLE IF NOT EXISTS shards (\n" + " shard_id BIGINT PRIMARY KEY AUTO_INCREMENT,\n" + " shard_uuid BINARY(16) NOT NULL,\n" + " table_id BIGINT NOT NULL,\n" + " bucket_number INT,\n" + " create_time DATETIME NOT NULL,\n" + " row_count BIGINT NOT NULL,\n" + " compressed_size BIGINT NOT NULL,\n" + " uncompressed_size BIGINT NOT NULL,\n" + " UNIQUE (shard_uuid),\n" + // include a covering index organized by table_id " UNIQUE (table_id, bucket_number, shard_id, shard_uuid, create_time, row_count, compressed_size, uncompressed_size),\n" + " FOREIGN KEY (table_id) REFERENCES tables (table_id)\n" + ")") void createTableShards(); @SqlUpdate("CREATE TABLE IF NOT EXISTS shard_nodes (\n" + " shard_id BIGINT NOT NULL,\n" + " node_id INT NOT NULL,\n" + " PRIMARY KEY (shard_id, node_id),\n" + " UNIQUE (node_id, shard_id),\n" + " FOREIGN KEY (shard_id) REFERENCES shards (shard_id),\n" + " FOREIGN KEY (node_id) REFERENCES nodes (node_id)\n" + ")") void createTableShardNodes(); @SqlUpdate("CREATE TABLE IF NOT EXISTS external_batches (\n" + " external_batch_id VARCHAR(255) PRIMARY KEY,\n" + " successful BOOLEAN NOT NULL\n" + ")") void createTableExternalBatches(); @SqlUpdate("CREATE TABLE IF NOT EXISTS transactions (\n" + " transaction_id BIGINT PRIMARY KEY AUTO_INCREMENT,\n" + " successful BOOLEAN,\n" + " start_time DATETIME NOT NULL,\n" + " end_time DATETIME,\n" + " UNIQUE (successful, start_time, transaction_id),\n" + " UNIQUE (end_time, transaction_id, successful)\n" + ")") void createTableTransactions(); @SqlUpdate("CREATE TABLE IF NOT EXISTS created_shards (\n" + " shard_uuid BINARY(16) NOT NULL,\n" + " transaction_id BIGINT NOT NULL,\n" + " PRIMARY KEY (shard_uuid),\n" + " UNIQUE (transaction_id, shard_uuid),\n" + " FOREIGN KEY (transaction_id) REFERENCES transactions (transaction_id)\n" + ")") void createTableCreatedShards(); @SqlUpdate("CREATE TABLE IF NOT EXISTS deleted_shards (\n" + " shard_uuid BINARY(16) PRIMARY KEY,\n" + " delete_time DATETIME NOT NULL,\n" + " UNIQUE (delete_time, shard_uuid)\n" + ")") void createTableDeletedShards(); @SqlUpdate("CREATE TABLE IF NOT EXISTS buckets (\n" + " distribution_id BIGINT NOT NULL,\n" + " bucket_number INT NOT NULL,\n" + " node_id INT NOT NULL,\n" + " PRIMARY KEY (distribution_id, bucket_number),\n" + " UNIQUE (node_id, distribution_id, bucket_number),\n" + " FOREIGN KEY (distribution_id) REFERENCES distributions (distribution_id),\n" + " FOREIGN KEY (node_id) REFERENCES nodes (node_id)\n" + ")") void createTableBuckets(); @SqlUpdate("CREATE TABLE IF NOT EXISTS shard_organizer_jobs (\n" + " node_identifier VARCHAR(255) NOT NULL,\n" + " table_id BIGINT NOT NULL,\n" + " last_start_time BIGINT,\n" + " PRIMARY KEY (node_identifier, table_id),\n" + " UNIQUE (table_id, node_identifier),\n" + " FOREIGN KEY (table_id) REFERENCES tables (table_id)\n" + ")") void createTableShardOrganizerJobs(); }