blob: 70ef436bec1420fd6af81eadccda75ae33abebe9 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<!--
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.
-->
<tns:store xmlns:tns="http://tajo.apache.org/catalogstore" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tajo.apache.org/catalogstore ../DBMSSchemaDefinition.xsd ">
<!--
Catalog base version history
* 13 - 2016-05-10: Apply new type implementation to Schema and Catalog. (TAJO-2129)
* 12 - 2015-09-28: Change the variable name storeType to dataFormat (TAJO-1663)
* 11 - 2015-09-23: Add contents length and file count for partition directory (TAJO-1493)
* 10 - 2015-09-22: Well support for self-describing data formats (TAJO-1832)
* 9 - 2015-09-12: Allow external catalog store for unit testing (TAJO-1813)
* 8 - 2015-09-02: Wrong table type problem in catalog (TAJO-1808)
* 7 - 2015-07-30: Add a column and index for partition keys (TAJO-1346)
* 6 - 2015-07-24: Merge the index branch into the master branch (TAJO-1300)
* 5 - 2015-06-15: Implement TablespaceManager to load Tablespaces (TAJO-1616)
* 4 - 2015-03-27: Partition Schema (TAJO-1284)
* 3 - 2015-03-12: Nested Schema (TAJO-1329)
* 2 - 2014-06-09: First versioning
* 1- Before 2013-03-20
-->
<tns:base version="12">
<tns:objects>
<tns:Object order="0" type="table" name="META">
<tns:sql><![CDATA[CREATE TABLE META (VERSION INT NOT NULL)]]></tns:sql>
</tns:Object>
<tns:Object order="1" type="table" name="TABLESPACES">
<tns:sql><![CDATA[
CREATE TABLE TABLESPACES (
SPACE_ID int NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),
SPACE_NAME VARCHAR(128) NOT NULL CONSTRAINT SPACE_UNIQUE UNIQUE,
SPACE_HANDLER VARCHAR (1024) DEFAULT 'HDFS',
SPACE_URI VARCHAR (4096) NOT NULL,
CONSTRAINT C_SPACE_PK PRIMARY KEY (SPACE_ID)
)]]>
</tns:sql>
</tns:Object>
<tns:Object order="2" type="table" name="DATABASES_">
<tns:sql><![CDATA[
CREATE TABLE DATABASES_ (
DB_ID int NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),
DB_NAME VARCHAR(128) NOT NULL CONSTRAINT DB_NAME_UNIQ UNIQUE,
SPACE_ID INT NOT NULL REFERENCES TABLESPACES (SPACE_ID),
CONSTRAINT DATABASES_PK PRIMARY KEY (DB_ID)
)]]>
</tns:sql>
</tns:Object>
<tns:Object order="3" type="index" name="IDX_DATABASE_DB_NAME" dependsOn="DATABASES_">
<tns:sql><![CDATA[CREATE UNIQUE INDEX idx_database_db_id on DATABASES_ (DB_NAME)]]></tns:sql>
</tns:Object>
<tns:Object order="4" type="table" name="TABLES">
<tns:sql><![CDATA[
CREATE TABLE TABLES (
TID int NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),
DB_ID int NOT NULL REFERENCES DATABASES_ (DB_ID),
TABLE_NAME VARCHAR(128) NOT NULL,
TABLE_TYPE VARCHAR(128) NOT NULL,
PATH VARCHAR(4096),
DATA_FORMAT CHAR(16),
HAS_SELF_DESCRIBE_SCHEMA BOOLEAN,
CONSTRAINT TABLES_PK PRIMARY KEY (TID),
CONSTRAINT C_TABLE_ID_UNIQ UNIQUE (DB_ID, TABLE_NAME)
)]]>
</tns:sql>
</tns:Object>
<tns:Object order="5" type="index" name="IDX_TABLES_TID" dependsOn="TABLES">
<tns:sql><![CDATA[CREATE UNIQUE INDEX idx_tables_tid on TABLES (TID)]]></tns:sql>
</tns:Object>
<tns:Object order="6" type="index" name="IDX_TABLES_NAME" dependsOn="TABLES">
<tns:sql><![CDATA[CREATE UNIQUE INDEX idx_tables_name on TABLES (DB_ID, TABLE_NAME)]]></tns:sql>
</tns:Object>
<tns:Object order="7" type="table" name="COLUMNS">
<tns:sql><![CDATA[
CREATE TABLE COLUMNS (
TID INT NOT NULL REFERENCES TABLES (TID) ON DELETE CASCADE,
COLUMN_NAME VARCHAR(128) NOT NULL,
ORDINAL_POSITION INTEGER NOT NULL,
DATA_TYPE VARCHAR(8192),
CONSTRAINT COLUMNS_PK PRIMARY KEY (TID, ORDINAL_POSITION)
)]]>
</tns:sql>
<!--
The constraint for guaranteeing the unique column name should be added to COLUMNS table. However, it can
make this table's schema complicated due to nested fields. Fortunately, columns are always converted
into 'schema' which has a functionality of checking duplicated column names.
-->
</tns:Object>
<tns:Object order="8" type="index" name="IDX_FK_COLUMNS_TABLE_NAME" dependsOn="COLUMNS">
<tns:sql><![CDATA[CREATE UNIQUE INDEX idx_fk_columns_table_name on COLUMNS (TID, ORDINAL_POSITION)]]></tns:sql>
</tns:Object>
<tns:Object order="9" type="table" name="OPTIONS">
<tns:sql><![CDATA[
CREATE TABLE OPTIONS (
TID INT NOT NULL REFERENCES TABLES (TID) ON DELETE CASCADE,
KEY_ VARCHAR(255) NOT NULL,
VALUE_ VARCHAR(4000) NOT NULL,
CONSTRAINT OPTIONS_PKEY PRIMARY KEY (TID, KEY_)
)]]>
</tns:sql>
</tns:Object>
<tns:Object order="10" type="index" name="IDX_OPTIONS_KEY" dependsOn="OPTIONS">
<tns:sql><![CDATA[CREATE INDEX idx_options_key on OPTIONS (TID)]]></tns:sql>
</tns:Object>
<tns:Object order="11" type="table" name="INDEXES">
<tns:sql><![CDATA[
CREATE TABLE INDEXES (
INDEX_ID INT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),
DB_ID INT NOT NULL REFERENCES DATABASES_ (DB_ID) ON DELETE CASCADE,
TID INT NOT NULL REFERENCES TABLES (TID) ON DELETE CASCADE,
INDEX_NAME VARCHAR(128) NOT NULL,
INDEX_TYPE CHAR(32) NOT NULL,
PATH VARCHAR(4096),
COLUMN_NAMES VARCHAR(255) NOT NULL, -- array of column names
DATA_TYPES VARCHAR(128) NOT NULL, -- array of column types
ORDERS VARCHAR(128) NOT NULL, -- array of column orders
NULL_ORDERS VARCHAR(128) NOT NULL, -- array of null orderings
IS_UNIQUE BOOLEAN NOT NULL,
IS_CLUSTERED BOOLEAN NOT NULL,
FOREIGN KEY (DB_ID) REFERENCES DATABASES_ (DB_ID) ON DELETE CASCADE,
FOREIGN KEY (TID) REFERENCES TABLES (TID) ON DELETE CASCADE,
CONSTRAINT INDEXES_PK PRIMARY KEY (INDEX_ID),
CONSTRAINT C_INDEXES_UNIQ UNIQUE (DB_ID, INDEX_NAME)
)]]>
</tns:sql>
</tns:Object>
<tns:Object order="12" type="index" name="IDX_INDEXES_PK" dependsOn="INDEXES">
<tns:sql><![CDATA[CREATE UNIQUE INDEX idx_indexes_pk ON INDEXES (DB_ID,index_name)]]></tns:sql>
</tns:Object>
<tns:Object order="13" type="index" name="IDX_INDEXES_COLUMNS" dependsOn="INDEXES">
<tns:sql><![CDATA[CREATE INDEX idx_col_names ON INDEXES (DB_ID,TID,column_names)]]></tns:sql>
</tns:Object>
<tns:Object order="14" type="table" name="STATS">
<tns:sql><![CDATA[
CREATE TABLE STATS (
TID INT NOT NULL PRIMARY KEY,
NUM_ROWS BIGINT,
NUM_BYTES BIGINT,
FOREIGN KEY (TID) REFERENCES TABLES (TID) ON DELETE CASCADE
)]]>
</tns:sql>
</tns:Object>
<tns:Object order="15" type="index" name="IDX_STATS_TABLE_NAME" dependsOn="STATS">
<tns:sql><![CDATA[CREATE UNIQUE INDEX IDX_STATS_TABLE_NAME ON STATS (TID)]]></tns:sql>
</tns:Object>
<tns:Object order="16" type="table" name="PARTITION_METHODS">
<tns:sql><![CDATA[
CREATE TABLE PARTITION_METHODS (
TID INT NOT NULL REFERENCES TABLES (TID) ON DELETE CASCADE,
PARTITION_TYPE VARCHAR(10) NOT NULL,
EXPRESSION VARCHAR(1024) NOT NULL,
EXPRESSION_SCHEMA VARCHAR(1024) FOR BIT DATA NOT NULL
)]]>
</tns:sql>
</tns:Object>
<tns:Object order="17" type="index" name="IDX_PARTITION_METHODS_TABLE_ID" dependsOn="PARTITION_METHODS">
<tns:sql><![CDATA[CREATE INDEX idx_partition_methods_table_id ON PARTITION_METHODS (TID)]]></tns:sql>
</tns:Object>
<tns:Object name="PARTITIONS" type="table" order="18">
<tns:sql><![CDATA[
CREATE TABLE PARTITIONS (
PARTITION_ID INT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),
TID INT NOT NULL REFERENCES TABLES (TID) ON DELETE CASCADE,
PARTITION_NAME VARCHAR(767),
PATH VARCHAR(1024),
NUM_BYTES BIGINT,
CONSTRAINT C_PARTITIONS_PK PRIMARY KEY (PARTITION_ID),
CONSTRAINT C_PARTITIONS_UNIQ UNIQUE (TID, PARTITION_NAME)
)]]>
</tns:sql>
</tns:Object>
<tns:Object name="PARTITIONS_IDX" type="index" dependsOn="PARTITIONS" order="19">
<tns:sql><![CDATA[CREATE INDEX PARTITIONS_IDX ON PARTITIONS(PARTITION_ID, TID, PARTITION_NAME)]]></tns:sql>
</tns:Object>
<tns:Object name="PARTITION_KEYS" type="table" order="20">
<tns:sql><![CDATA[
CREATE TABLE PARTITION_KEYS (
PARTITION_ID INT NOT NULL REFERENCES PARTITIONS (PARTITION_ID) ON DELETE CASCADE,
TID INT NOT NULL,
COLUMN_NAME VARCHAR(128) NOT NULL,
PARTITION_VALUE VARCHAR(255)
)]]>
</tns:sql>
</tns:Object>
<tns:Object name="PARTITION_KEYS_IDX" type="index" dependsOn="PARTITION_KEYS" order="21">
<tns:sql><![CDATA[CREATE INDEX PARTITION_KEYS_IDX ON PARTITION_KEYS(TID , COLUMN_NAME, PARTITION_VALUE)]]></tns:sql>
</tns:Object>
</tns:objects>
</tns:base>
<tns:existQueries>
<tns:existQuery type="trigger">
<tns:sql><![CDATA[
select a.TRIGGERNAME from SYS.SYSTRIGGERS a
]]></tns:sql>
</tns:existQuery>
<tns:existQuery type="sequence">
<tns:sql><![CDATA[
select a.SEQUENCENAME from SYS.SYSSEQUENCES a
]]></tns:sql>
</tns:existQuery>
<tns:existQuery type="view">
<tns:sql><![CDATA[
select a.TABLENAME from SYS.SYSTABLES a where a.TABLETYPE = 'V'
]]></tns:sql>
</tns:existQuery>
</tns:existQueries>
<tns:dropStatements>
<tns:dropStatement type="sequence">
<tns:sql><![CDATA[DROP SEQUENCE ? RESTRICT]]></tns:sql>
</tns:dropStatement>
</tns:dropStatements>
</tns:store>