blob: 6c0f26af1894462a4ba05db4c31e1e2f6fe2e29a [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)
* 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 name="META" type="table" order="0">
<tns:sql><![CDATA[CREATE TABLE META (VERSION INT NOT NULL)]]></tns:sql>
</tns:Object>
<tns:Object name="TABLESPACES" type="table" order="1">
<tns:sql><![CDATA[
CREATE TABLE TABLESPACES (
SPACE_ID SERIAL NOT NULL PRIMARY KEY,
SPACE_NAME VARCHAR(128) NOT NULL UNIQUE,
SPACE_HANDLER VARCHAR (1024) DEFAULT 'HDFS',
SPACE_URI VARCHAR (4096) NOT NULL
)]]>
</tns:sql>
</tns:Object>
<tns:Object name="TABLESPACES_IDX_NAME" type="index" order="2" dependsOn="TABLESPACES">
<tns:sql><![CDATA[CREATE UNIQUE INDEX TABLESPACES_IDX_NAME on TABLESPACES (SPACE_NAME)]]>
</tns:sql>
</tns:Object>
<tns:Object name="DATABASES_" type="table" order="3">
<tns:sql><![CDATA[
CREATE TABLE DATABASES_ (
DB_ID SERIAL NOT NULL PRIMARY KEY,
DB_NAME VARCHAR(128) NOT NULL UNIQUE,
SPACE_ID INT NOT NULL,
FOREIGN KEY (SPACE_ID) REFERENCES TABLESPACES (SPACE_ID)
)]]>
</tns:sql>
</tns:Object>
<tns:Object name="DATABASES__IDX_NAME" type="index" order="4" dependsOn="DATABASES_">
<tns:sql><![CDATA[CREATE UNIQUE INDEX DATABASES__IDX_NAME on DATABASES_ (DB_NAME)]]></tns:sql>
</tns:Object>
<tns:Object name="TABLES" type="table" order="5">
<tns:sql><![CDATA[
CREATE TABLE TABLES (
TID SERIAL NOT NULL PRIMARY KEY,
DB_ID INT NOT NULL,
TABLE_NAME VARCHAR(128) NOT NULL,
TABLE_TYPE VARCHAR(128) NOT NULL,
PATH VARCHAR(4096),
HAS_SELF_DESCRIBE_SCHEMA BOOLEAN,
DATA_FORMAT CHAR(16),
FOREIGN KEY (DB_ID) REFERENCES DATABASES_ (DB_ID),
UNIQUE (DB_ID, TABLE_NAME)
)]]>
</tns:sql>
</tns:Object>
<tns:Object name="TABLES_IDX_DB_ID" type="index" order="6" dependsOn="TABLES">
<tns:sql><![CDATA[CREATE INDEX TABLES_IDX_DB_ID on TABLES (DB_ID)]]></tns:sql>
</tns:Object>
<tns:Object name="TABLES_IDX_TABLE_ID" type="index" order="7" dependsOn="TABLES">
<tns:sql><![CDATA[CREATE UNIQUE INDEX TABLES_IDX_TABLE_ID on TABLES (DB_ID, TABLE_NAME)]]></tns:sql>
</tns:Object>
<tns:Object name="COLUMNS" type="table" order="8">
<tns:sql><![CDATA[
CREATE TABLE COLUMNS (
TID INT NOT NULL,
COLUMN_NAME VARCHAR(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 name="OPTIONS" type="table" order="9">
<tns:sql><![CDATA[
CREATE TABLE OPTIONS (
TID INT NOT NULL,
KEY_ VARCHAR(255) NOT NULL,
VALUE_ VARCHAR(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 name="INDEXES" type="table" order="10">
<tns:sql><![CDATA[
CREATE TABLE INDEXES (
INDEX_ID SERIAL NOT NULL PRIMARY KEY,
DB_ID INT NOT NULL,
TID INT NOT NULL,
INDEX_NAME VARCHAR(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 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,
UNIQUE (DB_ID, INDEX_NAME)
)]]>
</tns:sql>
</tns:Object>
<tns:Object name="INDEXES_IDX_DB_ID_NAME" type="index" order="11" dependsOn="INDEXES">
<tns:sql><![CDATA[CREATE UNIQUE INDEX INDEXES_IDX_DB_ID_NAME on INDEXES (DB_ID, INDEX_NAME)]]></tns:sql>
</tns:Object>
<tns:Object name="INDEXES_IDX_TID_COLUMN_NAME" type="index" order="12" dependsOn="INDEXES">
<tns:sql><![CDATA[CREATE INDEX INDEXES_IDX_TID_COLUMN_NAME on INDEXES (DB_ID, TID, COLUMN_NAMES)]]></tns:sql>
</tns:Object>
<tns:Object name="STATS" type="table" order="13">
<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 name="PARTITION_METHODS" type="table" order="14">
<tns:sql><![CDATA[
CREATE TABLE PARTITION_METHODS (
TID INT NOT NULL PRIMARY KEY,
PARTITION_TYPE VARCHAR(10) NOT NULL,
EXPRESSION VARCHAR(1024) NOT NULL,
EXPRESSION_SCHEMA BYTEA NOT NULL,
FOREIGN KEY (TID) REFERENCES TABLES (TID) ON DELETE CASCADE
)]]>
</tns:sql>
</tns:Object>
<tns:Object name="PARTITIONS" type="table" order="15">
<tns:sql><![CDATA[
CREATE TABLE PARTITIONS (
PARTITION_ID SERIAL NOT NULL PRIMARY KEY,
TID INT NOT NULL,
PARTITION_NAME VARCHAR(128),
PARTITION_VALUE VARCHAR(1024),
PATH VARCHAR(4096),
FOREIGN KEY (TID) REFERENCES TABLES (TID) ON DELETE CASCADE,
UNIQUE (TID, PARTITION_NAME)
)]]>
</tns:sql>
</tns:Object>
<tns:Object name="PARTITIONS_UNIQUE_IDX" type="index" order="16" dependsOn="PARTITIONS">
<tns:sql><![CDATA[CREATE UNIQUE INDEX PARTITIONS_UNIQUE_IDX on PARTITIONS (TID, PARTITION_NAME)]]></tns:sql>
</tns:Object>
<tns:Object name="PARTITION_KEYS" type="table" order="17">
<tns:sql><![CDATA[
CREATE TABLE PARTITION_KEYS (
PARTITION_ID INT NOT NULL,
TID INT NOT NULL,
COLUMN_NAME VARCHAR(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 name="PARTITION_KEYS_IDX" type="index" order="18" 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="table">
<tns:sql><![CDATA[
select c.relname from pg_class c, pg_roles r
where c.relowner = r.oid and r.rolname = current_user and c.relkind = 'r'::char]]>
</tns:sql>
</tns:existQuery>
<tns:existQuery type="view">
<tns:sql><![CDATA[
select c.relname from pg_class c, pg_roles r
where c.relowner = r.oid and r.rolname = current_user and c.relkind = 'v'::char]]>
</tns:sql>
</tns:existQuery>
<tns:existQuery type="index">
<tns:sql><![CDATA[
select c.relname from pg_class c, pg_roles r
where c.relowner = r.oid and r.rolname = current_user and c.relkind = 'i'::char]]>
</tns:sql>
</tns:existQuery>
<tns:existQuery type="sequence">
<tns:sql><![CDATA[
select c.relname from pg_class c, pg_roles r
where c.relowner = r.oid and r.rolname = current_user and c.relkind = 'S'::char]]>
</tns:sql>
</tns:existQuery>
<tns:existQuery type="trigger">
<tns:sql><![CDATA[
select tgname from pg_trigger t
where t.tgrelid in
(select c.oid from pg_class c, pg_roles r
where c.relowner = r.oid and r.rolname = current_user and c.relkind = 'r'::char)]]>
</tns:sql>
</tns:existQuery>
</tns:existQueries>
<tns:dropStatements>
<tns:dropStatement type="table">
<tns:sql><![CDATA[DROP TABLE ? CASCADE]]></tns:sql>
</tns:dropStatement>
</tns:dropStatements>
</tns:store>