HIVE-12994: Implement support for NULLS FIRST/NULLS LAST (Jesus Camacho Rodriguez, reviewed by Ashutosh Chauhan)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/9350b693 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/9350b693 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/9350b693 Branch: refs/heads/master Commit: 9350b69341d509d4fc6d6e2f82bf3d6123ee11f3 Parents: 01fd684 Author: Jesus Camacho Rodriguez <[email protected]> Authored: Wed Feb 24 14:19:41 2016 +0100 Committer: Jesus Camacho Rodriguez <[email protected]> Committed: Wed Mar 2 11:59:05 2016 +0100 ---------------------------------------------------------------------- data/files/over4_null | 5 + .../test/resources/testconfiguration.properties | 1 + metastore/if/hive_metastore.thrift | 5 +- .../upgrade/derby/034-HIVE-12994.derby.sql | 2 + .../upgrade/derby/hive-schema-2.1.0.derby.sql | 2 +- .../derby/upgrade-2.0.0-to-2.1.0.derby.sql | 1 + .../upgrade/mssql/019-HIVE-12994.mssql.sql | 2 + .../upgrade/mssql/hive-schema-2.1.0.mssql.sql | 1 + .../mssql/upgrade-2.0.0-to-2.1.0.mssql.sql | 1 + .../upgrade/mysql/034-HIVE-12994.mysql.sql | 2 + .../upgrade/mysql/hive-schema-2.1.0.mysql.sql | 1 + .../mysql/upgrade-2.0.0-to-2.1.0.mysql.sql | 1 + .../upgrade/oracle/034-HIVE-12994.oracle.sql | 2 + .../upgrade/oracle/hive-schema-2.1.0.oracle.sql | 1 + .../oracle/upgrade-2.0.0-to-2.1.0.oracle.sql | 1 + .../postgres/033-HIVE-12994.postgres.sql | 2 + .../postgres/hive-schema-2.1.0.postgres.sql | 1 + .../upgrade-2.0.0-to-2.1.0.postgres.sql | 1 + .../apache/hadoop/hive/metastore/Metastore.java | 22 +- .../metastore/hbase/HbaseMetastoreProto.java | 175 +++-- .../gen/thrift/gen-cpp/hive_metastore_types.cpp | 20 + .../gen/thrift/gen-cpp/hive_metastore_types.h | 10 +- .../apache/hadoop/hive/metastore/api/Order.java | 106 ++- .../src/gen/thrift/gen-php/metastore/Types.php | 23 + .../gen/thrift/gen-py/hive_metastore/ttypes.py | 15 +- .../gen/thrift/gen-rb/hive_metastore_types.rb | 4 +- .../hive/metastore/MetaStoreDirectSql.java | 6 +- .../hadoop/hive/metastore/ObjectStore.java | 5 +- .../hadoop/hive/metastore/hbase/HBaseUtils.java | 2 +- .../hadoop/hive/metastore/model/MOrder.java | 22 +- .../metastore/hbase/hbase_metastore_proto.proto | 1 + .../hive/metastore/hbase/TestHBaseStore.java | 31 +- .../hbase/TestHBaseStoreBitVector.java | 36 +- .../hbase/TestSharedStorageDescriptor.java | 18 +- .../org/apache/hadoop/hive/ql/exec/DDLTask.java | 5 + .../hadoop/hive/ql/exec/MapJoinOperator.java | 2 + .../apache/hadoop/hive/ql/exec/MoveTask.java | 4 +- .../persistence/HybridHashTableContainer.java | 22 +- .../persistence/MapJoinBytesTableContainer.java | 36 +- .../hive/ql/exec/persistence/MapJoinKey.java | 12 +- .../ql/exec/tez/DynamicPartitionPruner.java | 2 +- .../VectorReduceSinkCommonOperator.java | 66 +- .../apache/hadoop/hive/ql/metadata/Hive.java | 2 +- .../hive/ql/optimizer/AbstractSMBJoinProc.java | 3 +- .../BucketingSortingReduceSinkOptimizer.java | 85 ++- .../ql/optimizer/ReduceSinkMapJoinProc.java | 15 +- .../optimizer/SortedDynPartitionOptimizer.java | 97 ++- .../ql/optimizer/calcite/RelOptHiveTable.java | 10 +- .../calcite/rules/HiveRelFieldTrimmer.java | 4 +- .../calcite/translator/ASTConverter.java | 49 +- .../calcite/translator/ExprNodeConverter.java | 12 + .../calcite/translator/HiveOpConverter.java | 39 +- .../correlation/ReduceSinkDeDuplication.java | 20 +- .../optimizer/physical/BucketingSortingCtx.java | 15 +- .../physical/BucketingSortingOpProcFactory.java | 16 +- .../spark/SparkReduceSinkMapJoinProc.java | 23 +- .../hive/ql/parse/BaseSemanticAnalyzer.java | 22 +- .../hadoop/hive/ql/parse/CalcitePlanner.java | 32 +- .../org/apache/hadoop/hive/ql/parse/HiveLexer.g | 2 + .../apache/hadoop/hive/ql/parse/HiveParser.g | 48 +- .../hadoop/hive/ql/parse/IdentifiersParser.g | 4 +- .../hadoop/hive/ql/parse/PTFInvocationSpec.java | 25 +- .../hadoop/hive/ql/parse/PTFTranslator.java | 1 + .../hadoop/hive/ql/parse/SemanticAnalyzer.java | 89 ++- .../hive/ql/parse/TypeCheckProcFactory.java | 2 + .../apache/hadoop/hive/ql/plan/PlanUtils.java | 35 +- .../hadoop/hive/ql/plan/ReduceSinkDesc.java | 23 +- .../hive/ql/plan/ptf/OrderExpressionDef.java | 13 +- .../plan/ptf/PartitionedTableFunctionDef.java | 12 +- .../hive/ql/udf/ptf/WindowingTableFunction.java | 69 +- .../hive/ql/txn/compactor/TestWorker.java | 4 +- ql/src/test/queries/clientpositive/keyword_3.q | 8 + ql/src/test/queries/clientpositive/order_null.q | 29 + .../clientpositive/windowing_order_null.q | 35 + ...lter_numbuckets_partitioned_table2_h23.q.out | 20 +- ...alter_numbuckets_partitioned_table_h23.q.out | 4 +- .../alter_partition_clusterby_sortby.q.out | 4 +- .../alter_partition_coltype.q.out | 3 + .../clientpositive/alter_table_not_sorted.q.out | 2 +- .../clientpositive/authorization_index.q.out | 2 +- .../auto_join_reordering_values.q.out | 8 + .../clientpositive/auto_sortmerge_join_1.q.out | 5 + .../clientpositive/auto_sortmerge_join_11.q.out | 4 + .../clientpositive/auto_sortmerge_join_12.q.out | 1 + .../clientpositive/auto_sortmerge_join_2.q.out | 4 + .../clientpositive/auto_sortmerge_join_3.q.out | 5 + .../clientpositive/auto_sortmerge_join_4.q.out | 5 + .../clientpositive/auto_sortmerge_join_5.q.out | 5 + .../clientpositive/auto_sortmerge_join_7.q.out | 5 + .../clientpositive/auto_sortmerge_join_8.q.out | 5 + .../test/results/clientpositive/bucket1.q.out | 1 + .../test/results/clientpositive/bucket2.q.out | 1 + .../test/results/clientpositive/bucket3.q.out | 1 + .../test/results/clientpositive/bucket4.q.out | 1 + .../test/results/clientpositive/bucket5.q.out | 4 +- .../results/clientpositive/bucket_many.q.out | 1 + .../clientpositive/bucket_map_join_1.q.out | 1 + .../clientpositive/bucket_map_join_2.q.out | 1 + .../clientpositive/bucketcontext_1.q.out | 2 + .../clientpositive/bucketcontext_2.q.out | 2 + .../clientpositive/bucketcontext_3.q.out | 2 + .../clientpositive/bucketcontext_4.q.out | 2 + .../clientpositive/bucketcontext_5.q.out | 2 + .../clientpositive/bucketcontext_6.q.out | 2 + .../clientpositive/bucketcontext_7.q.out | 2 + .../clientpositive/bucketcontext_8.q.out | 2 + .../clientpositive/bucketmapjoin10.q.out | 1 + .../clientpositive/bucketmapjoin11.q.out | 2 + .../clientpositive/bucketmapjoin12.q.out | 2 + .../clientpositive/bucketmapjoin13.q.out | 4 + .../results/clientpositive/bucketmapjoin7.q.out | 19 +- .../results/clientpositive/bucketmapjoin8.q.out | 2 + .../results/clientpositive/bucketmapjoin9.q.out | 2 + .../cbo_rp_outer_join_ppr.q.java1.7.out | 4 + .../clientpositive/columnstats_partlvl.q.out | 2 + .../clientpositive/columnstats_tbllvl.q.out | 2 + .../test/results/clientpositive/combine2.q.out | 1 + .../constantPropagateForSubQuery.q.out | 2 + .../clientpositive/correlationoptimizer12.q.out | 4 +- ql/src/test/results/clientpositive/ctas.q.out | 12 +- .../results/clientpositive/ctas_colname.q.out | 4 +- .../disable_merge_for_bucketing.q.out | 1 + .../display_colstats_tbllvl.q.out | 1 + .../dynpart_sort_opt_vectorization.q.out | 12 +- .../dynpart_sort_optimization.q.out | 12 +- .../encryption_join_unencrypted_tbl.q.out | 2 + ...on_join_with_different_encryption_keys.q.out | 2 + .../clientpositive/explain_logical.q.out | 9 +- .../clientpositive/filter_join_breaktask.q.out | 4 + .../clientpositive/fouter_join_ppr.q.out | 8 + .../groupby_grouping_window.q.out | 2 +- .../clientpositive/groupby_map_ppr.q.out | 1 + .../groupby_map_ppr_multi_distinct.q.out | 1 + .../results/clientpositive/groupby_ppr.q.out | 1 + .../groupby_ppr_multi_distinct.q.out | 1 + .../clientpositive/groupby_resolution.q.out | 2 +- .../clientpositive/groupby_sort_1_23.q.out | 11 + .../results/clientpositive/groupby_sort_6.q.out | 3 + .../clientpositive/groupby_sort_skew_1_23.q.out | 18 + .../clientpositive/index_skewtable.q.out | 2 +- .../clientpositive/infer_bucket_sort.q.out | 42 +- .../infer_bucket_sort_bucketed_table.q.out | 2 +- .../infer_bucket_sort_convert_join.q.out | 2 +- .../infer_bucket_sort_dyn_part.q.out | 4 +- .../infer_bucket_sort_grouping_operators.q.out | 12 +- .../infer_bucket_sort_map_operators.q.out | 4 +- .../infer_bucket_sort_merge.q.out | 2 +- .../infer_bucket_sort_multi_insert.q.out | 10 +- .../infer_bucket_sort_reducers_power_two.q.out | 12 +- .../test/results/clientpositive/input23.q.out | 2 + .../results/clientpositive/input_part7.q.out | 38 +- ql/src/test/results/clientpositive/join17.q.out | 2 + ql/src/test/results/clientpositive/join35.q.out | 2 + ql/src/test/results/clientpositive/join9.q.out | 2 + .../clientpositive/join_filters_overlap.q.out | 17 + .../test/results/clientpositive/keyword_3.q.out | 32 + .../test/results/clientpositive/lineage2.q.out | 2 +- .../test/results/clientpositive/lineage3.q.out | 10 +- .../list_bucket_query_multiskew_3.q.out | 1 + .../list_bucket_query_oneskew_2.q.out | 2 + .../llap/tez_join_result_complex.q.out | 2 + .../clientpositive/louter_join_ppr.q.out | 8 + ql/src/test/results/clientpositive/merge3.q.out | 1 + .../results/clientpositive/metadataonly1.q.out | 12 + .../clientpositive/optimize_nullscan.q.out | 14 + .../results/clientpositive/orc_analyze.q.out | 16 +- .../results/clientpositive/order_null.q.out | 222 ++++++ .../clientpositive/outer_join_ppr.q.java1.7.out | 4 + .../partition_coltype_literals.q.out | 4 +- ql/src/test/results/clientpositive/pcr.q.out | 204 +++-- ql/src/test/results/clientpositive/pcs.q.out | 49 +- .../results/clientpositive/perf/query12.q.out | 2 +- .../results/clientpositive/perf/query20.q.out | 2 +- .../results/clientpositive/perf/query51.q.out | 6 +- .../results/clientpositive/perf/query67.q.out | 2 +- .../results/clientpositive/perf/query70.q.out | 4 +- .../results/clientpositive/perf/query89.q.out | 2 +- .../results/clientpositive/perf/query98.q.out | 2 +- .../results/clientpositive/pointlookup2.q.out | 100 ++- .../results/clientpositive/pointlookup3.q.out | 96 ++- .../results/clientpositive/pointlookup4.q.out | 42 +- .../clientpositive/ppd_join_filter.q.out | 12 + .../results/clientpositive/ppd_union_view.q.out | 4 + ql/src/test/results/clientpositive/ppd_vc.q.out | 18 +- .../results/clientpositive/ppd_windowing1.q.out | 66 +- ql/src/test/results/clientpositive/ptf.q.out | 144 ++-- .../results/clientpositive/ptf_matchpath.q.out | 6 +- .../results/clientpositive/ptf_streaming.q.out | 96 +-- .../results/clientpositive/ptfgroupbyjoin.q.out | 2 +- .../test/results/clientpositive/push_or.q.out | 11 +- .../results/clientpositive/quotedid_basic.q.out | 4 +- .../clientpositive/reduce_deduplicate.q.out | 2 + .../results/clientpositive/regexp_extract.q.out | 2 + .../clientpositive/router_join_ppr.q.out | 8 + .../test/results/clientpositive/sample10.q.out | 7 +- .../test/results/clientpositive/sample6.q.out | 77 +- .../test/results/clientpositive/sample8.q.out | 2 + .../test/results/clientpositive/semijoin2.q.out | 4 +- .../test/results/clientpositive/semijoin4.q.out | 2 +- .../show_create_table_alter.q.out | 10 +- .../results/clientpositive/smb_mapjoin_11.q.out | 1 + .../results/clientpositive/smb_mapjoin_13.q.out | 20 +- .../results/clientpositive/smb_mapjoin_15.q.out | 40 +- .../clientpositive/sort_merge_join_desc_5.q.out | 1 + .../clientpositive/sort_merge_join_desc_6.q.out | 1 + .../clientpositive/sort_merge_join_desc_7.q.out | 1 + .../spark/auto_join_reordering_values.q.out | 8 + .../spark/auto_sortmerge_join_1.q.out | 3 + .../spark/auto_sortmerge_join_12.q.out | 1 + .../spark/auto_sortmerge_join_2.q.out | 2 + .../spark/auto_sortmerge_join_3.q.out | 3 + .../spark/auto_sortmerge_join_4.q.out | 3 + .../spark/auto_sortmerge_join_5.q.out | 3 + .../spark/auto_sortmerge_join_7.q.out | 3 + .../spark/auto_sortmerge_join_8.q.out | 3 + .../results/clientpositive/spark/bucket2.q.out | 1 + .../results/clientpositive/spark/bucket3.q.out | 1 + .../results/clientpositive/spark/bucket4.q.out | 1 + .../results/clientpositive/spark/bucket5.q.out | 4 +- .../spark/bucket_map_join_1.q.out | 1 + .../spark/bucket_map_join_2.q.out | 1 + .../clientpositive/spark/bucketmapjoin10.q.out | 1 + .../clientpositive/spark/bucketmapjoin11.q.out | 2 + .../clientpositive/spark/bucketmapjoin12.q.out | 2 + .../clientpositive/spark/bucketmapjoin13.q.out | 4 + .../clientpositive/spark/bucketmapjoin7.q.out | 19 +- .../clientpositive/spark/bucketmapjoin8.q.out | 2 + .../clientpositive/spark/bucketmapjoin9.q.out | 2 + .../results/clientpositive/spark/ctas.q.out | 12 +- .../spark/disable_merge_for_bucketing.q.out | 1 + .../spark/filter_join_breaktask.q.out | 4 + .../clientpositive/spark/groupby_map_ppr.q.out | 1 + .../spark/groupby_map_ppr_multi_distinct.q.out | 1 + .../clientpositive/spark/groupby_ppr.q.out | 1 + .../spark/groupby_ppr_multi_distinct.q.out | 1 + .../spark/groupby_resolution.q.out | 2 +- .../spark/groupby_sort_1_23.q.out | 11 + .../spark/groupby_sort_skew_1_23.q.out | 18 + .../infer_bucket_sort_bucketed_table.q.out | 2 +- .../results/clientpositive/spark/join17.q.out | 2 + .../results/clientpositive/spark/join34.q.out | 3 + .../results/clientpositive/spark/join35.q.out | 5 + .../results/clientpositive/spark/join9.q.out | 2 + .../spark/join_filters_overlap.q.out | 17 + .../clientpositive/spark/louter_join_ppr.q.out | 8 + .../spark/optimize_nullscan.q.out | 14 + .../spark/outer_join_ppr.q.java1.7.out | 4 + .../test/results/clientpositive/spark/pcr.q.out | 204 +++-- .../clientpositive/spark/ppd_join_filter.q.out | 12 + .../test/results/clientpositive/spark/ptf.q.out | 146 ++-- .../clientpositive/spark/ptf_matchpath.q.out | 6 +- .../clientpositive/spark/ptf_streaming.q.out | 96 +-- .../spark/reduce_deduplicate.q.out | 2 + .../clientpositive/spark/router_join_ppr.q.out | 8 + .../results/clientpositive/spark/sample10.q.out | 7 +- .../results/clientpositive/spark/sample6.q.out | 77 +- .../results/clientpositive/spark/sample8.q.out | 2 + .../clientpositive/spark/smb_mapjoin_11.q.out | 1 + .../clientpositive/spark/smb_mapjoin_12.q.out | 2 + .../clientpositive/spark/smb_mapjoin_13.q.out | 20 +- .../clientpositive/spark/smb_mapjoin_15.q.out | 40 +- .../clientpositive/spark/subquery_in.q.out | 4 +- .../clientpositive/spark/transform_ppr1.q.out | 1 + .../clientpositive/spark/transform_ppr2.q.out | 1 + .../results/clientpositive/spark/union24.q.out | 6 + .../clientpositive/spark/union_ppr.q.out | 38 +- .../spark/union_remove_6_subq.q.out | 2 +- .../clientpositive/spark/vectorized_ptf.q.out | 747 +++++++++++-------- .../results/clientpositive/subquery_in.q.out | 4 +- .../clientpositive/subquery_in_having.q.out | 2 +- .../results/clientpositive/subquery_notin.q.out | 12 +- .../subquery_unqualcolumnrefs.q.out | 8 +- .../temp_table_display_colstats_tbllvl.q.out | 1 + .../tez/auto_sortmerge_join_1.q.out | 6 + .../tez/auto_sortmerge_join_11.q.out | 9 + .../tez/auto_sortmerge_join_12.q.out | 4 + .../tez/auto_sortmerge_join_2.q.out | 4 + .../tez/auto_sortmerge_join_3.q.out | 6 + .../tez/auto_sortmerge_join_4.q.out | 6 + .../tez/auto_sortmerge_join_5.q.out | 4 + .../tez/auto_sortmerge_join_7.q.out | 6 + .../tez/auto_sortmerge_join_8.q.out | 6 + .../results/clientpositive/tez/bucket2.q.out | 1 + .../results/clientpositive/tez/bucket3.q.out | 1 + .../results/clientpositive/tez/bucket4.q.out | 1 + .../test/results/clientpositive/tez/ctas.q.out | 12 +- .../tez/disable_merge_for_bucketing.q.out | 1 + .../tez/dynpart_sort_opt_vectorization.q.out | 12 +- .../tez/dynpart_sort_optimization.q.out | 12 +- .../clientpositive/tez/explainuser_1.q.out | 94 +-- .../tez/filter_join_breaktask.q.out | 4 + .../clientpositive/tez/mapjoin_mapjoin.q.out | 2 + .../clientpositive/tez/metadataonly1.q.out | 12 + .../clientpositive/tez/optimize_nullscan.q.out | 14 + .../clientpositive/tez/orc_analyze.q.out | 16 +- .../results/clientpositive/tez/order_null.q.out | 222 ++++++ .../test/results/clientpositive/tez/ptf.q.out | 144 ++-- .../clientpositive/tez/ptf_matchpath.q.out | 6 +- .../clientpositive/tez/ptf_streaming.q.out | 96 +-- .../clientpositive/tez/subquery_in.q.out | 4 +- .../tez/tez_join_result_complex.q.out | 2 + .../clientpositive/tez/transform_ppr1.q.out | 1 + .../clientpositive/tez/transform_ppr2.q.out | 1 + .../clientpositive/tez/unionDistinct_1.q.out | 21 + .../clientpositive/tez/vectorized_ptf.q.out | 745 +++++++++++------- .../clientpositive/tez/windowing_gby.q.out | 2 +- .../results/clientpositive/transform_ppr1.q.out | 1 + .../results/clientpositive/transform_ppr2.q.out | 1 + .../results/clientpositive/udf_explode.q.out | 2 + .../results/clientpositive/udtf_explode.q.out | 4 + .../test/results/clientpositive/union22.q.out | 2 + .../test/results/clientpositive/union24.q.out | 6 + .../clientpositive/unionDistinct_1.q.out | 20 + .../test/results/clientpositive/union_ppr.q.out | 38 +- .../clientpositive/union_remove_6_subq.q.out | 2 +- .../results/clientpositive/vectorized_ptf.q.out | 745 +++++++++++------- .../clientpositive/windowing_order_null.q.out | 183 +++++ .../clientpositive/windowing_streaming.q.out | 6 +- serde/if/serde.thrift | 1 + .../src/gen/thrift/gen-cpp/serde_constants.cpp | 2 + serde/src/gen/thrift/gen-cpp/serde_constants.h | 1 + .../hadoop/hive/serde/serdeConstants.java | 2 + .../org/apache/hadoop/hive/serde/Types.php | 5 + .../org_apache_hadoop_hive_serde/constants.py | 1 + serde/src/gen/thrift/gen-rb/serde_constants.rb | 2 + .../binarysortable/BinarySortableSerDe.java | 110 ++- .../BinarySortableSerDeWithEndPrefix.java | 2 +- .../fast/BinarySortableSerializeWrite.java | 130 +++- .../binarysortable/TestBinarySortableFast.java | 30 +- .../binarysortable/TestBinarySortableSerDe.java | 18 +- 330 files changed, 5399 insertions(+), 2340 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/data/files/over4_null ---------------------------------------------------------------------- diff --git a/data/files/over4_null b/data/files/over4_null new file mode 100644 index 0000000..7f79531 --- /dev/null +++ b/data/files/over4_null @@ -0,0 +1,5 @@ +124|336|65534|\N|\N|0.01|true|\N|2013-03-01 09:11:58.703302|45.40|^Ayard duty^B +19|442|65534|\N|\N|\N|true|calvin miller|2013-03-01 09:11:58.703217|29.62|^Ahistory^B +35|387|65536|\N|\N|0.02|false|\N|2013-03-01 09:11:58.70307|27.32|^Ahistory^B +111|372|\N|\N|\N|0.01|false|\N|2013-03-01 09:11:58.703310|23.91|^Atopology^B +54|317|\N|\N|\N|\N|false|alice ichabod|2013-03-01 09:11:58.703103|90.21|^Ageology^B http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/itests/src/test/resources/testconfiguration.properties ---------------------------------------------------------------------- diff --git a/itests/src/test/resources/testconfiguration.properties b/itests/src/test/resources/testconfiguration.properties index 68dbd0c..f991d49 100644 --- a/itests/src/test/resources/testconfiguration.properties +++ b/itests/src/test/resources/testconfiguration.properties @@ -160,6 +160,7 @@ minitez.query.files.shared=acid_globallimit.q,\ metadata_only_queries.q,\ metadata_only_queries_with_filters.q,\ nonmr_fetch_threshold.q,\ + order_null.q,\ optimize_nullscan.q,\ orc_analyze.q,\ orc_merge1.q,\ http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/metastore/if/hive_metastore.thrift ---------------------------------------------------------------------- diff --git a/metastore/if/hive_metastore.thrift b/metastore/if/hive_metastore.thrift index e8f0a68..a4fb612 100755 --- a/metastore/if/hive_metastore.thrift +++ b/metastore/if/hive_metastore.thrift @@ -226,8 +226,9 @@ struct SerDeInfo { // sort order of a column (column name along with asc(1)/desc(0)) struct Order { - 1: string col, // sort column name - 2: i32 order // asc(1) or desc(0) + 1: string col, // sort column name + 2: i32 order, // asc(1) or desc(0) + 3: i32 nullOrder // nulls first(0) or nulls last(1) } // this object holds all the information about skewed table http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/metastore/scripts/upgrade/derby/034-HIVE-12994.derby.sql ---------------------------------------------------------------------- diff --git a/metastore/scripts/upgrade/derby/034-HIVE-12994.derby.sql b/metastore/scripts/upgrade/derby/034-HIVE-12994.derby.sql new file mode 100644 index 0000000..a8b48bf --- /dev/null +++ b/metastore/scripts/upgrade/derby/034-HIVE-12994.derby.sql @@ -0,0 +1,2 @@ +ALTER TABLE "APP".SORT_COLS ADD "NULL_ORDER" INTEGER NOT NULL DEFAULT 0; +UPDATE "APP".SORT_COLS SET "NULL_ORDER" = 1 WHERE "ORDER" = 0; http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/metastore/scripts/upgrade/derby/hive-schema-2.1.0.derby.sql ---------------------------------------------------------------------- diff --git a/metastore/scripts/upgrade/derby/hive-schema-2.1.0.derby.sql b/metastore/scripts/upgrade/derby/hive-schema-2.1.0.derby.sql index 42f4eb6..00c49ae 100644 --- a/metastore/scripts/upgrade/derby/hive-schema-2.1.0.derby.sql +++ b/metastore/scripts/upgrade/derby/hive-schema-2.1.0.derby.sql @@ -28,7 +28,7 @@ CREATE TABLE "APP"."SERDE_PARAMS" ("SERDE_ID" BIGINT NOT NULL, "PARAM_KEY" VARCH CREATE TABLE "APP"."COLUMNS_V2" ("CD_ID" BIGINT NOT NULL, "COMMENT" VARCHAR(4000), "COLUMN_NAME" VARCHAR(1000) NOT NULL, "TYPE_NAME" VARCHAR(4000), "INTEGER_IDX" INTEGER NOT NULL); -CREATE TABLE "APP"."SORT_COLS" ("SD_ID" BIGINT NOT NULL, "COLUMN_NAME" VARCHAR(1000), "ORDER" INTEGER NOT NULL, "INTEGER_IDX" INTEGER NOT NULL); +CREATE TABLE "APP"."SORT_COLS" ("SD_ID" BIGINT NOT NULL, "COLUMN_NAME" VARCHAR(1000), "ORDER" INTEGER NOT NULL, "NULL_ORDER" INTEGER NOT NULL, "INTEGER_IDX" INTEGER NOT NULL); CREATE TABLE "APP"."CDS" ("CD_ID" BIGINT NOT NULL); http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/metastore/scripts/upgrade/derby/upgrade-2.0.0-to-2.1.0.derby.sql ---------------------------------------------------------------------- diff --git a/metastore/scripts/upgrade/derby/upgrade-2.0.0-to-2.1.0.derby.sql b/metastore/scripts/upgrade/derby/upgrade-2.0.0-to-2.1.0.derby.sql index a0bac3c..13aeabb 100644 --- a/metastore/scripts/upgrade/derby/upgrade-2.0.0-to-2.1.0.derby.sql +++ b/metastore/scripts/upgrade/derby/upgrade-2.0.0-to-2.1.0.derby.sql @@ -1,4 +1,5 @@ -- Upgrade MetaStore schema from 2.0.0 to 2.1.0 RUN '033-HIVE-12892.derby.sql'; +RUN '034-HIVE-12994.derby.sql'; UPDATE "APP".VERSION SET SCHEMA_VERSION='2.1.0', VERSION_COMMENT='Hive release version 2.1.0' where VER_ID=1; http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/metastore/scripts/upgrade/mssql/019-HIVE-12994.mssql.sql ---------------------------------------------------------------------- diff --git a/metastore/scripts/upgrade/mssql/019-HIVE-12994.mssql.sql b/metastore/scripts/upgrade/mssql/019-HIVE-12994.mssql.sql new file mode 100644 index 0000000..51e2c43 --- /dev/null +++ b/metastore/scripts/upgrade/mssql/019-HIVE-12994.mssql.sql @@ -0,0 +1,2 @@ +ALTER TABLE SORT_COLS ADD "NULL_ORDER" int NOT NULL DEFAULT 0; +UPDATE SORT_COLS SET "NULL_ORDER" = 1 WHERE "ORDER" = 0; http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/metastore/scripts/upgrade/mssql/hive-schema-2.1.0.mssql.sql ---------------------------------------------------------------------- diff --git a/metastore/scripts/upgrade/mssql/hive-schema-2.1.0.mssql.sql b/metastore/scripts/upgrade/mssql/hive-schema-2.1.0.mssql.sql index cf5a662..c98c7ef 100644 --- a/metastore/scripts/upgrade/mssql/hive-schema-2.1.0.mssql.sql +++ b/metastore/scripts/upgrade/mssql/hive-schema-2.1.0.mssql.sql @@ -411,6 +411,7 @@ CREATE TABLE SORT_COLS SD_ID bigint NOT NULL, "COLUMN_NAME" nvarchar(1000) NULL, "ORDER" int NOT NULL, + "NULL_ORDER" int NOT NULL, INTEGER_IDX int NOT NULL ); http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/metastore/scripts/upgrade/mssql/upgrade-2.0.0-to-2.1.0.mssql.sql ---------------------------------------------------------------------- diff --git a/metastore/scripts/upgrade/mssql/upgrade-2.0.0-to-2.1.0.mssql.sql b/metastore/scripts/upgrade/mssql/upgrade-2.0.0-to-2.1.0.mssql.sql index f25daf2..3b4a2a3 100644 --- a/metastore/scripts/upgrade/mssql/upgrade-2.0.0-to-2.1.0.mssql.sql +++ b/metastore/scripts/upgrade/mssql/upgrade-2.0.0-to-2.1.0.mssql.sql @@ -1,6 +1,7 @@ SELECT 'Upgrading MetaStore schema from 2.0.0 to 2.1.0' AS MESSAGE; :r 018-HIVE-12892.mssql.sql; +:r 019-HIVE-12994.mssql.sql; UPDATE VERSION SET SCHEMA_VERSION='2.1.0', VERSION_COMMENT='Hive release version 2.1.0' where VER_ID=1; SELECT 'Finished upgrading MetaStore schema from 2.0.0 to 2.1.0' AS MESSAGE; http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/metastore/scripts/upgrade/mysql/034-HIVE-12994.mysql.sql ---------------------------------------------------------------------- diff --git a/metastore/scripts/upgrade/mysql/034-HIVE-12994.mysql.sql b/metastore/scripts/upgrade/mysql/034-HIVE-12994.mysql.sql new file mode 100644 index 0000000..ff4cf37 --- /dev/null +++ b/metastore/scripts/upgrade/mysql/034-HIVE-12994.mysql.sql @@ -0,0 +1,2 @@ +ALTER TABLE `SORT_COLS` ADD `NULL_ORDER` INTEGER NOT NULL DEFAULT 0; +UPDATE `SORT_COLS` SET `NULL_ORDER` = 1 WHERE `ORDER` = 0; http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/metastore/scripts/upgrade/mysql/hive-schema-2.1.0.mysql.sql ---------------------------------------------------------------------- diff --git a/metastore/scripts/upgrade/mysql/hive-schema-2.1.0.mysql.sql b/metastore/scripts/upgrade/mysql/hive-schema-2.1.0.mysql.sql index 6fd3209..1369349 100644 --- a/metastore/scripts/upgrade/mysql/hive-schema-2.1.0.mysql.sql +++ b/metastore/scripts/upgrade/mysql/hive-schema-2.1.0.mysql.sql @@ -546,6 +546,7 @@ CREATE TABLE IF NOT EXISTS `SORT_COLS` ( `SD_ID` bigint(20) NOT NULL, `COLUMN_NAME` varchar(1000) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL, `ORDER` int(11) NOT NULL, + `NULL_ORDER` int(11) NOT NULL, `INTEGER_IDX` int(11) NOT NULL, PRIMARY KEY (`SD_ID`,`INTEGER_IDX`), KEY `SORT_COLS_N49` (`SD_ID`), http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/metastore/scripts/upgrade/mysql/upgrade-2.0.0-to-2.1.0.mysql.sql ---------------------------------------------------------------------- diff --git a/metastore/scripts/upgrade/mysql/upgrade-2.0.0-to-2.1.0.mysql.sql b/metastore/scripts/upgrade/mysql/upgrade-2.0.0-to-2.1.0.mysql.sql index e790636..09bb8b8 100644 --- a/metastore/scripts/upgrade/mysql/upgrade-2.0.0-to-2.1.0.mysql.sql +++ b/metastore/scripts/upgrade/mysql/upgrade-2.0.0-to-2.1.0.mysql.sql @@ -1,6 +1,7 @@ SELECT 'Upgrading MetaStore schema from 2.0.0 to 2.1.0' AS ' '; SOURCE 033-HIVE-12892.mysql.sql; +SOURCE 034-HIVE-12994.mysql.sql; UPDATE VERSION SET SCHEMA_VERSION='2.1.0', VERSION_COMMENT='Hive release version 2.1.0' where VER_ID=1; SELECT 'Finished upgrading MetaStore schema from 2.0.0 to 2.1.0' AS ' '; http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/metastore/scripts/upgrade/oracle/034-HIVE-12994.oracle.sql ---------------------------------------------------------------------- diff --git a/metastore/scripts/upgrade/oracle/034-HIVE-12994.oracle.sql b/metastore/scripts/upgrade/oracle/034-HIVE-12994.oracle.sql new file mode 100644 index 0000000..0b57ef8 --- /dev/null +++ b/metastore/scripts/upgrade/oracle/034-HIVE-12994.oracle.sql @@ -0,0 +1,2 @@ +ALTER TABLE SORT_COLS ADD "NULL_ORDER" NUMBER (10) NOT NULL DEFAULT 0; +UPDATE SORT_COLS SET "NULL_ORDER" = 1 WHERE "ORDER" = 0; http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/metastore/scripts/upgrade/oracle/hive-schema-2.1.0.oracle.sql ---------------------------------------------------------------------- diff --git a/metastore/scripts/upgrade/oracle/hive-schema-2.1.0.oracle.sql b/metastore/scripts/upgrade/oracle/hive-schema-2.1.0.oracle.sql index 774f6be..198f0bd 100644 --- a/metastore/scripts/upgrade/oracle/hive-schema-2.1.0.oracle.sql +++ b/metastore/scripts/upgrade/oracle/hive-schema-2.1.0.oracle.sql @@ -274,6 +274,7 @@ CREATE TABLE SORT_COLS SD_ID NUMBER NOT NULL, "COLUMN_NAME" VARCHAR2(1000) NULL, "ORDER" NUMBER (10) NOT NULL, + "NULL_ORDER" NUMBER (10) NOT NULL, INTEGER_IDX NUMBER(10) NOT NULL ); http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/metastore/scripts/upgrade/oracle/upgrade-2.0.0-to-2.1.0.oracle.sql ---------------------------------------------------------------------- diff --git a/metastore/scripts/upgrade/oracle/upgrade-2.0.0-to-2.1.0.oracle.sql b/metastore/scripts/upgrade/oracle/upgrade-2.0.0-to-2.1.0.oracle.sql index 8368d08..a729baa 100644 --- a/metastore/scripts/upgrade/oracle/upgrade-2.0.0-to-2.1.0.oracle.sql +++ b/metastore/scripts/upgrade/oracle/upgrade-2.0.0-to-2.1.0.oracle.sql @@ -1,6 +1,7 @@ SELECT 'Upgrading MetaStore schema from 2.0.0 to 2.1.0' AS Status from dual; @033-HIVE-12892.oracle.sql; [email protected]; UPDATE VERSION SET SCHEMA_VERSION='2.1.0', VERSION_COMMENT='Hive release version 2.1.0' where VER_ID=1; SELECT 'Finished upgrading MetaStore schema from 2.0.0 to 2.1.0' AS Status from dual; http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/metastore/scripts/upgrade/postgres/033-HIVE-12994.postgres.sql ---------------------------------------------------------------------- diff --git a/metastore/scripts/upgrade/postgres/033-HIVE-12994.postgres.sql b/metastore/scripts/upgrade/postgres/033-HIVE-12994.postgres.sql new file mode 100644 index 0000000..0894fed --- /dev/null +++ b/metastore/scripts/upgrade/postgres/033-HIVE-12994.postgres.sql @@ -0,0 +1,2 @@ +ALTER TABLE SORT_COLS ADD COLUMN "NULL_ORDER" bigint NOT NULL DEFAULT 0; +UPDATE SORT_COLS SET "NULL_ORDER" = 1 WHERE "ORDER" = 0; http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/metastore/scripts/upgrade/postgres/hive-schema-2.1.0.postgres.sql ---------------------------------------------------------------------- diff --git a/metastore/scripts/upgrade/postgres/hive-schema-2.1.0.postgres.sql b/metastore/scripts/upgrade/postgres/hive-schema-2.1.0.postgres.sql index 7463a37..48d16de 100644 --- a/metastore/scripts/upgrade/postgres/hive-schema-2.1.0.postgres.sql +++ b/metastore/scripts/upgrade/postgres/hive-schema-2.1.0.postgres.sql @@ -342,6 +342,7 @@ CREATE TABLE "SORT_COLS" ( "SD_ID" bigint NOT NULL, "COLUMN_NAME" character varying(1000) DEFAULT NULL::character varying, "ORDER" bigint NOT NULL, + "NULL_ORDER" bigint NOT NULL, "INTEGER_IDX" bigint NOT NULL ); http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/metastore/scripts/upgrade/postgres/upgrade-2.0.0-to-2.1.0.postgres.sql ---------------------------------------------------------------------- diff --git a/metastore/scripts/upgrade/postgres/upgrade-2.0.0-to-2.1.0.postgres.sql b/metastore/scripts/upgrade/postgres/upgrade-2.0.0-to-2.1.0.postgres.sql index 6172407..30d070d 100644 --- a/metastore/scripts/upgrade/postgres/upgrade-2.0.0-to-2.1.0.postgres.sql +++ b/metastore/scripts/upgrade/postgres/upgrade-2.0.0-to-2.1.0.postgres.sql @@ -1,6 +1,7 @@ SELECT 'Upgrading MetaStore schema from 2.0.0 to 2.1.0'; \i 032-HIVE-12892.postgres.sql; +\i 033-HIVE-12994.postgres.sql; UPDATE "VERSION" SET "SCHEMA_VERSION"='2.1.0', "VERSION_COMMENT"='Hive release version 2.1.0' where "VER_ID"=1; SELECT 'Finished upgrading MetaStore schema from 2.0.0 to 2.1.0'; http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/metastore/src/gen/protobuf/gen-java/org/apache/hadoop/hive/metastore/Metastore.java ---------------------------------------------------------------------- diff --git a/metastore/src/gen/protobuf/gen-java/org/apache/hadoop/hive/metastore/Metastore.java b/metastore/src/gen/protobuf/gen-java/org/apache/hadoop/hive/metastore/Metastore.java index 416ae9d..ca928b9 100644 --- a/metastore/src/gen/protobuf/gen-java/org/apache/hadoop/hive/metastore/Metastore.java +++ b/metastore/src/gen/protobuf/gen-java/org/apache/hadoop/hive/metastore/Metastore.java @@ -447,15 +447,15 @@ public final class Metastore { public final boolean isInitialized() { if (!hasOffset()) { - + return false; } if (!hasLength()) { - + return false; } if (!hasIndex()) { - + return false; } return true; @@ -597,7 +597,7 @@ public final class Metastore { /** * <code>repeated .org.apache.hadoop.hive.metastore.SplitInfo infos = 1;</code> */ - java.util.List<org.apache.hadoop.hive.metastore.Metastore.SplitInfo> + java.util.List<org.apache.hadoop.hive.metastore.Metastore.SplitInfo> getInfosList(); /** * <code>repeated .org.apache.hadoop.hive.metastore.SplitInfo infos = 1;</code> @@ -610,7 +610,7 @@ public final class Metastore { /** * <code>repeated .org.apache.hadoop.hive.metastore.SplitInfo infos = 1;</code> */ - java.util.List<? extends org.apache.hadoop.hive.metastore.Metastore.SplitInfoOrBuilder> + java.util.List<? extends org.apache.hadoop.hive.metastore.Metastore.SplitInfoOrBuilder> getInfosOrBuilderList(); /** * <code>repeated .org.apache.hadoop.hive.metastore.SplitInfo infos = 1;</code> @@ -731,7 +731,7 @@ public final class Metastore { /** * <code>repeated .org.apache.hadoop.hive.metastore.SplitInfo infos = 1;</code> */ - public java.util.List<? extends org.apache.hadoop.hive.metastore.Metastore.SplitInfoOrBuilder> + public java.util.List<? extends org.apache.hadoop.hive.metastore.Metastore.SplitInfoOrBuilder> getInfosOrBuilderList() { return infos_; } @@ -984,7 +984,7 @@ public final class Metastore { infosBuilder_ = null; infos_ = other.infos_; bitField0_ = (bitField0_ & ~0x00000001); - infosBuilder_ = + infosBuilder_ = com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? getInfosFieldBuilder() : null; } else { @@ -999,7 +999,7 @@ public final class Metastore { public final boolean isInitialized() { for (int i = 0; i < getInfosCount(); i++) { if (!getInfos(i).isInitialized()) { - + return false; } } @@ -1220,7 +1220,7 @@ public final class Metastore { /** * <code>repeated .org.apache.hadoop.hive.metastore.SplitInfo infos = 1;</code> */ - public java.util.List<? extends org.apache.hadoop.hive.metastore.Metastore.SplitInfoOrBuilder> + public java.util.List<? extends org.apache.hadoop.hive.metastore.Metastore.SplitInfoOrBuilder> getInfosOrBuilderList() { if (infosBuilder_ != null) { return infosBuilder_.getMessageOrBuilderList(); @@ -1246,12 +1246,12 @@ public final class Metastore { /** * <code>repeated .org.apache.hadoop.hive.metastore.SplitInfo infos = 1;</code> */ - public java.util.List<org.apache.hadoop.hive.metastore.Metastore.SplitInfo.Builder> + public java.util.List<org.apache.hadoop.hive.metastore.Metastore.SplitInfo.Builder> getInfosBuilderList() { return getInfosFieldBuilder().getBuilderList(); } private com.google.protobuf.RepeatedFieldBuilder< - org.apache.hadoop.hive.metastore.Metastore.SplitInfo, org.apache.hadoop.hive.metastore.Metastore.SplitInfo.Builder, org.apache.hadoop.hive.metastore.Metastore.SplitInfoOrBuilder> + org.apache.hadoop.hive.metastore.Metastore.SplitInfo, org.apache.hadoop.hive.metastore.Metastore.SplitInfo.Builder, org.apache.hadoop.hive.metastore.Metastore.SplitInfoOrBuilder> getInfosFieldBuilder() { if (infosBuilder_ == null) { infosBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/metastore/src/gen/protobuf/gen-java/org/apache/hadoop/hive/metastore/hbase/HbaseMetastoreProto.java ---------------------------------------------------------------------- diff --git a/metastore/src/gen/protobuf/gen-java/org/apache/hadoop/hive/metastore/hbase/HbaseMetastoreProto.java b/metastore/src/gen/protobuf/gen-java/org/apache/hadoop/hive/metastore/hbase/HbaseMetastoreProto.java index 3b2d7b5..3057fff 100644 --- a/metastore/src/gen/protobuf/gen-java/org/apache/hadoop/hive/metastore/hbase/HbaseMetastoreProto.java +++ b/metastore/src/gen/protobuf/gen-java/org/apache/hadoop/hive/metastore/hbase/HbaseMetastoreProto.java @@ -22582,6 +22582,16 @@ public final class HbaseMetastoreProto { * <code>optional sint32 order = 2 [default = 1];</code> */ int getOrder(); + + // optional sint32 nullOrder = 3 [default = 0]; + /** + * <code>optional sint32 nullOrder = 3 [default = 0];</code> + */ + boolean hasNullOrder(); + /** + * <code>optional sint32 nullOrder = 3 [default = 0];</code> + */ + int getNullOrder(); } /** * Protobuf type {@code org.apache.hadoop.hive.metastore.hbase.StorageDescriptor.Order} @@ -22644,6 +22654,11 @@ public final class HbaseMetastoreProto { order_ = input.readSInt32(); break; } + case 24: { + bitField0_ |= 0x00000004; + nullOrder_ = input.readSInt32(); + break; + } } } } catch (com.google.protobuf.InvalidProtocolBufferException e) { @@ -22743,9 +22758,26 @@ public final class HbaseMetastoreProto { return order_; } + // optional sint32 nullOrder = 3 [default = 0]; + public static final int NULLORDER_FIELD_NUMBER = 3; + private int nullOrder_; + /** + * <code>optional sint32 nullOrder = 3 [default = 0];</code> + */ + public boolean hasNullOrder() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + /** + * <code>optional sint32 nullOrder = 3 [default = 0];</code> + */ + public int getNullOrder() { + return nullOrder_; + } + private void initFields() { columnName_ = ""; order_ = 1; + nullOrder_ = 0; } private byte memoizedIsInitialized = -1; public final boolean isInitialized() { @@ -22769,6 +22801,9 @@ public final class HbaseMetastoreProto { if (((bitField0_ & 0x00000002) == 0x00000002)) { output.writeSInt32(2, order_); } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeSInt32(3, nullOrder_); + } getUnknownFields().writeTo(output); } @@ -22786,6 +22821,10 @@ public final class HbaseMetastoreProto { size += com.google.protobuf.CodedOutputStream .computeSInt32Size(2, order_); } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += com.google.protobuf.CodedOutputStream + .computeSInt32Size(3, nullOrder_); + } size += getUnknownFields().getSerializedSize(); memoizedSerializedSize = size; return size; @@ -22906,6 +22945,8 @@ public final class HbaseMetastoreProto { bitField0_ = (bitField0_ & ~0x00000001); order_ = 1; bitField0_ = (bitField0_ & ~0x00000002); + nullOrder_ = 0; + bitField0_ = (bitField0_ & ~0x00000004); return this; } @@ -22942,6 +22983,10 @@ public final class HbaseMetastoreProto { to_bitField0_ |= 0x00000002; } result.order_ = order_; + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000004; + } + result.nullOrder_ = nullOrder_; result.bitField0_ = to_bitField0_; onBuilt(); return result; @@ -22966,6 +23011,9 @@ public final class HbaseMetastoreProto { if (other.hasOrder()) { setOrder(other.getOrder()); } + if (other.hasNullOrder()) { + setNullOrder(other.getNullOrder()); + } this.mergeUnknownFields(other.getUnknownFields()); return this; } @@ -23104,6 +23152,39 @@ public final class HbaseMetastoreProto { return this; } + // optional sint32 nullOrder = 3 [default = 0]; + private int nullOrder_ ; + /** + * <code>optional sint32 nullOrder = 3 [default = 0];</code> + */ + public boolean hasNullOrder() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + /** + * <code>optional sint32 nullOrder = 3 [default = 0];</code> + */ + public int getNullOrder() { + return nullOrder_; + } + /** + * <code>optional sint32 nullOrder = 3 [default = 0];</code> + */ + public Builder setNullOrder(int value) { + bitField0_ |= 0x00000004; + nullOrder_ = value; + onChanged(); + return this; + } + /** + * <code>optional sint32 nullOrder = 3 [default = 0];</code> + */ + public Builder clearNullOrder() { + bitField0_ = (bitField0_ & ~0x00000004); + nullOrder_ = 0; + onChanged(); + return this; + } + // @@protoc_insertion_point(builder_scope:org.apache.hadoop.hive.metastore.hbase.StorageDescriptor.Order) } @@ -34747,7 +34828,7 @@ public final class HbaseMetastoreProto { "ant_info\030\001 \003(\01325.org.apache.hadoop.hive." + "metastore.hbase.RoleGrantInfo\"\030\n\010RoleLis", "t\022\014\n\004role\030\001 \003(\t\"/\n\004Role\022\023\n\013create_time\030\001" + - " \001(\003\022\022\n\nowner_name\030\002 \001(\t\"\254\010\n\021StorageDesc" + + " \001(\003\022\022\n\nowner_name\030\002 \001(\t\"\302\010\n\021StorageDesc" + "riptor\022A\n\004cols\030\001 \003(\01323.org.apache.hadoop" + ".hive.metastore.hbase.FieldSchema\022\024\n\014inp" + "ut_format\030\002 \001(\t\022\025\n\routput_format\030\003 \001(\t\022\025" + @@ -34760,51 +34841,51 @@ public final class HbaseMetastoreProto { "skewed_info\030\t \001(\0132D.org.apache.hadoop.hi" + "ve.metastore.hbase.StorageDescriptor.Ske" + "wedInfo\022!\n\031stored_as_sub_directories\030\n \001" + - "(\010\032.\n\005Order\022\023\n\013column_name\030\001 \002(\t\022\020\n\005orde" + - "r\030\002 \001(\021:\0011\032|\n\tSerDeInfo\022\014\n\004name\030\001 \001(\t\022\031\n" + - "\021serialization_lib\030\002 \001(\t\022F\n\nparameters\030\003" + - " \001(\01322.org.apache.hadoop.hive.metastore." + - "hbase.Parameters\032\214\003\n\nSkewedInfo\022\030\n\020skewe" + - "d_col_names\030\001 \003(\t\022r\n\021skewed_col_values\030\002", - " \003(\0132W.org.apache.hadoop.hive.metastore." + - "hbase.StorageDescriptor.SkewedInfo.Skewe" + - "dColValueList\022\206\001\n\036skewed_col_value_locat" + - "ion_maps\030\003 \003(\0132^.org.apache.hadoop.hive." + - "metastore.hbase.StorageDescriptor.Skewed" + - "Info.SkewedColValueLocationMap\032.\n\022Skewed" + - "ColValueList\022\030\n\020skewed_col_value\030\001 \003(\t\0327" + - "\n\031SkewedColValueLocationMap\022\013\n\003key\030\001 \003(\t" + - "\022\r\n\005value\030\002 \002(\t\"\220\004\n\005Table\022\r\n\005owner\030\001 \001(\t" + - "\022\023\n\013create_time\030\002 \001(\003\022\030\n\020last_access_tim", - "e\030\003 \001(\003\022\021\n\tretention\030\004 \001(\003\022\020\n\010location\030\005" + - " \001(\t\022I\n\rsd_parameters\030\006 \001(\01322.org.apache" + - ".hadoop.hive.metastore.hbase.Parameters\022" + - "\017\n\007sd_hash\030\007 \002(\014\022K\n\016partition_keys\030\010 \003(\013" + - "23.org.apache.hadoop.hive.metastore.hbas" + - "e.FieldSchema\022F\n\nparameters\030\t \001(\01322.org." + - "apache.hadoop.hive.metastore.hbase.Param" + - "eters\022\032\n\022view_original_text\030\n \001(\t\022\032\n\022vie" + - "w_expanded_text\030\013 \001(\t\022\022\n\ntable_type\030\014 \001(" + - "\t\022Q\n\nprivileges\030\r \001(\0132=.org.apache.hadoo", - "p.hive.metastore.hbase.PrincipalPrivileg" + - "eSet\022\024\n\014is_temporary\030\016 \001(\010\"\353\004\n\026Partition" + - "KeyComparator\022\r\n\005names\030\001 \002(\t\022\r\n\005types\030\002 " + - "\002(\t\022S\n\002op\030\003 \003(\0132G.org.apache.hadoop.hive" + - ".metastore.hbase.PartitionKeyComparator." + - "Operator\022S\n\005range\030\004 \003(\0132D.org.apache.had" + - "oop.hive.metastore.hbase.PartitionKeyCom" + - "parator.Range\032(\n\004Mark\022\r\n\005value\030\001 \002(\t\022\021\n\t" + - "inclusive\030\002 \002(\010\032\272\001\n\005Range\022\013\n\003key\030\001 \002(\t\022R" + - "\n\005start\030\002 \001(\0132C.org.apache.hadoop.hive.m", - "etastore.hbase.PartitionKeyComparator.Ma" + - "rk\022P\n\003end\030\003 \001(\0132C.org.apache.hadoop.hive" + - ".metastore.hbase.PartitionKeyComparator." + - "Mark\032\241\001\n\010Operator\022Z\n\004type\030\001 \002(\0162L.org.ap" + - "ache.hadoop.hive.metastore.hbase.Partiti" + - "onKeyComparator.Operator.Type\022\013\n\003key\030\002 \002" + - "(\t\022\013\n\003val\030\003 \002(\t\"\037\n\004Type\022\010\n\004LIKE\020\000\022\r\n\tNOT" + - "EQUALS\020\001*#\n\rPrincipalType\022\010\n\004USER\020\000\022\010\n\004R" + - "OLE\020\001" + "(\010\032D\n\005Order\022\023\n\013column_name\030\001 \002(\t\022\020\n\005orde" + + "r\030\002 \001(\021:\0011\022\024\n\tnullOrder\030\003 \001(\021:\0010\032|\n\tSerD" + + "eInfo\022\014\n\004name\030\001 \001(\t\022\031\n\021serialization_lib" + + "\030\002 \001(\t\022F\n\nparameters\030\003 \001(\01322.org.apache." + + "hadoop.hive.metastore.hbase.Parameters\032\214" + + "\003\n\nSkewedInfo\022\030\n\020skewed_col_names\030\001 \003(\t\022", + "r\n\021skewed_col_values\030\002 \003(\0132W.org.apache." + + "hadoop.hive.metastore.hbase.StorageDescr" + + "iptor.SkewedInfo.SkewedColValueList\022\206\001\n\036" + + "skewed_col_value_location_maps\030\003 \003(\0132^.o" + + "rg.apache.hadoop.hive.metastore.hbase.St" + + "orageDescriptor.SkewedInfo.SkewedColValu" + + "eLocationMap\032.\n\022SkewedColValueList\022\030\n\020sk" + + "ewed_col_value\030\001 \003(\t\0327\n\031SkewedColValueLo" + + "cationMap\022\013\n\003key\030\001 \003(\t\022\r\n\005value\030\002 \002(\t\"\220\004" + + "\n\005Table\022\r\n\005owner\030\001 \001(\t\022\023\n\013create_time\030\002 ", + "\001(\003\022\030\n\020last_access_time\030\003 \001(\003\022\021\n\tretenti" + + "on\030\004 \001(\003\022\020\n\010location\030\005 \001(\t\022I\n\rsd_paramet" + + "ers\030\006 \001(\01322.org.apache.hadoop.hive.metas" + + "tore.hbase.Parameters\022\017\n\007sd_hash\030\007 \002(\014\022K" + + "\n\016partition_keys\030\010 \003(\01323.org.apache.hado" + + "op.hive.metastore.hbase.FieldSchema\022F\n\np" + + "arameters\030\t \001(\01322.org.apache.hadoop.hive" + + ".metastore.hbase.Parameters\022\032\n\022view_orig" + + "inal_text\030\n \001(\t\022\032\n\022view_expanded_text\030\013 " + + "\001(\t\022\022\n\ntable_type\030\014 \001(\t\022Q\n\nprivileges\030\r ", + "\001(\0132=.org.apache.hadoop.hive.metastore.h" + + "base.PrincipalPrivilegeSet\022\024\n\014is_tempora" + + "ry\030\016 \001(\010\"\353\004\n\026PartitionKeyComparator\022\r\n\005n" + + "ames\030\001 \002(\t\022\r\n\005types\030\002 \002(\t\022S\n\002op\030\003 \003(\0132G." + + "org.apache.hadoop.hive.metastore.hbase.P" + + "artitionKeyComparator.Operator\022S\n\005range\030" + + "\004 \003(\0132D.org.apache.hadoop.hive.metastore" + + ".hbase.PartitionKeyComparator.Range\032(\n\004M" + + "ark\022\r\n\005value\030\001 \002(\t\022\021\n\tinclusive\030\002 \002(\010\032\272\001" + + "\n\005Range\022\013\n\003key\030\001 \002(\t\022R\n\005start\030\002 \001(\0132C.or", + "g.apache.hadoop.hive.metastore.hbase.Par" + + "titionKeyComparator.Mark\022P\n\003end\030\003 \001(\0132C." + + "org.apache.hadoop.hive.metastore.hbase.P" + + "artitionKeyComparator.Mark\032\241\001\n\010Operator\022" + + "Z\n\004type\030\001 \002(\0162L.org.apache.hadoop.hive.m" + + "etastore.hbase.PartitionKeyComparator.Op" + + "erator.Type\022\013\n\003key\030\002 \002(\t\022\013\n\003val\030\003 \002(\t\"\037\n" + + "\004Type\022\010\n\004LIKE\020\000\022\r\n\tNOTEQUALS\020\001*#\n\rPrinci" + + "palType\022\010\n\004USER\020\000\022\010\n\004ROLE\020\001" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { @@ -34990,7 +35071,7 @@ public final class HbaseMetastoreProto { internal_static_org_apache_hadoop_hive_metastore_hbase_StorageDescriptor_Order_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_org_apache_hadoop_hive_metastore_hbase_StorageDescriptor_Order_descriptor, - new java.lang.String[] { "ColumnName", "Order", }); + new java.lang.String[] { "ColumnName", "Order", "NullOrder", }); internal_static_org_apache_hadoop_hive_metastore_hbase_StorageDescriptor_SerDeInfo_descriptor = internal_static_org_apache_hadoop_hive_metastore_hbase_StorageDescriptor_descriptor.getNestedTypes().get(1); internal_static_org_apache_hadoop_hive_metastore_hbase_StorageDescriptor_SerDeInfo_fieldAccessorTable = new http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/metastore/src/gen/thrift/gen-cpp/hive_metastore_types.cpp ---------------------------------------------------------------------- diff --git a/metastore/src/gen/thrift/gen-cpp/hive_metastore_types.cpp b/metastore/src/gen/thrift/gen-cpp/hive_metastore_types.cpp index 2695ffa..6534d68 100644 --- a/metastore/src/gen/thrift/gen-cpp/hive_metastore_types.cpp +++ b/metastore/src/gen/thrift/gen-cpp/hive_metastore_types.cpp @@ -3101,6 +3101,10 @@ void Order::__set_order(const int32_t val) { this->order = val; } +void Order::__set_nullOrder(const int32_t val) { + this->nullOrder = val; +} + uint32_t Order::read(::apache::thrift::protocol::TProtocol* iprot) { apache::thrift::protocol::TInputRecursionTracker tracker(*iprot); @@ -3138,6 +3142,14 @@ uint32_t Order::read(::apache::thrift::protocol::TProtocol* iprot) { xfer += iprot->skip(ftype); } break; + case 3: + if (ftype == ::apache::thrift::protocol::T_I32) { + xfer += iprot->readI32(this->nullOrder); + this->__isset.nullOrder = true; + } else { + xfer += iprot->skip(ftype); + } + break; default: xfer += iprot->skip(ftype); break; @@ -3163,6 +3175,10 @@ uint32_t Order::write(::apache::thrift::protocol::TProtocol* oprot) const { xfer += oprot->writeI32(this->order); xfer += oprot->writeFieldEnd(); + xfer += oprot->writeFieldBegin("nullOrder", ::apache::thrift::protocol::T_I32, 3); + xfer += oprot->writeI32(this->nullOrder); + xfer += oprot->writeFieldEnd(); + xfer += oprot->writeFieldStop(); xfer += oprot->writeStructEnd(); return xfer; @@ -3172,17 +3188,20 @@ void swap(Order &a, Order &b) { using ::std::swap; swap(a.col, b.col); swap(a.order, b.order); + swap(a.nullOrder, b.nullOrder); swap(a.__isset, b.__isset); } Order::Order(const Order& other139) { col = other139.col; order = other139.order; + nullOrder = other139.nullOrder; __isset = other139.__isset; } Order& Order::operator=(const Order& other140) { col = other140.col; order = other140.order; + nullOrder = other140.nullOrder; __isset = other140.__isset; return *this; } @@ -3191,6 +3210,7 @@ void Order::printTo(std::ostream& out) const { out << "Order("; out << "col=" << to_string(col); out << ", " << "order=" << to_string(order); + out << ", " << "nullOrder=" << to_string(nullOrder); out << ")"; } http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/metastore/src/gen/thrift/gen-cpp/hive_metastore_types.h ---------------------------------------------------------------------- diff --git a/metastore/src/gen/thrift/gen-cpp/hive_metastore_types.h b/metastore/src/gen/thrift/gen-cpp/hive_metastore_types.h index 97c07a5..3fd2543 100644 --- a/metastore/src/gen/thrift/gen-cpp/hive_metastore_types.h +++ b/metastore/src/gen/thrift/gen-cpp/hive_metastore_types.h @@ -1575,9 +1575,10 @@ inline std::ostream& operator<<(std::ostream& out, const SerDeInfo& obj) } typedef struct _Order__isset { - _Order__isset() : col(false), order(false) {} + _Order__isset() : col(false), order(false), nullOrder(false) {} bool col :1; bool order :1; + bool nullOrder :1; } _Order__isset; class Order { @@ -1585,12 +1586,13 @@ class Order { Order(const Order&); Order& operator=(const Order&); - Order() : col(), order(0) { + Order() : col(), order(0), nullOrder(0) { } virtual ~Order() throw(); std::string col; int32_t order; + int32_t nullOrder; _Order__isset __isset; @@ -1598,12 +1600,16 @@ class Order { void __set_order(const int32_t val); + void __set_nullOrder(const int32_t val); + bool operator == (const Order & rhs) const { if (!(col == rhs.col)) return false; if (!(order == rhs.order)) return false; + if (!(nullOrder == rhs.nullOrder)) + return false; return true; } bool operator != (const Order &rhs) const { http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/metastore/src/gen/thrift/gen-javabean/org/apache/hadoop/hive/metastore/api/Order.java ---------------------------------------------------------------------- diff --git a/metastore/src/gen/thrift/gen-javabean/org/apache/hadoop/hive/metastore/api/Order.java b/metastore/src/gen/thrift/gen-javabean/org/apache/hadoop/hive/metastore/api/Order.java index cc0e2dd..fd05de5 100644 --- a/metastore/src/gen/thrift/gen-javabean/org/apache/hadoop/hive/metastore/api/Order.java +++ b/metastore/src/gen/thrift/gen-javabean/org/apache/hadoop/hive/metastore/api/Order.java @@ -40,6 +40,7 @@ public class Order implements org.apache.thrift.TBase<Order, Order._Fields>, jav private static final org.apache.thrift.protocol.TField COL_FIELD_DESC = new org.apache.thrift.protocol.TField("col", org.apache.thrift.protocol.TType.STRING, (short)1); private static final org.apache.thrift.protocol.TField ORDER_FIELD_DESC = new org.apache.thrift.protocol.TField("order", org.apache.thrift.protocol.TType.I32, (short)2); + private static final org.apache.thrift.protocol.TField NULL_ORDER_FIELD_DESC = new org.apache.thrift.protocol.TField("nullOrder", org.apache.thrift.protocol.TType.I32, (short)3); private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>(); static { @@ -49,11 +50,13 @@ public class Order implements org.apache.thrift.TBase<Order, Order._Fields>, jav private String col; // required private int order; // required + private int nullOrder; // required /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */ public enum _Fields implements org.apache.thrift.TFieldIdEnum { COL((short)1, "col"), - ORDER((short)2, "order"); + ORDER((short)2, "order"), + NULL_ORDER((short)3, "nullOrder"); private static final Map<String, _Fields> byName = new HashMap<String, _Fields>(); @@ -72,6 +75,8 @@ public class Order implements org.apache.thrift.TBase<Order, Order._Fields>, jav return COL; case 2: // ORDER return ORDER; + case 3: // NULL_ORDER + return NULL_ORDER; default: return null; } @@ -113,6 +118,7 @@ public class Order implements org.apache.thrift.TBase<Order, Order._Fields>, jav // isset id assignments private static final int __ORDER_ISSET_ID = 0; + private static final int __NULLORDER_ISSET_ID = 1; private byte __isset_bitfield = 0; public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap; static { @@ -121,6 +127,8 @@ public class Order implements org.apache.thrift.TBase<Order, Order._Fields>, jav new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING))); tmpMap.put(_Fields.ORDER, new org.apache.thrift.meta_data.FieldMetaData("order", org.apache.thrift.TFieldRequirementType.DEFAULT, new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32))); + tmpMap.put(_Fields.NULL_ORDER, new org.apache.thrift.meta_data.FieldMetaData("nullOrder", org.apache.thrift.TFieldRequirementType.DEFAULT, + new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32))); metaDataMap = Collections.unmodifiableMap(tmpMap); org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(Order.class, metaDataMap); } @@ -130,12 +138,15 @@ public class Order implements org.apache.thrift.TBase<Order, Order._Fields>, jav public Order( String col, - int order) + int order, + int nullOrder) { this(); this.col = col; this.order = order; setOrderIsSet(true); + this.nullOrder = nullOrder; + setNullOrderIsSet(true); } /** @@ -147,6 +158,7 @@ public class Order implements org.apache.thrift.TBase<Order, Order._Fields>, jav this.col = other.col; } this.order = other.order; + this.nullOrder = other.nullOrder; } public Order deepCopy() { @@ -158,6 +170,8 @@ public class Order implements org.apache.thrift.TBase<Order, Order._Fields>, jav this.col = null; setOrderIsSet(false); this.order = 0; + setNullOrderIsSet(false); + this.nullOrder = 0; } public String getCol() { @@ -205,6 +219,28 @@ public class Order implements org.apache.thrift.TBase<Order, Order._Fields>, jav __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __ORDER_ISSET_ID, value); } + public int getNullOrder() { + return this.nullOrder; + } + + public void setNullOrder(int nullOrder) { + this.nullOrder = nullOrder; + setNullOrderIsSet(true); + } + + public void unsetNullOrder() { + __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __NULLORDER_ISSET_ID); + } + + /** Returns true if field nullOrder is set (has been assigned a value) and false otherwise */ + public boolean isSetNullOrder() { + return EncodingUtils.testBit(__isset_bitfield, __NULLORDER_ISSET_ID); + } + + public void setNullOrderIsSet(boolean value) { + __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __NULLORDER_ISSET_ID, value); + } + public void setFieldValue(_Fields field, Object value) { switch (field) { case COL: @@ -223,6 +259,14 @@ public class Order implements org.apache.thrift.TBase<Order, Order._Fields>, jav } break; + case NULL_ORDER: + if (value == null) { + unsetNullOrder(); + } else { + setNullOrder((Integer)value); + } + break; + } } @@ -234,6 +278,9 @@ public class Order implements org.apache.thrift.TBase<Order, Order._Fields>, jav case ORDER: return getOrder(); + case NULL_ORDER: + return getNullOrder(); + } throw new IllegalStateException(); } @@ -249,6 +296,8 @@ public class Order implements org.apache.thrift.TBase<Order, Order._Fields>, jav return isSetCol(); case ORDER: return isSetOrder(); + case NULL_ORDER: + return isSetNullOrder(); } throw new IllegalStateException(); } @@ -284,6 +333,15 @@ public class Order implements org.apache.thrift.TBase<Order, Order._Fields>, jav return false; } + boolean this_present_nullOrder = true; + boolean that_present_nullOrder = true; + if (this_present_nullOrder || that_present_nullOrder) { + if (!(this_present_nullOrder && that_present_nullOrder)) + return false; + if (this.nullOrder != that.nullOrder) + return false; + } + return true; } @@ -301,6 +359,11 @@ public class Order implements org.apache.thrift.TBase<Order, Order._Fields>, jav if (present_order) list.add(order); + boolean present_nullOrder = true; + list.add(present_nullOrder); + if (present_nullOrder) + list.add(nullOrder); + return list.hashCode(); } @@ -332,6 +395,16 @@ public class Order implements org.apache.thrift.TBase<Order, Order._Fields>, jav return lastComparison; } } + lastComparison = Boolean.valueOf(isSetNullOrder()).compareTo(other.isSetNullOrder()); + if (lastComparison != 0) { + return lastComparison; + } + if (isSetNullOrder()) { + lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.nullOrder, other.nullOrder); + if (lastComparison != 0) { + return lastComparison; + } + } return 0; } @@ -363,6 +436,10 @@ public class Order implements org.apache.thrift.TBase<Order, Order._Fields>, jav sb.append("order:"); sb.append(this.order); first = false; + if (!first) sb.append(", "); + sb.append("nullOrder:"); + sb.append(this.nullOrder); + first = false; sb.append(")"); return sb.toString(); } @@ -424,6 +501,14 @@ public class Order implements org.apache.thrift.TBase<Order, Order._Fields>, jav org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); } break; + case 3: // NULL_ORDER + if (schemeField.type == org.apache.thrift.protocol.TType.I32) { + struct.nullOrder = iprot.readI32(); + struct.setNullOrderIsSet(true); + } else { + org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); + } + break; default: org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); } @@ -445,6 +530,9 @@ public class Order implements org.apache.thrift.TBase<Order, Order._Fields>, jav oprot.writeFieldBegin(ORDER_FIELD_DESC); oprot.writeI32(struct.order); oprot.writeFieldEnd(); + oprot.writeFieldBegin(NULL_ORDER_FIELD_DESC); + oprot.writeI32(struct.nullOrder); + oprot.writeFieldEnd(); oprot.writeFieldStop(); oprot.writeStructEnd(); } @@ -469,19 +557,25 @@ public class Order implements org.apache.thrift.TBase<Order, Order._Fields>, jav if (struct.isSetOrder()) { optionals.set(1); } - oprot.writeBitSet(optionals, 2); + if (struct.isSetNullOrder()) { + optionals.set(2); + } + oprot.writeBitSet(optionals, 3); if (struct.isSetCol()) { oprot.writeString(struct.col); } if (struct.isSetOrder()) { oprot.writeI32(struct.order); } + if (struct.isSetNullOrder()) { + oprot.writeI32(struct.nullOrder); + } } @Override public void read(org.apache.thrift.protocol.TProtocol prot, Order struct) throws org.apache.thrift.TException { TTupleProtocol iprot = (TTupleProtocol) prot; - BitSet incoming = iprot.readBitSet(2); + BitSet incoming = iprot.readBitSet(3); if (incoming.get(0)) { struct.col = iprot.readString(); struct.setColIsSet(true); @@ -490,6 +584,10 @@ public class Order implements org.apache.thrift.TBase<Order, Order._Fields>, jav struct.order = iprot.readI32(); struct.setOrderIsSet(true); } + if (incoming.get(2)) { + struct.nullOrder = iprot.readI32(); + struct.setNullOrderIsSet(true); + } } } http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/metastore/src/gen/thrift/gen-php/metastore/Types.php ---------------------------------------------------------------------- diff --git a/metastore/src/gen/thrift/gen-php/metastore/Types.php b/metastore/src/gen/thrift/gen-php/metastore/Types.php index 488a920..4da4707 100644 --- a/metastore/src/gen/thrift/gen-php/metastore/Types.php +++ b/metastore/src/gen/thrift/gen-php/metastore/Types.php @@ -3076,6 +3076,10 @@ class Order { * @var int */ public $order = null; + /** + * @var int + */ + public $nullOrder = null; public function __construct($vals=null) { if (!isset(self::$_TSPEC)) { @@ -3088,6 +3092,10 @@ class Order { 'var' => 'order', 'type' => TType::I32, ), + 3 => array( + 'var' => 'nullOrder', + 'type' => TType::I32, + ), ); } if (is_array($vals)) { @@ -3097,6 +3105,9 @@ class Order { if (isset($vals['order'])) { $this->order = $vals['order']; } + if (isset($vals['nullOrder'])) { + $this->nullOrder = $vals['nullOrder']; + } } } @@ -3133,6 +3144,13 @@ class Order { $xfer += $input->skip($ftype); } break; + case 3: + if ($ftype == TType::I32) { + $xfer += $input->readI32($this->nullOrder); + } else { + $xfer += $input->skip($ftype); + } + break; default: $xfer += $input->skip($ftype); break; @@ -3156,6 +3174,11 @@ class Order { $xfer += $output->writeI32($this->order); $xfer += $output->writeFieldEnd(); } + if ($this->nullOrder !== null) { + $xfer += $output->writeFieldBegin('nullOrder', TType::I32, 3); + $xfer += $output->writeI32($this->nullOrder); + $xfer += $output->writeFieldEnd(); + } $xfer += $output->writeFieldStop(); $xfer += $output->writeStructEnd(); return $xfer; http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/metastore/src/gen/thrift/gen-py/hive_metastore/ttypes.py ---------------------------------------------------------------------- diff --git a/metastore/src/gen/thrift/gen-py/hive_metastore/ttypes.py b/metastore/src/gen/thrift/gen-py/hive_metastore/ttypes.py index 10eaf4a..4b20da9 100644 --- a/metastore/src/gen/thrift/gen-py/hive_metastore/ttypes.py +++ b/metastore/src/gen/thrift/gen-py/hive_metastore/ttypes.py @@ -2237,17 +2237,20 @@ class Order: Attributes: - col - order + - nullOrder """ thrift_spec = ( None, # 0 (1, TType.STRING, 'col', None, None, ), # 1 (2, TType.I32, 'order', None, None, ), # 2 + (3, TType.I32, 'nullOrder', None, None, ), # 3 ) - def __init__(self, col=None, order=None,): + def __init__(self, col=None, order=None, nullOrder=None,): self.col = col self.order = order + self.nullOrder = nullOrder def read(self, iprot): if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None: @@ -2268,6 +2271,11 @@ class Order: self.order = iprot.readI32() else: iprot.skip(ftype) + elif fid == 3: + if ftype == TType.I32: + self.nullOrder = iprot.readI32() + else: + iprot.skip(ftype) else: iprot.skip(ftype) iprot.readFieldEnd() @@ -2286,6 +2294,10 @@ class Order: oprot.writeFieldBegin('order', TType.I32, 2) oprot.writeI32(self.order) oprot.writeFieldEnd() + if self.nullOrder is not None: + oprot.writeFieldBegin('nullOrder', TType.I32, 3) + oprot.writeI32(self.nullOrder) + oprot.writeFieldEnd() oprot.writeFieldStop() oprot.writeStructEnd() @@ -2297,6 +2309,7 @@ class Order: value = 17 value = (value * 31) ^ hash(self.col) value = (value * 31) ^ hash(self.order) + value = (value * 31) ^ hash(self.nullOrder) return value def __repr__(self): http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/metastore/src/gen/thrift/gen-rb/hive_metastore_types.rb ---------------------------------------------------------------------- diff --git a/metastore/src/gen/thrift/gen-rb/hive_metastore_types.rb b/metastore/src/gen/thrift/gen-rb/hive_metastore_types.rb index 1cf40ae..556c380 100644 --- a/metastore/src/gen/thrift/gen-rb/hive_metastore_types.rb +++ b/metastore/src/gen/thrift/gen-rb/hive_metastore_types.rb @@ -557,10 +557,12 @@ class Order include ::Thrift::Struct, ::Thrift::Struct_Union COL = 1 ORDER = 2 + NULLORDER = 3 FIELDS = { COL => {:type => ::Thrift::Types::STRING, :name => 'col'}, - ORDER => {:type => ::Thrift::Types::I32, :name => 'order'} + ORDER => {:type => ::Thrift::Types::I32, :name => 'order'}, + NULLORDER => {:type => ::Thrift::Types::I32, :name => 'nullOrder'} } def struct_fields; FIELDS; end http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java ---------------------------------------------------------------------- diff --git a/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java b/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java index 6da295e..3b31ee1 100644 --- a/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java +++ b/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java @@ -672,14 +672,16 @@ class MetaStoreDirectSql { t.setParameters(MetaStoreUtils.trimMapNulls(t.getParameters(), convertMapNullsToEmptyStrings)); } - queryText = "select \"SD_ID\", \"COLUMN_NAME\", \"SORT_COLS\".\"ORDER\" from \"SORT_COLS\"" + queryText = "select \"SD_ID\", \"COLUMN_NAME\", \"SORT_COLS\".\"ORDER\", \"SORT_COLS\".\"NULL_ORDER\"" + + " from \"SORT_COLS\"" + " where \"SD_ID\" in (" + sdIds + ") and \"INTEGER_IDX\" >= 0" + " order by \"SD_ID\" asc, \"INTEGER_IDX\" asc"; loopJoinOrderedResult(sds, queryText, 0, new ApplyFunc<StorageDescriptor>() { @Override public void apply(StorageDescriptor t, Object[] fields) { if (fields[2] == null) return; - t.addToSortCols(new Order((String)fields[1], extractSqlInt(fields[2]))); + assert fields[3] != null; + t.addToSortCols(new Order((String)fields[1], extractSqlInt(fields[2]), extractSqlInt(fields[3]))); }}); queryText = "select \"SD_ID\", \"BUCKET_COL_NAME\" from \"BUCKETING_COLS\"" http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java ---------------------------------------------------------------------- diff --git a/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java b/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java index d4852b0..1d04ef2 100644 --- a/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java +++ b/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java @@ -1367,7 +1367,8 @@ public class ObjectStore implements RawStore, Configurable { if (keys != null) { mkeys = new ArrayList<MOrder>(keys.size()); for (Order part : keys) { - mkeys.add(new MOrder(HiveStringUtils.normalizeIdentifier(part.getCol()), part.getOrder())); + mkeys.add(new MOrder(HiveStringUtils.normalizeIdentifier(part.getCol()), part.getOrder(), + part.getNullOrder())); } } return mkeys; @@ -1378,7 +1379,7 @@ public class ObjectStore implements RawStore, Configurable { if (mkeys != null) { keys = new ArrayList<Order>(mkeys.size()); for (MOrder part : mkeys) { - keys.add(new Order(part.getCol(), part.getOrder())); + keys.add(new Order(part.getCol(), part.getOrder(), part.getNullOrder())); } } return keys; http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/metastore/src/java/org/apache/hadoop/hive/metastore/hbase/HBaseUtils.java ---------------------------------------------------------------------- diff --git a/metastore/src/java/org/apache/hadoop/hive/metastore/hbase/HBaseUtils.java b/metastore/src/java/org/apache/hadoop/hive/metastore/hbase/HBaseUtils.java index d6d01bd..a16997b 100644 --- a/metastore/src/java/org/apache/hadoop/hive/metastore/hbase/HBaseUtils.java +++ b/metastore/src/java/org/apache/hadoop/hive/metastore/hbase/HBaseUtils.java @@ -707,7 +707,7 @@ class HBaseUtils { sd.setBucketCols(new ArrayList<>(proto.getBucketColsList())); List<Order> sortCols = new ArrayList<>(); for (HbaseMetastoreProto.StorageDescriptor.Order protoOrder : proto.getSortColsList()) { - sortCols.add(new Order(protoOrder.getColumnName(), protoOrder.getOrder())); + sortCols.add(new Order(protoOrder.getColumnName(), protoOrder.getOrder(), protoOrder.getNullOrder())); } sd.setSortCols(sortCols); if (proto.hasSkewedInfo()) { http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/metastore/src/model/org/apache/hadoop/hive/metastore/model/MOrder.java ---------------------------------------------------------------------- diff --git a/metastore/src/model/org/apache/hadoop/hive/metastore/model/MOrder.java b/metastore/src/model/org/apache/hadoop/hive/metastore/model/MOrder.java index 1fa82a4..5370c02 100644 --- a/metastore/src/model/org/apache/hadoop/hive/metastore/model/MOrder.java +++ b/metastore/src/model/org/apache/hadoop/hive/metastore/model/MOrder.java @@ -21,14 +21,16 @@ package org.apache.hadoop.hive.metastore.model; public class MOrder { private String col; private int order; - + private int nullOrder; + /** * @param col * @param order */ - public MOrder(String col, int order) { + public MOrder(String col, int order, int nullOrder) { this.col = col; this.order = order; + this.nullOrder = nullOrder; } /** @@ -58,5 +60,19 @@ public class MOrder { public void setOrder(int order) { this.order = order; } - + + /** + * @return the null order + */ + public int getNullOrder() { + return nullOrder; + } + + /** + * @param nullOrder the null order to set + */ + public void setNullOrder(int nullOrder) { + this.nullOrder = nullOrder; + } + } http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/metastore/src/protobuf/org/apache/hadoop/hive/metastore/hbase/hbase_metastore_proto.proto ---------------------------------------------------------------------- diff --git a/metastore/src/protobuf/org/apache/hadoop/hive/metastore/hbase/hbase_metastore_proto.proto b/metastore/src/protobuf/org/apache/hadoop/hive/metastore/hbase/hbase_metastore_proto.proto index 466fdf9..552097b 100644 --- a/metastore/src/protobuf/org/apache/hadoop/hive/metastore/hbase/hbase_metastore_proto.proto +++ b/metastore/src/protobuf/org/apache/hadoop/hive/metastore/hbase/hbase_metastore_proto.proto @@ -205,6 +205,7 @@ message StorageDescriptor { message Order { required string column_name = 1; optional sint32 order = 2 [default = 1]; + optional sint32 nullOrder = 3 [default = 0]; } message SerDeInfo { http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/metastore/src/test/org/apache/hadoop/hive/metastore/hbase/TestHBaseStore.java ---------------------------------------------------------------------- diff --git a/metastore/src/test/org/apache/hadoop/hive/metastore/hbase/TestHBaseStore.java b/metastore/src/test/org/apache/hadoop/hive/metastore/hbase/TestHBaseStore.java index 29d5a64..d938a03 100644 --- a/metastore/src/test/org/apache/hadoop/hive/metastore/hbase/TestHBaseStore.java +++ b/metastore/src/test/org/apache/hadoop/hive/metastore/hbase/TestHBaseStore.java @@ -18,8 +18,16 @@ */ package org.apache.hadoop.hive.metastore.hbase; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import java.io.IOException; +import java.security.MessageDigest; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.SortedMap; +import java.util.TreeMap; + import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.client.HTableInterface; import org.apache.hadoop.hive.conf.HiveConf; @@ -58,16 +66,8 @@ import org.junit.Test; import org.junit.rules.ExpectedException; import org.mockito.Mock; import org.mockito.MockitoAnnotations; - -import java.io.IOException; -import java.security.MessageDigest; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.SortedMap; -import java.util.TreeMap; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @@ -402,7 +402,7 @@ public class TestHBaseStore { Map<String, String> params = new HashMap<String, String>(); params.put("key", "value"); StorageDescriptor sd = new StorageDescriptor(cols, "file:/tmp", "input", "output", false, 17, - serde, Arrays.asList("bucketcol"), Arrays.asList(new Order("sortcol", 1)), params); + serde, Arrays.asList("bucketcol"), Arrays.asList(new Order("sortcol", 1, 0)), params); Table table = new Table(tableName, "default", "me", startTime, startTime, 0, sd, null, emptyParameters, null, null, null); store.createTable(table); @@ -424,6 +424,7 @@ public class TestHBaseStore { Assert.assertEquals(1, t.getSd().getSortColsSize()); Assert.assertEquals("sortcol", t.getSd().getSortCols().get(0).getCol()); Assert.assertEquals(1, t.getSd().getSortCols().get(0).getOrder()); + Assert.assertEquals(0, t.getSd().getSortCols().get(0).getNullOrder()); Assert.assertEquals(1, t.getSd().getParametersSize()); Assert.assertEquals("value", t.getSd().getParameters().get("key")); Assert.assertEquals("me", t.getOwner()); @@ -1273,7 +1274,7 @@ public class TestHBaseStore { Map<String, String> params = new HashMap<String, String>(); params.put("key", "value"); StorageDescriptor sd = new StorageDescriptor(cols, "file:/tmp", "input", "output", false, 17, - serde, Arrays.asList("bucketcol"), Arrays.asList(new Order("sortcol", 1)), params); + serde, Arrays.asList("bucketcol"), Arrays.asList(new Order("sortcol", 1, 0)), params); int currentTime = (int)(System.currentTimeMillis() / 1000); Table table = new Table(TBL, DB, "me", currentTime, currentTime, 0, sd, cols, emptyParameters, null, null, null); @@ -1291,7 +1292,7 @@ public class TestHBaseStore { Map<String, String> params = new HashMap<String, String>(); params.put("key", "value"); StorageDescriptor sd = new StorageDescriptor(cols, "file:/tmp", "input", "output", false, 17, - serde, Arrays.asList("bucketcol"), Arrays.asList(new Order("sortcol", 1)), params); + serde, Arrays.asList("bucketcol"), Arrays.asList(new Order("sortcol", 1, 0)), params); int currentTime = (int)(System.currentTimeMillis() / 1000); Table table = new Table(TBL, DB, "me", currentTime, currentTime, 0, sd, cols, emptyParameters, null, null, null); http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/metastore/src/test/org/apache/hadoop/hive/metastore/hbase/TestHBaseStoreBitVector.java ---------------------------------------------------------------------- diff --git a/metastore/src/test/org/apache/hadoop/hive/metastore/hbase/TestHBaseStoreBitVector.java b/metastore/src/test/org/apache/hadoop/hive/metastore/hbase/TestHBaseStoreBitVector.java index b0d7662..570d023 100644 --- a/metastore/src/test/org/apache/hadoop/hive/metastore/hbase/TestHBaseStoreBitVector.java +++ b/metastore/src/test/org/apache/hadoop/hive/metastore/hbase/TestHBaseStoreBitVector.java @@ -18,34 +18,30 @@ */ package org.apache.hadoop.hive.metastore.hbase; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.SortedMap; +import java.util.TreeMap; + import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.client.HTableInterface; import org.apache.hadoop.hive.conf.HiveConf; -import org.apache.hadoop.hive.metastore.api.BinaryColumnStatsData; -import org.apache.hadoop.hive.metastore.api.BooleanColumnStatsData; import org.apache.hadoop.hive.metastore.api.ColumnStatistics; import org.apache.hadoop.hive.metastore.api.ColumnStatisticsData; import org.apache.hadoop.hive.metastore.api.ColumnStatisticsDesc; import org.apache.hadoop.hive.metastore.api.ColumnStatisticsObj; -import org.apache.hadoop.hive.metastore.api.Database; import org.apache.hadoop.hive.metastore.api.Decimal; import org.apache.hadoop.hive.metastore.api.DecimalColumnStatsData; import org.apache.hadoop.hive.metastore.api.DoubleColumnStatsData; import org.apache.hadoop.hive.metastore.api.FieldSchema; -import org.apache.hadoop.hive.metastore.api.Function; -import org.apache.hadoop.hive.metastore.api.FunctionType; import org.apache.hadoop.hive.metastore.api.LongColumnStatsData; -import org.apache.hadoop.hive.metastore.api.NoSuchObjectException; import org.apache.hadoop.hive.metastore.api.Order; import org.apache.hadoop.hive.metastore.api.Partition; -import org.apache.hadoop.hive.metastore.api.PrincipalType; -import org.apache.hadoop.hive.metastore.api.ResourceType; -import org.apache.hadoop.hive.metastore.api.ResourceUri; -import org.apache.hadoop.hive.metastore.api.Role; import org.apache.hadoop.hive.metastore.api.SerDeInfo; -import org.apache.hadoop.hive.metastore.api.SkewedInfo; import org.apache.hadoop.hive.metastore.api.StorageDescriptor; import org.apache.hadoop.hive.metastore.api.StringColumnStatsData; import org.apache.hadoop.hive.metastore.api.Table; @@ -58,16 +54,8 @@ import org.junit.Test; import org.junit.rules.ExpectedException; import org.mockito.Mock; import org.mockito.MockitoAnnotations; - -import java.io.IOException; -import java.security.MessageDigest; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.SortedMap; -import java.util.TreeMap; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @@ -595,7 +583,7 @@ public class TestHBaseStoreBitVector { Map<String, String> params = new HashMap<String, String>(); params.put("key", "value"); StorageDescriptor sd = new StorageDescriptor(cols, "file:/tmp", "input", "output", false, 17, - serde, Arrays.asList("bucketcol"), Arrays.asList(new Order("sortcol", 1)), params); + serde, Arrays.asList("bucketcol"), Arrays.asList(new Order("sortcol", 1, 0)), params); int currentTime = (int)(System.currentTimeMillis() / 1000); Table table = new Table(TBL, DB, "me", currentTime, currentTime, 0, sd, cols, emptyParameters, null, null, null); http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/metastore/src/test/org/apache/hadoop/hive/metastore/hbase/TestSharedStorageDescriptor.java ---------------------------------------------------------------------- diff --git a/metastore/src/test/org/apache/hadoop/hive/metastore/hbase/TestSharedStorageDescriptor.java b/metastore/src/test/org/apache/hadoop/hive/metastore/hbase/TestSharedStorageDescriptor.java index e0d8ce4..8e856a1 100644 --- a/metastore/src/test/org/apache/hadoop/hive/metastore/hbase/TestSharedStorageDescriptor.java +++ b/metastore/src/test/org/apache/hadoop/hive/metastore/hbase/TestSharedStorageDescriptor.java @@ -18,8 +18,9 @@ */ package org.apache.hadoop.hive.metastore.hbase; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import java.util.Iterator; +import java.util.List; + import org.apache.hadoop.hive.metastore.api.FieldSchema; import org.apache.hadoop.hive.metastore.api.Order; import org.apache.hadoop.hive.metastore.api.SerDeInfo; @@ -27,10 +28,8 @@ import org.apache.hadoop.hive.metastore.api.SkewedInfo; import org.apache.hadoop.hive.metastore.api.StorageDescriptor; import org.junit.Assert; import org.junit.Test; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** @@ -80,19 +79,22 @@ public class TestSharedStorageDescriptor { @Test public void changeOrder() { StorageDescriptor sd = new StorageDescriptor(); - sd.addToSortCols(new Order("fred", 1)); + sd.addToSortCols(new Order("fred", 1, 0)); SharedStorageDescriptor ssd = new SharedStorageDescriptor(); ssd.setShared(sd); ssd.getSortCols().get(0).setOrder(2); + ssd.getSortCols().get(0).setNullOrder(3); Assert.assertFalse(sd.getSortCols() == ssd.getSortCols()); Assert.assertEquals(2, ssd.getSortCols().get(0).getOrder()); Assert.assertEquals(1, sd.getSortCols().get(0).getOrder()); + Assert.assertEquals(3, ssd.getSortCols().get(0).getNullOrder()); + Assert.assertEquals(0, sd.getSortCols().get(0).getNullOrder()); } @Test public void unsetOrder() { StorageDescriptor sd = new StorageDescriptor(); - sd.addToSortCols(new Order("fred", 1)); + sd.addToSortCols(new Order("fred", 1, 0)); SharedStorageDescriptor ssd = new SharedStorageDescriptor(); ssd.setShared(sd); ssd.unsetSortCols(); http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java index c51cfd6..70afe16 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java @@ -2140,6 +2140,11 @@ public class DDLTask extends Task<DDLWork> implements Serializable { else if (sortCol.getOrder() == BaseSemanticAnalyzer.HIVE_COLUMN_ORDER_DESC) { sortKeyDesc = sortKeyDesc + "DESC"; } + if (sortCol.getNullOrder() == BaseSemanticAnalyzer.HIVE_COLUMN_NULLS_FIRST) { + sortKeyDesc = sortKeyDesc + " NULLS FIRST"; + } else if (sortCol.getNullOrder() == BaseSemanticAnalyzer.HIVE_COLUMN_NULLS_LAST) { + sortKeyDesc = sortKeyDesc + " NULLS LAST"; + } sortKeys.add(sortKeyDesc); } tbl_sort_bucket += StringUtils.join(sortKeys, ", \n"); http://git-wip-us.apache.org/repos/asf/hive/blob/9350b693/ql/src/java/org/apache/hadoop/hive/ql/exec/MapJoinOperator.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/MapJoinOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/MapJoinOperator.java index 4d2447b..e79fccd 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/MapJoinOperator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/MapJoinOperator.java @@ -653,6 +653,8 @@ public class MapJoinOperator extends AbstractMapJoinOperator<MapJoinDesc> implem spilledMapJoinTables[pos] = new MapJoinBytesTableContainer(restoredHashMap); spilledMapJoinTables[pos].setInternalValueOi(container.getInternalValueOi()); spilledMapJoinTables[pos].setSortableSortOrders(container.getSortableSortOrders()); + spilledMapJoinTables[pos].setNullMarkers(container.getNullMarkers()); + spilledMapJoinTables[pos].setNotNullMarkers(container.getNotNullMarkers()); } /**
