From 19b6bf0201b62bed6edcb49218ff1dae221badf2 Mon Sep 17 00:00:00 2001 From: Jim Apple Date: Mon, 31 Aug 2015 14:45:28 -0700 Subject: [PATCH] IMPALA-2226: Throw AnalysisError if table properties are too large (for the Hive metastore) This only enforced the defaults in Hive. Users how manually choose to change the schema in Hive may trigger these new analysis exceptions in this commit unnecessarily. The Hive issue tracking the length restrictions is https://issues.apache.org/jira/browse/HIVE-9815 Change-Id: Ia30f286193fe63e51a10f0c19f12b848c4b02f34 Reviewed-on: http://gerrit.cloudera.org:8080/721 Reviewed-by: Jim Apple Tested-by: Internal Jenkins --- .../analysis/AlterTableSetTblProperties.java | 3 + .../impala/analysis/CreateTableStmt.java | 4 + .../impala/catalog/PartitionStatsUtil.java | 11 +-- .../cloudera/impala/util/MetaStoreUtil.java | 35 +++++++ .../impala/analysis/AnalyzeDDLTest.java | 96 +++++++++++++++++++ .../queries/QueryTest/alter-table.test | 54 ++++++++++- .../queries/QueryTest/create.test | 45 ++++++++- tests/metadata/test_ddl.py | 2 +- 8 files changed, 241 insertions(+), 9 deletions(-) diff --git a/fe/src/main/java/com/cloudera/impala/analysis/AlterTableSetTblProperties.java b/fe/src/main/java/com/cloudera/impala/analysis/AlterTableSetTblProperties.java index 0c952eaec..2ee62b5af 100644 --- a/fe/src/main/java/com/cloudera/impala/analysis/AlterTableSetTblProperties.java +++ b/fe/src/main/java/com/cloudera/impala/analysis/AlterTableSetTblProperties.java @@ -25,6 +25,7 @@ import com.cloudera.impala.common.AnalysisException; import com.cloudera.impala.thrift.*; import com.cloudera.impala.util.AvroSchemaParser; import com.cloudera.impala.util.AvroSchemaUtils; +import com.cloudera.impala.util.MetaStoreUtil; import com.google.common.base.Preconditions; import com.google.common.base.Strings; @@ -69,6 +70,8 @@ public class AlterTableSetTblProperties extends AlterTableSetStmt { public void analyze(Analyzer analyzer) throws AnalysisException { super.analyze(analyzer); + MetaStoreUtil.checkShortPropertyMap("Property", tblProperties_); + // Check avro schema when it is set in avro.schema.url or avro.schema.literal to // avoid potential metadata corruption (see IMPALA-2042). // If both properties are set then only check avro.schema.literal and ignore diff --git a/fe/src/main/java/com/cloudera/impala/analysis/CreateTableStmt.java b/fe/src/main/java/com/cloudera/impala/analysis/CreateTableStmt.java index 274584dc4..1bdd6244b 100644 --- a/fe/src/main/java/com/cloudera/impala/analysis/CreateTableStmt.java +++ b/fe/src/main/java/com/cloudera/impala/analysis/CreateTableStmt.java @@ -36,6 +36,7 @@ import com.cloudera.impala.thrift.TTableName; import com.cloudera.impala.util.AvroSchemaConverter; import com.cloudera.impala.util.AvroSchemaParser; import com.cloudera.impala.util.AvroSchemaUtils; +import com.cloudera.impala.util.MetaStoreUtil; import com.google.common.base.Preconditions; import com.google.common.base.Strings; import com.google.common.collect.Lists; @@ -191,6 +192,9 @@ public class CreateTableStmt extends StatementBase { tableName_.analyze(); owner_ = analyzer.getUser().getName(); + MetaStoreUtil.checkShortPropertyMap("Property", tblProperties_); + MetaStoreUtil.checkShortPropertyMap("Serde property", serdeProperties_); + if (analyzer.dbContainsTable(tableName_.getDb(), tableName_.getTbl(), Privilege.CREATE) && !ifNotExists_) { throw new AnalysisException(Analyzer.TBL_ALREADY_EXISTS_ERROR_MSG + tableName_); diff --git a/fe/src/main/java/com/cloudera/impala/catalog/PartitionStatsUtil.java b/fe/src/main/java/com/cloudera/impala/catalog/PartitionStatsUtil.java index d4f2ef7de..17b8371aa 100644 --- a/fe/src/main/java/com/cloudera/impala/catalog/PartitionStatsUtil.java +++ b/fe/src/main/java/com/cloudera/impala/catalog/PartitionStatsUtil.java @@ -18,6 +18,7 @@ import com.cloudera.impala.thrift.TPartitionStats; import com.cloudera.impala.common.JniUtil; import com.cloudera.impala.common.ImpalaException; import com.cloudera.impala.common.ImpalaRuntimeException; +import com.cloudera.impala.util.MetaStoreUtil; import java.util.Iterator; import java.util.List; @@ -43,9 +44,6 @@ public class PartitionStatsUtil { public static final String INTERMEDIATE_STATS_CHUNK_PREFIX = "impala_intermediate_stats_chunk"; - // HMS-imposed maximum length of a string parameter for a partition. - private static final int HMS_MAX_CHUNKLEN = 4000; - private final static Logger LOG = LoggerFactory.getLogger(PartitionStatsUtil.class); /** @@ -103,9 +101,10 @@ public class PartitionStatsUtil { TSerializer serializer = new TSerializer(protocolFactory); byte[] serialized = serializer.serialize(partStats); String base64 = new String(Base64.encodeBase64(serialized)); - List chunks = chunkStringForHms(base64, HMS_MAX_CHUNKLEN); - partition.putToParameters(INTERMEDIATE_STATS_NUM_CHUNKS, - Integer.toString(chunks.size())); + List chunks = + chunkStringForHms(base64, MetaStoreUtil.MAX_PROPERTY_VALUE_LENGTH); + partition.putToParameters( + INTERMEDIATE_STATS_NUM_CHUNKS, Integer.toString(chunks.size())); for (int i = 0; i < chunks.size(); ++i) { partition.putToParameters(INTERMEDIATE_STATS_CHUNK_PREFIX + i, chunks.get(i)); } diff --git a/fe/src/main/java/com/cloudera/impala/util/MetaStoreUtil.java b/fe/src/main/java/com/cloudera/impala/util/MetaStoreUtil.java index 56fc69916..511deb6a5 100644 --- a/fe/src/main/java/com/cloudera/impala/util/MetaStoreUtil.java +++ b/fe/src/main/java/com/cloudera/impala/util/MetaStoreUtil.java @@ -15,6 +15,7 @@ package com.cloudera.impala.util; import java.util.List; +import java.util.Map; import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.metastore.HiveMetaStoreClient; @@ -24,6 +25,7 @@ import org.apache.log4j.Logger; import org.apache.thrift.TException; import com.cloudera.impala.catalog.HdfsTable; +import com.cloudera.impala.common.AnalysisException; import com.google.common.base.Preconditions; import com.google.common.collect.Lists; @@ -42,6 +44,12 @@ public class MetaStoreUtil { // Maximum length of the string representation of a type that the HMS can store. public static final int MAX_TYPE_NAME_LENGTH = 4000; + // The longest strings Hive accepts for [serde] property keys. + public static final int MAX_PROPERTY_KEY_LENGTH = 256; + + // The longest strings Hive accepts for [serde] property values. + public static final int MAX_PROPERTY_VALUE_LENGTH = 4000; + // The default maximum number of partitions to fetch from the Hive metastore in one // RPC. private static final short DEFAULT_MAX_PARTITIONS_PER_RPC = 1000; @@ -131,4 +139,31 @@ public class MetaStoreUtil { } return fetchedPartitions; } + + /** + * Checks that a given 'property' is short enough for HMS to handle. If not, throws an + * 'AnalysisException' with 'name' as its prefix. + */ + public static void checkShortProperty(String name, String property, int length) + throws AnalysisException { + if (property.length() > length) { + throw new AnalysisException( + name + " length must be <= " + length + ": " + property.length()); + } + } + + /** + * Checks that each key and value in a proprty map is short enough for HMS to handle. If + * not, An 'AnalysisException' is thrown with 'mapName' as its prefix. + */ + public static void checkShortPropertyMap( + String mapName, Map propertyMap) throws AnalysisException { + if (null != propertyMap) { + for (Map.Entry property : propertyMap.entrySet()) { + checkShortProperty(mapName + " key", property.getKey(), MAX_PROPERTY_KEY_LENGTH); + checkShortProperty( + mapName + " value", property.getValue(), MAX_PROPERTY_VALUE_LENGTH); + } + } + } } diff --git a/fe/src/test/java/com/cloudera/impala/analysis/AnalyzeDDLTest.java b/fe/src/test/java/com/cloudera/impala/analysis/AnalyzeDDLTest.java index 921a99d4f..5eb16e0d0 100644 --- a/fe/src/test/java/com/cloudera/impala/analysis/AnalyzeDDLTest.java +++ b/fe/src/test/java/com/cloudera/impala/analysis/AnalyzeDDLTest.java @@ -33,6 +33,7 @@ import org.junit.Test; import com.cloudera.impala.catalog.ArrayType; import com.cloudera.impala.catalog.Catalog; import com.cloudera.impala.catalog.CatalogException; +import com.cloudera.impala.analysis.CreateTableStmt; import com.cloudera.impala.catalog.DataSource; import com.cloudera.impala.catalog.DataSourceTable; import com.cloudera.impala.catalog.PrimitiveType; @@ -344,6 +345,55 @@ public class AnalyzeDDLTest extends AnalyzerTest { "set tblproperties('a'='1')"); AnalyzesOk("alter table functional.alltypes PARTITION (year=2010, month=11) " + "set serdeproperties ('a'='2')"); + + { + // Check that long_properties fail at the analysis layer + String long_property_key = ""; + for (int i = 0; i < MetaStoreUtil.MAX_PROPERTY_KEY_LENGTH; ++i) { + long_property_key += 'k'; + } + String long_property_value = ""; + for (int i = 0; i < MetaStoreUtil.MAX_PROPERTY_VALUE_LENGTH; ++i) { + long_property_value += 'v'; + } + + // At this point long_property_{key_value} are actually not quite long enough to + // cause analysis to fail. + + AnalyzesOk("alter table functional.alltypes " + + "set serdeproperties ('" + long_property_key + "'='" + long_property_value + + "') "); + + AnalyzesOk("alter table functional.alltypes " + + "set tblproperties ('" + long_property_key + "'='" + long_property_value + + "') "); + + long_property_key += 'X'; + long_property_value += 'X'; + // Now that long_property_{key,value} are one character longer, they are too long + // for the analyzer. + + AnalysisError("alter table functional.alltypes set " + + "tblproperties ('" + long_property_key + "'='value')", + "Property key length must be <= " + MetaStoreUtil.MAX_PROPERTY_KEY_LENGTH + ": " + + (MetaStoreUtil.MAX_PROPERTY_KEY_LENGTH + 1)); + + AnalysisError("alter table functional.alltypes set " + + "tblproperties ('key'='" + long_property_value + "')", + "Property value length must be <= " + MetaStoreUtil.MAX_PROPERTY_VALUE_LENGTH + + ": " + (MetaStoreUtil.MAX_PROPERTY_VALUE_LENGTH + 1)); + + AnalysisError("alter table functional.alltypes set " + + "serdeproperties ('" + long_property_key + "'='value')", + "Property key length must be <= " + MetaStoreUtil.MAX_PROPERTY_KEY_LENGTH + ": " + + (MetaStoreUtil.MAX_PROPERTY_KEY_LENGTH + 1)); + + AnalysisError("alter table functional.alltypes set " + + "serdeproperties ('key'='" + long_property_value + "')", + "Property value length must be <= " + MetaStoreUtil.MAX_PROPERTY_VALUE_LENGTH + + ": " + (MetaStoreUtil.MAX_PROPERTY_VALUE_LENGTH + 1)); + } + // Arbitrary exprs as partition key values. Constant exprs are ok. AnalyzesOk("alter table functional.alltypes PARTITION " + "(year=cast(100*20+10 as INT), month=cast(2+9 as INT)) " + @@ -1178,6 +1228,52 @@ public class AnalyzeDDLTest extends AnalyzerTest { AnalyzesOk("create table functional.new_table (c char(250))"); AnalyzesOk("create table new_table (i int) PARTITIONED BY (c char(3))"); + { + // Check that long_properties fail at the analysis layer + String long_property_key = ""; + for (int i = 0; i < MetaStoreUtil.MAX_PROPERTY_KEY_LENGTH; ++i) { + long_property_key += 'k'; + } + String long_property_value = ""; + for (int i = 0; i < MetaStoreUtil.MAX_PROPERTY_VALUE_LENGTH; ++i) { + long_property_value += 'v'; + } + + // At this point long_property_{key_value} are actually not quite long enough to + // cause analysis to fail. + + AnalyzesOk("create table new_table (i int) " + + "with serdeproperties ('" + long_property_key + "'='" + long_property_value + + "') " + + "tblproperties ('" + long_property_key + "'='" + long_property_value + "')"); + + long_property_key += 'X'; + long_property_value += 'X'; + // Now that long_property_{key,value} are one character longer, they are too long + // for the analyzer. + + AnalysisError("create table new_table (i int) " + + "tblproperties ('" + long_property_key + "'='value')", + "Property key length must be <= " + MetaStoreUtil.MAX_PROPERTY_KEY_LENGTH + ": " + + (MetaStoreUtil.MAX_PROPERTY_KEY_LENGTH + 1)); + + AnalysisError("create table new_table (i int) " + + "tblproperties ('key'='" + long_property_value + "')", + "Property value length must be <= " + MetaStoreUtil.MAX_PROPERTY_VALUE_LENGTH + + ": " + (MetaStoreUtil.MAX_PROPERTY_VALUE_LENGTH + 1)); + + AnalysisError("create table new_table (i int) " + + "with serdeproperties ('" + long_property_key + "'='value')", + "Serde property key length must be <= " + MetaStoreUtil.MAX_PROPERTY_KEY_LENGTH + + ": " + (MetaStoreUtil.MAX_PROPERTY_KEY_LENGTH + 1)); + + AnalysisError("create table new_table (i int) " + + "with serdeproperties ('key'='" + long_property_value + "')", + "Serde property value length must be <= " + + MetaStoreUtil.MAX_PROPERTY_VALUE_LENGTH + ": " + + (MetaStoreUtil.MAX_PROPERTY_VALUE_LENGTH + 1)); + } + // Supported file formats. Exclude Avro since it is tested separately. String [] fileFormats = {"TEXTFILE", "SEQUENCEFILE", "PARQUET", "PARQUETFILE", "RCFILE"}; diff --git a/testdata/workloads/functional-query/queries/QueryTest/alter-table.test b/testdata/workloads/functional-query/queries/QueryTest/alter-table.test index 1e7a0e37a..1f9b4f048 100644 --- a/testdata/workloads/functional-query/queries/QueryTest/alter-table.test +++ b/testdata/workloads/functional-query/queries/QueryTest/alter-table.test @@ -750,4 +750,56 @@ show tables in alter_table_test_db2 like '%mv%' ---- RESULTS ---- TYPES STRING -==== \ No newline at end of file +==== +---- QUERY +# Test tblproperties and serdeproperties key and property value length +create database if not exists test_alter_property_length_db +==== +---- QUERY +show databases like 'test_alter_property_length_db' +---- RESULTS +'test_alter_property_length_db' +---- TYPES +STRING +==== +---- QUERY +drop table if exists test_alter_property_length_db.property_length +---- RESULTS +==== +---- QUERY +# alter with serde property lengths just within limits +create table test_alter_property_length_db.property_length (i int); +alter table test_alter_property_length_db.property_length +set serdeproperties( +'keykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeyk' += +'valuevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevalue' +) +---- RESULTS +==== +---- QUERY +# alter with property lengths just within limits +alter table test_alter_property_length_db.property_length +set tblproperties( +'keykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeyk' += +'valuevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevalue' +) +---- RESULTS +==== +---- QUERY +drop table if exists test_alter_property_length_db.property_length +---- RESULTS +==== +---- QUERY +# Need to switch databases before dropping +use default; +drop database if exists test_alter_property_length_db +---- RESULTS +==== +---- QUERY +show databases like 'test_alter_property_length_db' +---- RESULTS +---- TYPES +STRING +==== diff --git a/testdata/workloads/functional-query/queries/QueryTest/create.test b/testdata/workloads/functional-query/queries/QueryTest/create.test index 1aba953c1..01fb95050 100644 --- a/testdata/workloads/functional-query/queries/QueryTest/create.test +++ b/testdata/workloads/functional-query/queries/QueryTest/create.test @@ -895,4 +895,47 @@ drop database test_drop_restrict_db restrict ---- QUERY show databases like 'test_drop_restrict_db' ---- RESULTS -==== \ No newline at end of file +==== +---- QUERY +# Test tblproperties and serdeproperties key and property value length +create database if not exists test_property_length_db +==== +---- QUERY +show databases like 'test_property_length_db' +---- RESULTS +'test_property_length_db' +---- TYPES +STRING +==== +---- QUERY +drop table if exists test_property_length_db.short_properties +---- RESULTS +==== +---- QUERY +# create with tblproperty lengths just within limits +create table test_property_length_db.short_properties (i int) +with serdeproperties( +'keykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeyk' += +'valuevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevalue' +) tblproperties( +'keykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeyk' += +'valuevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevalue' +) +---- RESULTS +==== +---- QUERY +drop table if exists test_property_length_db.short_properties +---- RESULTS +==== +---- QUERY +# Need to switch databases before dropping +use default; +drop database if exists test_property_length_db +---- RESULTS +==== +---- QUERY +show databases like 'test_property_length_db' +---- RESULTS +==== diff --git a/tests/metadata/test_ddl.py b/tests/metadata/test_ddl.py index 2b835bb17..798a7566f 100644 --- a/tests/metadata/test_ddl.py +++ b/tests/metadata/test_ddl.py @@ -210,7 +210,7 @@ class TestDdlStatements(ImpalaTestSuite): @SkipIfS3.insert @pytest.mark.execute_serially - def test_create(self, vector): + def test_create_table(self, vector): vector.get_value('exec_option')['abort_on_error'] = False self._create_db('ddl_test_db', sync=True) self.run_test_case('QueryTest/create', vector, use_db='ddl_test_db',