HIVE-14671 : Merge branch 'master' into hive-14535 (Wei Zheng)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/78f28c88 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/78f28c88 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/78f28c88 Branch: refs/heads/hive-14535 Commit: 78f28c8855f9a2867c81f911cf56684c09a35ea9 Parents: d9e4ae0 ee3a3ed Author: Wei Zheng <[email protected]> Authored: Tue Jun 6 11:34:43 2017 -0700 Committer: Wei Zheng <[email protected]> Committed: Tue Jun 6 11:34:43 2017 -0700 ---------------------------------------------------------------------- .../apache/hive/beeline/HiveSchemaHelper.java | 581 ------ .../org/apache/hive/beeline/HiveSchemaTool.java | 79 +- .../beeline/SeparatedValuesOutputFormat.java | 11 +- .../apache/hive/beeline/TestHiveSchemaTool.java | 1 + bin/ext/version.sh | 2 +- bin/hive | 20 +- .../hadoop/hive/common/StatsSetupConst.java | 7 +- .../org/apache/hadoop/hive/conf/HiveConf.java | 6 + .../hive/http/Log4j2ConfiguratorServlet.java | 18 +- .../hadoop/hive/druid/serde/DruidSerDe.java | 95 +- .../hadoop/hive/druid/TestDruidSerDe.java | 169 +- .../results/positive/external_table_ppd.q.out | 2 +- .../positive/hbase_binary_storage_queries.q.out | 4 +- .../src/test/results/positive/hbasestats.q.out | 2 +- .../hcatalog/templeton/tool/TempletonUtils.java | 28 +- .../templeton/tool/TestTempletonUtils.java | 11 +- .../write_final_output_blobstore.q.out | 16 +- itests/hive-unit/pom.xml | 6 + .../hive/metastore/TestReplChangeManager.java | 89 +- ...TestReplicationScenariosAcrossInstances.java | 166 +- .../hadoop/hive/ql/parse/WarehouseInstance.java | 176 +- .../org/apache/hive/beeline/TestSchemaTool.java | 6 +- .../test/resources/testconfiguration.properties | 6 +- .../hadoop/hive/cli/control/CliConfigs.java | 1 + .../java/org/apache/hive/beeline/QFile.java | 1 + .../llap/io/encoded/OrcEncodedDataReader.java | 2 +- .../llap/io/metadata/OrcStripeMetadata.java | 4 +- .../hadoop/hive/metastore/HiveAlterHandler.java | 4 +- .../hadoop/hive/metastore/HiveMetaStore.java | 14 +- .../hive/metastore/IMetaStoreSchemaInfo.java | 15 + .../hive/metastore/MetaStoreSchemaInfo.java | 33 + .../hadoop/hive/metastore/MetaStoreUtils.java | 22 +- .../hadoop/hive/metastore/ObjectStore.java | 12 +- .../hive/metastore/ReplChangeManager.java | 51 +- .../apache/hadoop/hive/metastore/Warehouse.java | 4 + .../hive/metastore/tools/HiveSchemaHelper.java | 640 +++++++ .../hive/metastore/TestMetaStoreUtils.java | 16 +- .../hadoop/hive/metastore/TestObjectStore.java | 48 +- pom.xml | 4 +- ql/pom.xml | 13 + .../org/apache/hadoop/hive/ql/exec/DDLTask.java | 4 +- .../apache/hadoop/hive/ql/exec/Operator.java | 10 +- .../hadoop/hive/ql/exec/ReplCopyTask.java | 22 +- .../hadoop/hive/ql/exec/spark/SparkTask.java | 2 +- .../spark/status/RemoteSparkJobMonitor.java | 14 + .../ql/exec/spark/status/SparkJobMonitor.java | 12 + .../hive/ql/exec/tez/TezSessionPoolManager.java | 9 +- .../apache/hadoop/hive/ql/exec/tez/TezTask.java | 2 +- .../ql/exec/tez/monitoring/TezJobMonitor.java | 8 +- .../exec/tez/monitoring/TezProgressMonitor.java | 42 +- .../fast/VectorMapJoinFastHashTable.java | 3 +- .../apache/hadoop/hive/ql/metadata/Hive.java | 2 +- .../ql/optimizer/CountDistinctRewriteProc.java | 504 +++++ .../hadoop/hive/ql/optimizer/MergeJoinProc.java | 23 +- .../hadoop/hive/ql/optimizer/Optimizer.java | 4 + .../calcite/cost/HiveAlgorithmsUtil.java | 4 +- .../optimizer/calcite/cost/HiveCostModel.java | 7 +- .../calcite/cost/HiveDefaultCostModel.java | 2 +- .../calcite/cost/HiveOnTezCostModel.java | 4 +- .../optimizer/calcite/cost/HiveRelMdCost.java | 2 +- .../rules/HiveFilterAggregateTransposeRule.java | 6 +- .../calcite/rules/HiveRelDecorrelator.java | 46 +- .../stats/FilterSelectivityEstimator.java | 9 +- .../stats/HiveRelMdDistinctRowCount.java | 2 +- .../calcite/stats/HiveRelMdRowCount.java | 3 +- .../calcite/stats/HiveRelMdSelectivity.java | 4 +- .../calcite/stats/HiveRelMdUniqueKeys.java | 2 +- .../hadoop/hive/ql/parse/CalcitePlanner.java | 88 +- .../hive/ql/parse/DDLSemanticAnalyzer.java | 4 +- .../ql/parse/ReplicationSemanticAnalyzer.java | 50 +- .../hadoop/hive/ql/parse/SemanticAnalyzer.java | 36 +- .../hadoop/hive/ql/parse/repl/PathBuilder.java | 66 + .../repl/dump/events/CreateFunctionHandler.java | 9 +- .../parse/repl/dump/io/FunctionSerializer.java | 40 +- .../hive/ql/parse/repl/load/MetaData.java | 2 +- .../load/message/CreateFunctionHandler.java | 156 +- .../hadoop/hive/ql/plan/CreateTableDesc.java | 7 +- .../apache/hadoop/hive/ql/plan/GroupByDesc.java | 15 + .../hive/ql/exec/tez/TestTezSessionPool.java | 43 +- .../tez/monitoring/TestTezProgressMonitor.java | 3 +- .../PrimaryToReplicaResourceFunctionTest.java | 87 + .../orderby_position_unsupported.q | 3 +- .../clientnegative/spark_stage_max_tasks.q | 6 + .../queries/clientpositive/alterColumnStats.q | 21 + .../clientpositive/alterColumnStatsPart.q | 47 + .../queries/clientpositive/count_dist_rewrite.q | 65 + .../test/queries/clientpositive/druid_basic2.q | 4 + .../test/queries/clientpositive/filter_aggr.q | 18 + .../test/queries/clientpositive/order_by_pos.q | 20 + .../test/queries/clientpositive/perf/query4.q | 111 ++ .../test/queries/clientpositive/perf/query47.q | 53 + .../test/queries/clientpositive/perf/query57.q | 50 + .../test/queries/clientpositive/perf/query74.q | 63 + ql/src/test/queries/clientpositive/tez-tag.q | 68 + .../clientnegative/alter_file_format.q.out | 2 +- .../orderby_position_unsupported.q.out | 4 +- .../spark/spark_stage_max_tasks.q.out | 77 + .../clientnegative/unset_table_property.q.out | 2 +- .../clientpositive/alterColumnStats.q.out | 158 ++ .../clientpositive/alterColumnStatsPart.q.out | 507 +++++ .../clientpositive/alter_file_format.q.out | 26 +- .../alter_partition_clusterby_sortby.q.out | 6 +- .../clientpositive/alter_skewed_table.q.out | 12 +- .../alter_table_add_partition.q.out | 2 +- .../clientpositive/alter_table_not_sorted.q.out | 4 +- .../clientpositive/autoColumnStats_3.q.out | 2 +- .../clientpositive/autoColumnStats_4.q.out | 2 +- .../insert_overwrite_local_directory_1.q.out | 1769 ++++++++++++++++++ .../clientpositive/binary_output_format.q.out | 16 +- .../test/results/clientpositive/bucket1.q.out | 4 +- .../test/results/clientpositive/bucket2.q.out | 4 +- .../clientpositive/bucket_map_join_spark1.q.out | 4 +- .../clientpositive/bucket_map_join_spark2.q.out | 4 +- .../clientpositive/bucket_map_join_spark3.q.out | 4 +- .../results/clientpositive/bucketmapjoin5.q.out | 16 +- .../clientpositive/bucketmapjoin_negative.q.out | 16 +- .../bucketmapjoin_negative2.q.out | 16 +- ...names_with_leading_and_trailing_spaces.q.out | 4 +- .../results/clientpositive/compustat_avro.q.out | 4 +- .../clientpositive/count_dist_rewrite.q.out | 1151 ++++++++++++ .../create_alter_list_bucketing_table1.q.out | 14 +- .../results/clientpositive/create_like.q.out | 18 +- .../results/clientpositive/create_like2.q.out | 2 +- .../clientpositive/create_like_tbl_props.q.out | 10 +- .../clientpositive/create_like_view.q.out | 6 +- .../clientpositive/create_skewed_table1.q.out | 6 +- .../create_table_like_stats.q.out | 2 +- .../create_with_constraints.q.out | 72 +- .../clientpositive/database_location.q.out | 4 +- .../clientpositive/default_file_format.q.out | 16 +- .../describe_comment_indent.q.out | 2 +- .../describe_comment_nonascii.q.out | 2 +- .../describe_formatted_view_partitioned.q.out | 2 +- .../clientpositive/describe_syntax.q.out | 4 +- .../results/clientpositive/describe_table.q.out | 24 +- .../display_colstats_tbllvl.q.out | 2 +- .../results/clientpositive/druid_basic1.q.out | 4 +- .../results/clientpositive/druid_basic2.q.out | 58 +- .../clientpositive/druid_intervals.q.out | 2 +- .../clientpositive/druid_timeseries.q.out | 2 +- .../results/clientpositive/druid_topn.q.out | 2 +- .../results/clientpositive/filter_aggr.q.out | 680 +++++++ .../clientpositive/groupby_map_ppr.q.out | 4 +- .../groupby_map_ppr_multi_distinct.q.out | 4 +- .../results/clientpositive/groupby_ppr.q.out | 4 +- .../groupby_ppr_multi_distinct.q.out | 4 +- .../clientpositive/groupby_sort_11.q.out | 39 +- .../clientpositive/groupby_sort_1_23.q.out | 56 +- .../results/clientpositive/groupby_sort_6.q.out | 4 +- .../clientpositive/groupby_sort_skew_1_23.q.out | 56 +- .../results/clientpositive/input_part1.q.out | 16 +- .../results/clientpositive/input_part2.q.out | 32 +- .../insert_values_orig_table_use_metadata.q.out | 4 +- ql/src/test/results/clientpositive/join17.q.out | 4 +- ql/src/test/results/clientpositive/join26.q.out | 4 +- ql/src/test/results/clientpositive/join32.q.out | 4 +- ql/src/test/results/clientpositive/join33.q.out | 4 +- ql/src/test/results/clientpositive/join34.q.out | 6 +- ql/src/test/results/clientpositive/join35.q.out | 6 +- ql/src/test/results/clientpositive/join9.q.out | 4 +- .../results/clientpositive/join_map_ppr.q.out | 16 +- .../clientpositive/list_bucket_dml_14.q.out | 4 +- .../clientpositive/llap/autoColumnStats_2.q.out | 2 +- .../results/clientpositive/llap/bucket2.q.out | 4 +- .../results/clientpositive/llap/bucket4.q.out | 4 +- .../results/clientpositive/llap/bucket5.q.out | 20 +- .../clientpositive/llap/bucket_many.q.out | 4 +- .../clientpositive/llap/bucketmapjoin1.q.out | 4 +- .../clientpositive/llap/bucketmapjoin2.q.out | 4 +- .../clientpositive/llap/bucketmapjoin3.q.out | 4 +- .../clientpositive/llap/bucketmapjoin4.q.out | 4 +- ...names_with_leading_and_trailing_spaces.q.out | 4 +- .../llap/count_dist_rewrite.q.out | 1169 ++++++++++++ .../llap/disable_merge_for_bucketing.q.out | 4 +- .../llap/dynamic_semijoin_reduction.q.out | 2 +- .../llap/dynamic_semijoin_user_level.q.out | 2 +- .../clientpositive/llap/join32_lessSize.q.out | 8 +- .../clientpositive/llap/metadataonly1.q.out | 40 +- .../clientpositive/llap/orc_create.q.out | 4 +- .../clientpositive/llap/orc_llap_counters.q.out | 2 +- .../clientpositive/llap/orc_ppd_basic.q.out | 230 --- .../llap/orc_ppd_schema_evol_3a.q.out | 6 +- .../llap/reduce_deduplicate.q.out | 4 +- .../results/clientpositive/llap/sample1.q.out | 4 +- .../results/clientpositive/llap/stats11.q.out | 4 +- .../clientpositive/llap/subquery_scalar.q.out | 2 +- .../results/clientpositive/llap/sysdb.q.out | 10 +- ql/src/test/results/clientpositive/mm_all.q.out | 35 +- .../results/clientpositive/nullgroup4.q.out | 41 +- .../results/clientpositive/order_by_pos.q.out | 129 ++ .../parquet_array_null_element.q.out | 2 +- .../results/clientpositive/parquet_create.q.out | 2 +- .../parquet_int96_timestamp.q.out | 4 +- .../clientpositive/part_inherit_tbl_props.q.out | 2 +- .../part_inherit_tbl_props_empty.q.out | 2 +- .../part_inherit_tbl_props_with_star.q.out | 2 +- .../clientpositive/partial_column_stats.q.out | 2 +- .../partition_coltype_literals.q.out | 8 +- ql/src/test/results/clientpositive/pcr.q.out | 32 +- .../results/clientpositive/perf/query16.q.out | 318 ++-- .../results/clientpositive/perf/query28.q.out | 58 +- .../results/clientpositive/perf/query4.q.out | 1128 +++++++++++ .../results/clientpositive/perf/query47.q.out | 357 ++++ .../results/clientpositive/perf/query57.q.out | 351 ++++ .../results/clientpositive/perf/query74.q.out | 529 ++++++ .../results/clientpositive/perf/query94.q.out | 318 ++-- .../results/clientpositive/perf/query95.q.out | 302 +-- .../results/clientpositive/quotedid_stats.q.out | 2 +- .../clientpositive/rand_partitionpruner2.q.out | 16 +- .../clientpositive/rcfile_default_format.q.out | 6 +- .../test/results/clientpositive/sample1.q.out | 16 +- .../test/results/clientpositive/sample2.q.out | 16 +- .../test/results/clientpositive/sample4.q.out | 16 +- .../test/results/clientpositive/sample5.q.out | 16 +- .../test/results/clientpositive/sample6.q.out | 16 +- .../test/results/clientpositive/sample7.q.out | 16 +- .../clientpositive/show_tblproperties.q.out | 10 +- .../results/clientpositive/spark/bucket2.q.out | 4 +- .../results/clientpositive/spark/bucket4.q.out | 4 +- .../results/clientpositive/spark/bucket5.q.out | 8 +- .../spark/bucket_map_join_spark1.q.out | 4 +- .../spark/bucket_map_join_spark2.q.out | 4 +- .../spark/bucket_map_join_spark3.q.out | 4 +- .../clientpositive/spark/bucketmapjoin1.q.out | 4 +- .../clientpositive/spark/bucketmapjoin2.q.out | 4 +- .../clientpositive/spark/bucketmapjoin3.q.out | 4 +- .../clientpositive/spark/bucketmapjoin4.q.out | 4 +- .../clientpositive/spark/bucketmapjoin5.q.out | 4 +- .../spark/bucketmapjoin_negative.q.out | 4 +- .../spark/bucketmapjoin_negative2.q.out | 4 +- .../spark/disable_merge_for_bucketing.q.out | 4 +- .../clientpositive/spark/groupby_map_ppr.q.out | 4 +- .../spark/groupby_map_ppr_multi_distinct.q.out | 4 +- .../clientpositive/spark/groupby_ppr.q.out | 4 +- .../spark/groupby_ppr_multi_distinct.q.out | 4 +- .../spark/groupby_sort_1_23.q.out | 20 +- .../spark/groupby_sort_skew_1_23.q.out | 20 +- .../clientpositive/spark/input_part2.q.out | 8 +- .../results/clientpositive/spark/join17.q.out | 4 +- .../results/clientpositive/spark/join26.q.out | 4 +- .../results/clientpositive/spark/join32.q.out | 4 +- .../clientpositive/spark/join32_lessSize.q.out | 8 +- .../results/clientpositive/spark/join33.q.out | 4 +- .../results/clientpositive/spark/join34.q.out | 4 +- .../results/clientpositive/spark/join35.q.out | 4 +- .../results/clientpositive/spark/join9.q.out | 4 +- .../clientpositive/spark/join_map_ppr.q.out | 4 +- .../clientpositive/spark/nullgroup4.q.out | 31 +- .../test/results/clientpositive/spark/pcr.q.out | 8 +- .../spark/reduce_deduplicate.q.out | 4 +- .../results/clientpositive/spark/sample1.q.out | 4 +- .../results/clientpositive/spark/sample2.q.out | 4 +- .../results/clientpositive/spark/sample4.q.out | 4 +- .../results/clientpositive/spark/sample5.q.out | 4 +- .../results/clientpositive/spark/sample6.q.out | 4 +- .../results/clientpositive/spark/sample7.q.out | 4 +- .../results/clientpositive/spark/stats0.q.out | 8 +- .../results/clientpositive/spark/stats3.q.out | 2 +- ql/src/test/results/clientpositive/stats0.q.out | 20 +- ql/src/test/results/clientpositive/stats3.q.out | 2 +- .../temp_table_display_colstats_tbllvl.q.out | 6 +- .../results/clientpositive/tez/tez-tag.q.out | 301 +++ .../test/results/clientpositive/udf_count.q.out | 39 +- .../clientpositive/unicode_notation.q.out | 6 +- .../unset_table_view_property.q.out | 18 +- .../clientpositive/vector_empty_where.q.out | 300 ++- 266 files changed, 13050 insertions(+), 2477 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/78f28c88/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/78f28c88/itests/src/test/resources/testconfiguration.properties ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/78f28c88/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/78f28c88/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java ---------------------------------------------------------------------- diff --cc metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java index b13b0a4,ff8412c..e7bbd62 --- a/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java +++ b/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java @@@ -1964,60 -1969,13 +1972,68 @@@ public class MetaStoreUtils } return metaException; } + + public static List<String> getColumnNames(List<FieldSchema> schema) { + List<String> cols = new ArrayList<>(); + for (FieldSchema fs : schema) { + cols.add(fs.getName()); + } + return cols; + } + // TODO The following two utility methods can be moved to AcidUtils once no class in metastore is relying on them, + // right now ObjectStore.getAllMmTablesForCleanup is calling these method + /** + * Checks if a table is an ACID table that only supports INSERT, but not UPDATE/DELETE + * @param params table properties + * @return true if table is an INSERT_ONLY table, false otherwise + */ + // TODO# also check that transactional is true + public static boolean isInsertOnlyTable(Map<String, String> params) { + return isInsertOnlyTable(params, false); + } + + public static boolean isInsertOnlyTable(Map<String, String> params, boolean isCtas) { + String transactionalProp = params.get(hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES); + return (transactionalProp != null && "insert_only".equalsIgnoreCase(transactionalProp)); + } + + public static boolean isInsertOnlyTable(Properties params) { + // TODO# redirect for now - fix before merge + HashMap<String, String> testMap = new HashMap<String, String>(); + for (String n : params.stringPropertyNames()) { + testMap.put(n, params.getProperty(n)); + } + return isInsertOnlyTable(testMap); + } + + /** The method for altering table props; may set the table to MM, non-MM, or not affect MM. */ + public static Boolean isToInsertOnlyTable(Map<String, String> props) { + // TODO# Setting these separately is a very hairy issue in certain combinations, since we + // cannot decide what type of table this becomes without taking both into account, and + // in many cases the conversion might be illegal. + // The only thing we allow is tx = true w/o tx-props, for backward compat. + String transactional = props.get(hive_metastoreConstants.TABLE_IS_TRANSACTIONAL); + String transactionalProp = props.get(hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES); + if (transactional == null && transactionalProp == null) return null; // Not affected. + boolean isSetToTxn = "true".equalsIgnoreCase(transactional); + if (transactionalProp == null) { + if (isSetToTxn) return false; // Assume the full ACID table. + throw new RuntimeException("Cannot change '" + hive_metastoreConstants.TABLE_IS_TRANSACTIONAL + + "' without '" + hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES + "'"); + } + if (!"insert_only".equalsIgnoreCase(transactionalProp)) return false; // Not MM. + if (!isSetToTxn) { + throw new RuntimeException("Cannot set '" + + hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES + "' to 'insert_only' without " + + "setting '" + hive_metastoreConstants.TABLE_IS_TRANSACTIONAL + "' to 'true'"); + } + return true; + } + + public static boolean isRemovedInsertOnlyTable(Set<String> removedSet) { + boolean hasTxn = removedSet.contains(hive_metastoreConstants.TABLE_IS_TRANSACTIONAL), + hasProps = removedSet.contains(hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES); + return hasTxn || hasProps; + } } http://git-wip-us.apache.org/repos/asf/hive/blob/78f28c88/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/78f28c88/metastore/src/java/org/apache/hadoop/hive/metastore/Warehouse.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/78f28c88/metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java ---------------------------------------------------------------------- diff --cc metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java index e0302fb,b28ea73..9542990 --- a/metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java +++ b/metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java @@@ -63,7 -63,8 +63,8 @@@ import org.mockito.Mockito import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.common.base.Supplier; + import com.google.common.collect.ImmutableList; - import javax.jdo.Query; public class TestObjectStore { http://git-wip-us.apache.org/repos/asf/hive/blob/78f28c88/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/78f28c88/ql/src/java/org/apache/hadoop/hive/ql/exec/ReplCopyTask.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/78f28c88/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/78f28c88/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/78f28c88/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/78f28c88/ql/src/java/org/apache/hadoop/hive/ql/plan/CreateTableDesc.java ----------------------------------------------------------------------
