| // 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. |
| |
| package org.apache.doris.catalog; |
| |
| import org.apache.doris.analysis.CreateDbStmt; |
| import org.apache.doris.analysis.CreateTableStmt; |
| import org.apache.doris.common.DdlException; |
| import org.apache.doris.common.FeConstants; |
| import org.apache.doris.qe.ConnectContext; |
| |
| import org.apache.doris.utframe.UtFrameUtils; |
| import org.junit.AfterClass; |
| import org.junit.Assert; |
| import org.junit.BeforeClass; |
| import org.junit.Rule; |
| import org.junit.Test; |
| import org.junit.rules.ExpectedException; |
| |
| import java.text.SimpleDateFormat; |
| import java.util.Calendar; |
| import java.util.Date; |
| import java.util.GregorianCalendar; |
| import java.util.Iterator; |
| import java.util.UUID; |
| |
| public class DynamicPartitionTableTest { |
| private static String runningDir = "fe/mocked/DynamicPartitionTableTest/" + UUID.randomUUID().toString() + "/"; |
| |
| private static ConnectContext connectContext; |
| |
| @Rule |
| public ExpectedException expectedException = ExpectedException.none(); |
| |
| @BeforeClass |
| public static void beforeClass() throws Exception { |
| FeConstants.default_scheduler_interval_millisecond = 1000; |
| FeConstants.runningUnitTest = true; |
| |
| UtFrameUtils.createMinDorisCluster(runningDir); |
| |
| // create connect context |
| connectContext = UtFrameUtils.createDefaultCtx(); |
| // create database |
| String createDbStmtStr = "create database test;"; |
| CreateDbStmt createDbStmt = (CreateDbStmt) UtFrameUtils.parseAndAnalyzeStmt(createDbStmtStr, connectContext); |
| Catalog.getCurrentCatalog().createDb(createDbStmt); |
| } |
| |
| @AfterClass |
| public static void TearDown() { |
| UtFrameUtils.cleanDorisFeDir(runningDir); |
| } |
| |
| private static void createTable(String sql) throws Exception { |
| CreateTableStmt createTableStmt = (CreateTableStmt) UtFrameUtils.parseAndAnalyzeStmt(sql, connectContext); |
| Catalog.getCurrentCatalog().createTable(createTableStmt); |
| } |
| |
| @Test |
| public void testNormal() throws Exception { |
| String createOlapTblStmt = "CREATE TABLE test.`dynamic_partition_normal` (\n" + |
| " `k1` date NULL COMMENT \"\",\n" + |
| " `k2` int NULL COMMENT \"\",\n" + |
| " `k3` smallint NULL COMMENT \"\",\n" + |
| " `v1` varchar(2048) NULL COMMENT \"\",\n" + |
| " `v2` datetime NULL COMMENT \"\"\n" + |
| ") ENGINE=OLAP\n" + |
| "DUPLICATE KEY(`k1`, `k2`, `k3`)\n" + |
| "COMMENT \"OLAP\"\n" + |
| "PARTITION BY RANGE (k1)\n" + |
| "(\n" + |
| "PARTITION p1 VALUES LESS THAN (\"2014-01-01\"),\n" + |
| "PARTITION p2 VALUES LESS THAN (\"2014-06-01\"),\n" + |
| "PARTITION p3 VALUES LESS THAN (\"2014-12-01\")\n" + |
| ")\n" + |
| "DISTRIBUTED BY HASH(`k1`) BUCKETS 32\n" + |
| "PROPERTIES (\n" + |
| "\"replication_num\" = \"1\",\n" + |
| "\"dynamic_partition.enable\" = \"true\",\n" + |
| "\"dynamic_partition.start\" = \"-3\",\n" + |
| "\"dynamic_partition.end\" = \"3\",\n" + |
| "\"dynamic_partition.time_unit\" = \"day\",\n" + |
| "\"dynamic_partition.prefix\" = \"p\",\n" + |
| "\"dynamic_partition.buckets\" = \"1\"\n" + |
| ");"; |
| createTable(createOlapTblStmt); |
| Database db = Catalog.getCurrentCatalog().getDb("default_cluster:test"); |
| OlapTable table = (OlapTable) db.getTable("dynamic_partition_normal"); |
| Assert.assertEquals(table.getTableProperty().getDynamicPartitionProperty().getReplicationNum(), DynamicPartitionProperty.NOT_SET_REPLICATION_NUM); |
| } |
| |
| @Test |
| public void testMissPrefix() throws Exception { |
| String createOlapTblStmt = "CREATE TABLE test.`dynamic_partition_prefix` (\n" + |
| " `k1` date NULL COMMENT \"\",\n" + |
| " `k2` int NULL COMMENT \"\",\n" + |
| " `k3` smallint NULL COMMENT \"\",\n" + |
| " `v1` varchar(2048) NULL COMMENT \"\",\n" + |
| " `v2` datetime NULL COMMENT \"\"\n" + |
| ") ENGINE=OLAP\n" + |
| "DUPLICATE KEY(`k1`, `k2`, `k3`)\n" + |
| "COMMENT \"OLAP\"\n" + |
| "PARTITION BY RANGE (k1)\n" + |
| "(\n" + |
| "PARTITION p1 VALUES LESS THAN (\"2014-01-01\"),\n" + |
| "PARTITION p2 VALUES LESS THAN (\"2014-06-01\"),\n" + |
| "PARTITION p3 VALUES LESS THAN (\"2014-12-01\")\n" + |
| ")\n" + |
| "DISTRIBUTED BY HASH(`k1`) BUCKETS 32\n" + |
| "PROPERTIES (\n" + |
| "\"replication_num\" = \"1\",\n" + |
| "\"dynamic_partition.enable\" = \"true\",\n" + |
| "\"dynamic_partition.start\" = \"-3\",\n" + |
| "\"dynamic_partition.end\" = \"3\",\n" + |
| "\"dynamic_partition.time_unit\" = \"day\",\n" + |
| "\"dynamic_partition.buckets\" = \"1\"\n" + |
| ");"; |
| expectedException.expect(DdlException.class); |
| expectedException.expectMessage("errCode = 2, detailMessage = Must assign dynamic_partition.prefix properties"); |
| createTable(createOlapTblStmt); |
| } |
| |
| @Test |
| public void testMissTimeUnit() throws Exception { |
| String createOlapTblStmt = "CREATE TABLE test.`dynamic_partition_time_unit` (\n" + |
| " `k1` date NULL COMMENT \"\",\n" + |
| " `k2` int NULL COMMENT \"\",\n" + |
| " `k3` smallint NULL COMMENT \"\",\n" + |
| " `v1` varchar(2048) NULL COMMENT \"\",\n" + |
| " `v2` datetime NULL COMMENT \"\"\n" + |
| ") ENGINE=OLAP\n" + |
| "DUPLICATE KEY(`k1`, `k2`, `k3`)\n" + |
| "COMMENT \"OLAP\"\n" + |
| "PARTITION BY RANGE (k1)\n" + |
| "(\n" + |
| "PARTITION p1 VALUES LESS THAN (\"2014-01-01\"),\n" + |
| "PARTITION p2 VALUES LESS THAN (\"2014-06-01\"),\n" + |
| "PARTITION p3 VALUES LESS THAN (\"2014-12-01\")\n" + |
| ")\n" + |
| "DISTRIBUTED BY HASH(`k1`) BUCKETS 32\n" + |
| "PROPERTIES (\n" + |
| "\"replication_num\" = \"1\",\n" + |
| "\"dynamic_partition.enable\" = \"true\",\n" + |
| "\"dynamic_partition.start\" = \"-3\",\n" + |
| "\"dynamic_partition.end\" = \"3\",\n" + |
| "\"dynamic_partition.prefix\" = \"p\",\n" + |
| "\"dynamic_partition.buckets\" = \"1\"\n" + |
| ");"; |
| expectedException.expect(DdlException.class); |
| expectedException.expectMessage("errCode = 2, detailMessage = Must assign dynamic_partition.time_unit properties"); |
| createTable(createOlapTblStmt); |
| } |
| |
| @Test |
| public void testMissStart() throws Exception { |
| String createOlapTblStmt = "CREATE TABLE test.`dynamic_partition_start` (\n" + |
| " `k1` date NULL COMMENT \"\",\n" + |
| " `k2` int NULL COMMENT \"\",\n" + |
| " `k3` smallint NULL COMMENT \"\",\n" + |
| " `v1` varchar(2048) NULL COMMENT \"\",\n" + |
| " `v2` datetime NULL COMMENT \"\"\n" + |
| ") ENGINE=OLAP\n" + |
| "DUPLICATE KEY(`k1`, `k2`, `k3`)\n" + |
| "COMMENT \"OLAP\"\n" + |
| "PARTITION BY RANGE (k1)\n" + |
| "(\n" + |
| "PARTITION p1 VALUES LESS THAN (\"2014-01-01\"),\n" + |
| "PARTITION p2 VALUES LESS THAN (\"2014-06-01\"),\n" + |
| "PARTITION p3 VALUES LESS THAN (\"2014-12-01\")\n" + |
| ")\n" + |
| "DISTRIBUTED BY HASH(`k1`) BUCKETS 32\n" + |
| "PROPERTIES (\n" + |
| "\"replication_num\" = \"1\",\n" + |
| "\"dynamic_partition.enable\" = \"true\",\n" + |
| "\"dynamic_partition.end\" = \"3\",\n" + |
| "\"dynamic_partition.time_unit\" = \"day\",\n" + |
| "\"dynamic_partition.prefix\" = \"p\",\n" + |
| "\"dynamic_partition.buckets\" = \"1\"\n" + |
| ");"; |
| createTable(createOlapTblStmt); |
| } |
| |
| @Test |
| public void testMissEnd() throws Exception { |
| String createOlapTblStmt = "CREATE TABLE test.`dynamic_partition_end` (\n" + |
| " `k1` date NULL COMMENT \"\",\n" + |
| " `k2` int NULL COMMENT \"\",\n" + |
| " `k3` smallint NULL COMMENT \"\",\n" + |
| " `v1` varchar(2048) NULL COMMENT \"\",\n" + |
| " `v2` datetime NULL COMMENT \"\"\n" + |
| ") ENGINE=OLAP\n" + |
| "DUPLICATE KEY(`k1`, `k2`, `k3`)\n" + |
| "COMMENT \"OLAP\"\n" + |
| "PARTITION BY RANGE (k1)\n" + |
| "(\n" + |
| "PARTITION p1 VALUES LESS THAN (\"2014-01-01\"),\n" + |
| "PARTITION p2 VALUES LESS THAN (\"2014-06-01\"),\n" + |
| "PARTITION p3 VALUES LESS THAN (\"2014-12-01\")\n" + |
| ")\n" + |
| "DISTRIBUTED BY HASH(`k1`) BUCKETS 32\n" + |
| "PROPERTIES (\n" + |
| "\"replication_num\" = \"1\",\n" + |
| "\"dynamic_partition.enable\" = \"true\",\n" + |
| "\"dynamic_partition.start\" = \"-3\",\n" + |
| "\"dynamic_partition.time_unit\" = \"day\",\n" + |
| "\"dynamic_partition.prefix\" = \"p\",\n" + |
| "\"dynamic_partition.buckets\" = \"1\"\n" + |
| ");"; |
| expectedException.expect(DdlException.class); |
| expectedException.expectMessage("errCode = 2, detailMessage = Must assign dynamic_partition.end properties"); |
| createTable(createOlapTblStmt); |
| } |
| |
| @Test |
| public void testMissBuckets() throws Exception { |
| String createOlapTblStmt = "CREATE TABLE test.`dynamic_partition_buckets` (\n" + |
| " `k1` date NULL COMMENT \"\",\n" + |
| " `k2` int NULL COMMENT \"\",\n" + |
| " `k3` smallint NULL COMMENT \"\",\n" + |
| " `v1` varchar(2048) NULL COMMENT \"\",\n" + |
| " `v2` datetime NULL COMMENT \"\"\n" + |
| ") ENGINE=OLAP\n" + |
| "DUPLICATE KEY(`k1`, `k2`, `k3`)\n" + |
| "COMMENT \"OLAP\"\n" + |
| "PARTITION BY RANGE (k1)\n" + |
| "(\n" + |
| "PARTITION p1 VALUES LESS THAN (\"2014-01-01\"),\n" + |
| "PARTITION p2 VALUES LESS THAN (\"2014-06-01\"),\n" + |
| "PARTITION p3 VALUES LESS THAN (\"2014-12-01\")\n" + |
| ")\n" + |
| "DISTRIBUTED BY HASH(`k1`) BUCKETS 32\n" + |
| "PROPERTIES (\n" + |
| "\"replication_num\" = \"1\",\n" + |
| "\"dynamic_partition.enable\" = \"true\",\n" + |
| "\"dynamic_partition.start\" = \"-3\",\n" + |
| "\"dynamic_partition.end\" = \"3\",\n" + |
| "\"dynamic_partition.time_unit\" = \"day\",\n" + |
| "\"dynamic_partition.prefix\" = \"p\"\n" + |
| ");"; |
| expectedException.expect(DdlException.class); |
| expectedException.expectMessage("errCode = 2, detailMessage = Must assign dynamic_partition.buckets properties"); |
| createTable(createOlapTblStmt); |
| } |
| |
| @Test |
| public void testNotAllowed() throws Exception { |
| String createOlapTblStmt = "CREATE TABLE test.`dynamic_partition_buckets` (\n" + |
| " `k1` date NULL COMMENT \"\",\n" + |
| " `k2` int NULL COMMENT \"\",\n" + |
| " `k3` smallint NULL COMMENT \"\",\n" + |
| " `v1` varchar(2048) NULL COMMENT \"\",\n" + |
| " `v2` datetime NULL COMMENT \"\"\n" + |
| ") ENGINE=OLAP\n" + |
| "DUPLICATE KEY(`k1`, `k2`, `k3`)\n" + |
| "COMMENT \"OLAP\"\n" + |
| "DISTRIBUTED BY HASH(`k1`) BUCKETS 32\n" + |
| "PROPERTIES (\n" + |
| "\"replication_num\" = \"1\",\n" + |
| "\"dynamic_partition.enable\" = \"true\",\n" + |
| "\"dynamic_partition.start\" = \"-3\",\n" + |
| "\"dynamic_partition.end\" = \"3\",\n" + |
| "\"dynamic_partition.time_unit\" = \"day\",\n" + |
| "\"dynamic_partition.prefix\" = \"p\",\n" + |
| "\"dynamic_partition.buckets\" = \"1\"\n" + |
| ");"; |
| expectedException.expect(DdlException.class); |
| expectedException.expectMessage("errCode = 2, detailMessage = Only support dynamic partition properties on range partition table"); |
| createTable(createOlapTblStmt); |
| } |
| |
| @Test |
| public void testNotAllowedInMultiPartitions() throws Exception { |
| String createOlapTblStmt = "CREATE TABLE test.`dynamic_partition_normal` (\n" + |
| " `k1` date NULL COMMENT \"\",\n" + |
| " `k2` int NULL COMMENT \"\",\n" + |
| " `k3` smallint NULL COMMENT \"\",\n" + |
| " `v1` varchar(2048) NULL COMMENT \"\",\n" + |
| " `v2` datetime NULL COMMENT \"\"\n" + |
| ") ENGINE=OLAP\n" + |
| "DUPLICATE KEY(`k1`, `k2`, `k3`)\n" + |
| "COMMENT \"OLAP\"\n" + |
| "PARTITION BY RANGE (k1, k2)\n" + |
| "(\n" + |
| "PARTITION p1 VALUES LESS THAN (\"2014-01-01\", \"100\"),\n" + |
| "PARTITION p2 VALUES LESS THAN (\"2014-06-01\", \"200\"),\n" + |
| "PARTITION p3 VALUES LESS THAN (\"2014-12-01\", \"300\")\n" + |
| ")\n" + |
| "DISTRIBUTED BY HASH(`k1`) BUCKETS 32\n" + |
| "PROPERTIES (\n" + |
| "\"replication_num\" = \"1\",\n" + |
| "\"dynamic_partition.enable\" = \"true\",\n" + |
| "\"dynamic_partition.start\" = \"-3\",\n" + |
| "\"dynamic_partition.end\" = \"3\",\n" + |
| "\"dynamic_partition.time_unit\" = \"day\",\n" + |
| "\"dynamic_partition.prefix\" = \"p\",\n" + |
| "\"dynamic_partition.buckets\" = \"1\"\n" + |
| ");"; |
| expectedException.expect(DdlException.class); |
| expectedException.expectMessage("errCode = 2, detailMessage = Dynamic partition only support single-column range partition"); |
| createTable(createOlapTblStmt); |
| } |
| |
| @Test |
| public void testMissTimeZone() throws Exception { |
| String createOlapTblStmt = "CREATE TABLE test.`dynamic_partition_miss_time_zone` (\n" + |
| " `k1` date NULL COMMENT \"\",\n" + |
| " `k2` int NULL COMMENT \"\",\n" + |
| " `k3` smallint NULL COMMENT \"\",\n" + |
| " `v1` varchar(2048) NULL COMMENT \"\",\n" + |
| " `v2` datetime NULL COMMENT \"\"\n" + |
| ") ENGINE=OLAP\n" + |
| "DUPLICATE KEY(`k1`, `k2`, `k3`)\n" + |
| "COMMENT \"OLAP\"\n" + |
| "PARTITION BY RANGE (k1)\n" + |
| "(\n" + |
| "PARTITION p1 VALUES LESS THAN (\"2014-01-01\"),\n" + |
| "PARTITION p2 VALUES LESS THAN (\"2014-06-01\"),\n" + |
| "PARTITION p3 VALUES LESS THAN (\"2014-12-01\")\n" + |
| ")\n" + |
| "DISTRIBUTED BY HASH(`k1`) BUCKETS 32\n" + |
| "PROPERTIES (\n" + |
| "\"replication_num\" = \"1\",\n" + |
| "\"dynamic_partition.enable\" = \"true\",\n" + |
| "\"dynamic_partition.start\" = \"-3\",\n" + |
| "\"dynamic_partition.end\" = \"3\",\n" + |
| "\"dynamic_partition.buckets\" = \"3\",\n" + |
| "\"dynamic_partition.time_unit\" = \"day\",\n" + |
| "\"dynamic_partition.prefix\" = \"p\"\n" + |
| ");"; |
| createTable(createOlapTblStmt); |
| } |
| |
| @Test |
| public void testNormalTimeZone() throws Exception { |
| String createOlapTblStmt = "CREATE TABLE test.`dynamic_partition_time_zone` (\n" + |
| " `k1` date NULL COMMENT \"\",\n" + |
| " `k2` int NULL COMMENT \"\",\n" + |
| " `k3` smallint NULL COMMENT \"\",\n" + |
| " `v1` varchar(2048) NULL COMMENT \"\",\n" + |
| " `v2` datetime NULL COMMENT \"\"\n" + |
| ") ENGINE=OLAP\n" + |
| "DUPLICATE KEY(`k1`, `k2`, `k3`)\n" + |
| "COMMENT \"OLAP\"\n" + |
| "PARTITION BY RANGE (k1)\n" + |
| "(\n" + |
| "PARTITION p1 VALUES LESS THAN (\"2014-01-01\"),\n" + |
| "PARTITION p2 VALUES LESS THAN (\"2014-06-01\"),\n" + |
| "PARTITION p3 VALUES LESS THAN (\"2014-12-01\")\n" + |
| ")\n" + |
| "DISTRIBUTED BY HASH(`k1`) BUCKETS 32\n" + |
| "PROPERTIES (\n" + |
| "\"replication_num\" = \"1\",\n" + |
| "\"dynamic_partition.enable\" = \"true\",\n" + |
| "\"dynamic_partition.start\" = \"-3\",\n" + |
| "\"dynamic_partition.end\" = \"3\",\n" + |
| "\"dynamic_partition.buckets\" = \"3\",\n" + |
| "\"dynamic_partition.time_unit\" = \"day\",\n" + |
| "\"dynamic_partition.time_zone\" = \"Asia/Shanghai\",\n" + |
| "\"dynamic_partition.prefix\" = \"p\"\n" + |
| ");"; |
| createTable(createOlapTblStmt); |
| } |
| |
| @Test |
| public void testInvalidTimeZone() throws Exception { |
| String createOlapTblStmt = "CREATE TABLE test.`dynamic_partition_invalid_time_zone` (\n" + |
| " `k1` date NULL COMMENT \"\",\n" + |
| " `k2` int NULL COMMENT \"\",\n" + |
| " `k3` smallint NULL COMMENT \"\",\n" + |
| " `v1` varchar(2048) NULL COMMENT \"\",\n" + |
| " `v2` datetime NULL COMMENT \"\"\n" + |
| ") ENGINE=OLAP\n" + |
| "DUPLICATE KEY(`k1`, `k2`, `k3`)\n" + |
| "COMMENT \"OLAP\"\n" + |
| "PARTITION BY RANGE (k1)\n" + |
| "(\n" + |
| "PARTITION p1 VALUES LESS THAN (\"2014-01-01\"),\n" + |
| "PARTITION p2 VALUES LESS THAN (\"2014-06-01\"),\n" + |
| "PARTITION p3 VALUES LESS THAN (\"2014-12-01\")\n" + |
| ")\n" + |
| "DISTRIBUTED BY HASH(`k1`) BUCKETS 32\n" + |
| "PROPERTIES (\n" + |
| "\"replication_num\" = \"1\",\n" + |
| "\"dynamic_partition.enable\" = \"true\",\n" + |
| "\"dynamic_partition.start\" = \"-3\",\n" + |
| "\"dynamic_partition.end\" = \"3\",\n" + |
| "\"dynamic_partition.buckets\" = \"3\",\n" + |
| "\"dynamic_partition.time_unit\" = \"day\",\n" + |
| "\"dynamic_partition.time_zone\" = \"invalid\",\n" + |
| "\"dynamic_partition.prefix\" = \"p\"\n" + |
| ");"; |
| expectedException.expect(DdlException.class); |
| expectedException.expectMessage("errCode = 2, detailMessage = Unknown or incorrect time zone: 'invalid'"); |
| createTable(createOlapTblStmt); |
| } |
| |
| @Test |
| public void testSetDynamicPartitionReplicationNum() throws Exception { |
| String tableName = "dynamic_partition_replication_num"; |
| String createOlapTblStmt = "CREATE TABLE test.`" + tableName + "` (\n" + |
| " `k1` date NULL COMMENT \"\",\n" + |
| " `k2` int NULL COMMENT \"\",\n" + |
| " `k3` smallint NULL COMMENT \"\",\n" + |
| " `v1` varchar(2048) NULL COMMENT \"\",\n" + |
| " `v2` datetime NULL COMMENT \"\"\n" + |
| ") ENGINE=OLAP\n" + |
| "DUPLICATE KEY(`k1`, `k2`, `k3`)\n" + |
| "COMMENT \"OLAP\"\n" + |
| "PARTITION BY RANGE (k1)\n" + |
| "(\n" + |
| "PARTITION p1 VALUES LESS THAN (\"2014-01-01\"),\n" + |
| "PARTITION p2 VALUES LESS THAN (\"2014-06-01\"),\n" + |
| "PARTITION p3 VALUES LESS THAN (\"2014-12-01\")\n" + |
| ")\n" + |
| "DISTRIBUTED BY HASH(`k1`) BUCKETS 32\n" + |
| "PROPERTIES (\n" + |
| "\"replication_num\" = \"1\",\n" + |
| "\"dynamic_partition.enable\" = \"true\",\n" + |
| "\"dynamic_partition.start\" = \"-3\",\n" + |
| "\"dynamic_partition.end\" = \"3\",\n" + |
| "\"dynamic_partition.time_unit\" = \"day\",\n" + |
| "\"dynamic_partition.prefix\" = \"p\",\n" + |
| "\"dynamic_partition.buckets\" = \"1\",\n" + |
| "\"dynamic_partition.replication_num\" = \"2\"\n" + |
| ");"; |
| createTable(createOlapTblStmt); |
| Database db = Catalog.getCurrentCatalog().getDb("default_cluster:test"); |
| OlapTable table = (OlapTable) db.getTable(tableName); |
| Assert.assertEquals(table.getTableProperty().getDynamicPartitionProperty().getReplicationNum(), 2); |
| } |
| |
| @Test |
| public void testCreateDynamicPartitionImmediately() throws Exception { |
| String createOlapTblStmt = "CREATE TABLE test.`empty_dynamic_partition` (\n" + |
| " `k1` date NULL COMMENT \"\",\n" + |
| " `k2` int NULL COMMENT \"\",\n" + |
| " `k3` smallint NULL COMMENT \"\",\n" + |
| " `v1` varchar(2048) NULL COMMENT \"\",\n" + |
| " `v2` datetime NULL COMMENT \"\"\n" + |
| ") ENGINE=OLAP\n" + |
| "DUPLICATE KEY(`k1`, `k2`, `k3`)\n" + |
| "COMMENT \"OLAP\"\n" + |
| "PARTITION BY RANGE(`k1`)\n" + |
| "()\n" + |
| "DISTRIBUTED BY HASH(`k1`) BUCKETS 32\n" + |
| "PROPERTIES (\n" + |
| "\"replication_num\" = \"1\",\n" + |
| "\"dynamic_partition.enable\" = \"true\",\n" + |
| "\"dynamic_partition.start\" = \"-3\",\n" + |
| "\"dynamic_partition.end\" = \"3\",\n" + |
| "\"dynamic_partition.time_unit\" = \"day\",\n" + |
| "\"dynamic_partition.prefix\" = \"p\",\n" + |
| "\"dynamic_partition.buckets\" = \"1\"\n" + |
| ");"; |
| createTable(createOlapTblStmt); |
| OlapTable emptyDynamicTable = (OlapTable)Catalog.getCurrentCatalog().getDb("default_cluster:test").getTable("empty_dynamic_partition"); |
| Assert.assertTrue(emptyDynamicTable.getAllPartitions().size() == 4); |
| |
| int partitionCount = 0; |
| Iterator<Partition> partitionIterator = emptyDynamicTable.getAllPartitions().iterator(); |
| while (partitionCount < 4) { |
| String partitionName = partitionIterator.next().getName(); |
| SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); |
| Date partitionDate = sdf.parse(partitionName.substring(1)); |
| |
| Date date = new Date(); |
| Calendar calendar = new GregorianCalendar(); |
| calendar.setTime(date); |
| calendar.add(calendar.DATE, partitionCount); |
| date = calendar.getTime(); |
| |
| Assert.assertEquals(partitionDate.getYear(), date.getYear()); |
| Assert.assertEquals(partitionDate.getMonth(), date.getMonth()); |
| Assert.assertEquals(partitionDate.getDay(), date.getDay()); |
| |
| partitionCount++; |
| } |
| } |
| } |