blob: 8f23514ba19033a0ae8650e9d9ce0a4a261b9443 [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 - 2015-10-14: Disable partition pruning using catalog temporarily. (TAJO-1926)
* 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="13">
<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 NUMBER(10) NOT NULL PRIMARY KEY,
SPACE_NAME VARCHAR2(128) NOT NULL UNIQUE,
SPACE_HANDLER VARCHAR2(1024) DEFAULT 'HDFS',
SPACE_URI VARCHAR2(4000) NOT NULL
)]]>
</tns:sql>
</tns:Object>
<tns:Object order="2" type="sequence" name="TABLESPACES_SEQ">
<tns:sql><![CDATA[CREATE SEQUENCE TABLESPACES_SEQ]]></tns:sql>
</tns:Object>
<tns:Object order="3" type="trigger" name="TABLESPACES_AUTOINC">
<tns:sql><![CDATA[
CREATE OR REPLACE TRIGGER TABLESPACES_AUTOINC
BEFORE INSERT ON TABLESPACES
FOR EACH ROW
WHEN (new.SPACE_ID IS NULL)
BEGIN
SELECT TABLESPACES_SEQ.NEXTVAL INTO :new.SPACE_ID FROM DUAL;
END;]]>
</tns:sql>
</tns:Object>
<tns:Object order="4" type="table" name="DATABASES_">
<tns:sql><![CDATA[
CREATE TABLE DATABASES_ (
DB_ID NUMBER(10) NOT NULL PRIMARY KEY,
DB_NAME VARCHAR2(128) NOT NULL UNIQUE,
SPACE_ID INT NOT NULL,
FOREIGN KEY (SPACE_ID) REFERENCES TABLESPACES (SPACE_ID)
)]]>
</tns:sql>
</tns:Object>
<tns:Object order="5" type="sequence" name="DATABASES__SEQ">
<tns:sql><![CDATA[
CREATE SEQUENCE DATABASES__SEQ
]]>
</tns:sql>
</tns:Object>
<tns:Object order="6" type="trigger" name="DATABASES__AUTOINC">
<tns:sql><![CDATA[
CREATE OR REPLACE TRIGGER DATABASES__AUTOINC
BEFORE INSERT ON DATABASES_
FOR EACH ROW
WHEN (new.DB_ID IS NULL)
BEGIN
SELECT DATABASES__SEQ.NEXTVAL INTO :new.DB_ID FROM DUAL;
END;]]>
</tns:sql>
</tns:Object>
<tns:Object order="7" type="table" name="TABLES">
<tns:sql><![CDATA[
CREATE TABLE TABLES (
TID NUMBER(10) NOT NULL PRIMARY KEY,
DB_ID INT NOT NULL,
TABLE_NAME VARCHAR2(128) NOT NULL,
TABLE_TYPE VARCHAR2(128) NOT NULL,
PATH VARCHAR2(4000),
HAS_SELF_DESCRIBE_SCHEMA CHAR NOT NULL,
DATA_FORMAT CHAR(16),
FOREIGN KEY (DB_ID) REFERENCES DATABASES_ (DB_ID),
CONSTRAINT C_TABLE_ID_UNIQ UNIQUE (DB_ID, TABLE_NAME)
)]]>
</tns:sql>
</tns:Object>
<tns:Object order="8" type="sequence" name="TABLES_SEQ">
<tns:sql><![CDATA[
CREATE SEQUENCE TABLES_SEQ
]]>
</tns:sql>
</tns:Object>
<tns:Object order="9" type="trigger" name="TABLES_AUTOINC">
<tns:sql><![CDATA[
CREATE OR REPLACE TRIGGER TABLES_AUTOINC
BEFORE INSERT ON TABLES
FOR EACH ROW
WHEN (new.TID IS NULL)
BEGIN
SELECT TABLES_SEQ.NEXTVAL INTO :new.TID FROM DUAL;
END;]]>
</tns:sql>
</tns:Object>
<tns:Object order="10" type="index" name="TABLES_IDX_DB_ID" dependsOn="TABLES">
<tns:sql><![CDATA[CREATE INDEX TABLES_IDX_DB_ID on TABLES (DB_ID)]]></tns:sql>
</tns:Object>
<tns:Object order="11" type="index" name="TABLES_IDX_TABLE_ID" dependsOn="TABLES">
<tns:sql><![CDATA[CREATE UNIQUE INDEX TABLES_IDX_TABLE_ID on TABLES (DB_ID, TABLE_NAME)]]></tns:sql>
</tns:Object>
<tns:Object order="12" type="table" name="COLUMNS">
<tns:sql><![CDATA[
CREATE TABLE COLUMNS (
TID INT NOT NULL,
COLUMN_NAME VARCHAR2(255) NOT NULL,
ORDINAL_POSITION INT NOT NULL,
NESTED_FIELD_NUM INT NOT NULL,
DATA_TYPE CHAR(16),
TYPE_LENGTH INTEGER,
CONSTRAINT COLUMNS_PKEY PRIMARY KEY (TID, ORDINAL_POSITION),
FOREIGN KEY (TID) REFERENCES TABLES (TID) ON DELETE CASCADE
)]]>
</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="13" type="table" name="OPTIONS">
<tns:sql><![CDATA[
CREATE TABLE OPTIONS (
TID INT NOT NULL,
KEY_ VARCHAR2(255) NOT NULL,
VALUE_ VARCHAR2(4000) NOT NULL,
CONSTRAINT OPTIONS_PKEY PRIMARY KEY (TID, KEY_),
FOREIGN KEY (TID) REFERENCES TABLES (TID) ON DELETE CASCADE
)]]>
</tns:sql>
</tns:Object>
<tns:Object order="14" type="table" name="INDEXES">
<tns:sql><![CDATA[
CREATE TABLE INDEXES (
INDEX_ID NUMBER(10) NOT NULL PRIMARY KEY,
DB_ID INT NOT NULL,
TID INT NOT NULL,
INDEX_NAME VARCHAR2(128) NOT NULL,
INDEX_TYPE CHAR(32) NOT NULL,
PATH VARCHAR(4096) NOT NULL,
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 CHAR NOT NULL,
IS_CLUSTERED CHAR NOT NULL,
IS_ASCENDING CHAR NOT NULL,
FOREIGN KEY (DB_ID) REFERENCES DATABASES_ (DB_ID) ON DELETE CASCADE,
FOREIGN KEY (TID) REFERENCES TABLES (TID) ON DELETE CASCADE,
CONSTRAINT C_INDEXES_UNIQ UNIQUE (DB_ID, INDEX_NAME)
)]]>
</tns:sql>
</tns:Object>
<tns:Object order="15" 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="16" type="table" name="STATS">
<tns:sql><![CDATA[
CREATE TABLE STATS (
TID INT NOT NULL PRIMARY KEY,
NUM_ROWS NUMBER(38),
NUM_BYTES NUMBER(38),
FOREIGN KEY (TID) REFERENCES TABLES (TID) ON DELETE CASCADE
)]]>
</tns:sql>
</tns:Object>
<tns:Object order="17" type="table" name="PARTITION_METHODS">
<tns:sql><![CDATA[
CREATE TABLE PARTITION_METHODS (
TID INT NOT NULL PRIMARY KEY,
PARTITION_TYPE VARCHAR2(10) NOT NULL,
EXPRESSION VARCHAR2(1024) NOT NULL,
EXPRESSION_SCHEMA RAW(1024) NOT NULL,
FOREIGN KEY (TID) REFERENCES TABLES (TID) ON DELETE CASCADE
)]]>
</tns:sql>
</tns:Object>
<tns:Object order="18" type="table" name="PARTITIONS">
<tns:sql><![CDATA[
CREATE TABLE PARTITIONS (
PARTITION_ID INT NOT NULL PRIMARY KEY,
TID INT NOT NULL,
PARTITION_NAME VARCHAR2(767),
PATH VARCHAR2(4000),
FOREIGN KEY (TID) REFERENCES TABLES (TID) ON DELETE CASCADE,
CONSTRAINT C_PARTITIONS_UNIQ UNIQUE (TID, PARTITION_NAME)
)]]>
</tns:sql>
</tns:Object>
<tns:Object order="19" type="sequence" name="PARTITIONS_SEQ">
<tns:sql><![CDATA[
CREATE SEQUENCE PARTITIONS_SEQ
]]>
</tns:sql>
</tns:Object>
<tns:Object order="20" type="trigger" name="PARTITIONS_AUTOINC">
<tns:sql><![CDATA[
CREATE OR REPLACE TRIGGER PARTITIONS_AUTOINC
BEFORE INSERT ON PARTITIONS
FOR EACH ROW
WHEN (new.PARTITION_ID IS NULL)
BEGIN
SELECT PARTITIONS_SEQ.NEXTVAL INTO :new.PARTITION_ID FROM DUAL;
END;]]>
</tns:sql>
</tns:Object>
<tns:Object order="21" type="index" name="PARTITIONS_UNIQUE_IDX" dependsOn="PARTITIONS">
<tns:sql><![CDATA[CREATE UNIQUE INDEX PARTITIONS_UNIQUE_IDX on PARTITIONS (TID, PARTITION_NAME)]]></tns:sql>
</tns:Object>
<tns:Object order="22" type="table" name="PARTITION_KEYS">
<tns:sql><![CDATA[
CREATE TABLE PARTITION_KEYS (
PARTITION_ID INT NOT NULL,
TID INT NOT NULL,
COLUMN_NAME VARCHAR2(255) NOT NULL,
PARTITION_VALUE VARCHAR(255) NULL,
FOREIGN KEY (PARTITION_ID) REFERENCES PARTITIONS (PARTITION_ID) ON DELETE CASCADE
)]]>
</tns:sql>
</tns:Object>
<tns:Object order="23" type="index" name="PARTITION_KEYS_IDX" dependsOn="PARTITION_KEYS">
<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 TRIGGER_NAME FROM USER_TRIGGERS]]></tns:sql>
</tns:existQuery>
<tns:existQuery type="sequence">
<tns:sql><![CDATA[SELECT SEQUENCE_NAME FROM USER_SEQUENCES]]></tns:sql>
</tns:existQuery>
<tns:existQuery type="view">
<tns:sql><![CDATA[SELECT VIEW_NAME FROM USER_VIEWS]]></tns:sql>
</tns:existQuery>
<tns:existQuery type="index">
<tns:sql><![CDATA[SELECT INDEX_NAME FROM USER_INDEXES]]></tns:sql>
</tns:existQuery>
</tns:existQueries>
<tns:dropStatements>
<tns:dropStatement type="table">
<tns:sql><![CDATA[DROP TABLE ? CASCADE CONSTRAINT]]></tns:sql>
</tns:dropStatement>
</tns:dropStatements>
</tns:store>