Author: jvs
Date: Mon Oct 17 18:01:27 2011
New Revision: 1185311
URL: http://svn.apache.org/viewvc?rev=1185311&view=rev
Log:
HIVE-2223. support grouping on complex types in Hive
(Jonathan Chang via jvs)
Added:
hive/trunk/ql/src/test/queries/clientpositive/groupby_complex_types.q
hive/trunk/ql/src/test/results/clientpositive/groupby_complex_types.q.out
Modified:
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java
hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/objectinspector/TestStandardObjectInspectors.java
Added: hive/trunk/ql/src/test/queries/clientpositive/groupby_complex_types.q
URL:
http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientpositive/groupby_complex_types.q?rev=1185311&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientpositive/groupby_complex_types.q
(added)
+++ hive/trunk/ql/src/test/queries/clientpositive/groupby_complex_types.q Mon
Oct 17 18:01:27 2011
@@ -0,0 +1,16 @@
+
+CREATE TABLE DEST1(key ARRAY<STRING>, value BIGINT) STORED AS TEXTFILE;
+CREATE TABLE DEST2(key MAP<STRING, STRING>, value BIGINT) STORED AS TEXTFILE;
+
+EXPLAIN
+FROM SRC
+INSERT OVERWRITE TABLE DEST1 SELECT ARRAY(SRC.key), COUNT(1) GROUP BY
ARRAY(SRC.key)
+INSERT OVERWRITE TABLE DEST2 SELECT MAP(SRC.key, SRC.value), COUNT(1) GROUP BY
MAP(SRC.key, SRC.value);
+
+FROM SRC
+INSERT OVERWRITE TABLE DEST1 SELECT ARRAY(SRC.key), COUNT(1) GROUP BY
ARRAY(SRC.key)
+INSERT OVERWRITE TABLE DEST2 SELECT MAP(SRC.key, SRC.value), COUNT(1) GROUP BY
MAP(SRC.key, SRC.value);
+
+SELECT DEST1.* FROM DEST1;
+SELECT DEST2.* FROM DEST2;
+
Added: hive/trunk/ql/src/test/results/clientpositive/groupby_complex_types.q.out
URL:
http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientpositive/groupby_complex_types.q.out?rev=1185311&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientpositive/groupby_complex_types.q.out
(added)
+++ hive/trunk/ql/src/test/results/clientpositive/groupby_complex_types.q.out
Mon Oct 17 18:01:27 2011
@@ -0,0 +1,841 @@
+PREHOOK: query: CREATE TABLE DEST1(key ARRAY<STRING>, value BIGINT) STORED AS
TEXTFILE
+PREHOOK: type: CREATETABLE
+POSTHOOK: query: CREATE TABLE DEST1(key ARRAY<STRING>, value BIGINT) STORED AS
TEXTFILE
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: default@DEST1
+PREHOOK: query: CREATE TABLE DEST2(key MAP<STRING, STRING>, value BIGINT)
STORED AS TEXTFILE
+PREHOOK: type: CREATETABLE
+POSTHOOK: query: CREATE TABLE DEST2(key MAP<STRING, STRING>, value BIGINT)
STORED AS TEXTFILE
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: default@DEST2
+PREHOOK: query: EXPLAIN
+FROM SRC
+INSERT OVERWRITE TABLE DEST1 SELECT ARRAY(SRC.key), COUNT(1) GROUP BY
ARRAY(SRC.key)
+INSERT OVERWRITE TABLE DEST2 SELECT MAP(SRC.key, SRC.value), COUNT(1) GROUP BY
MAP(SRC.key, SRC.value)
+PREHOOK: type: QUERY
+POSTHOOK: query: EXPLAIN
+FROM SRC
+INSERT OVERWRITE TABLE DEST1 SELECT ARRAY(SRC.key), COUNT(1) GROUP BY
ARRAY(SRC.key)
+INSERT OVERWRITE TABLE DEST2 SELECT MAP(SRC.key, SRC.value), COUNT(1) GROUP BY
MAP(SRC.key, SRC.value)
+POSTHOOK: type: QUERY
+ABSTRACT SYNTAX TREE:
+ (TOK_QUERY (TOK_FROM (TOK_TABREF (TOK_TABNAME SRC))) (TOK_INSERT
(TOK_DESTINATION (TOK_TAB (TOK_TABNAME DEST1))) (TOK_SELECT (TOK_SELEXPR
(TOK_FUNCTION ARRAY (. (TOK_TABLE_OR_COL SRC) key))) (TOK_SELEXPR (TOK_FUNCTION
COUNT 1))) (TOK_GROUPBY (TOK_FUNCTION ARRAY (. (TOK_TABLE_OR_COL SRC) key))))
(TOK_INSERT (TOK_DESTINATION (TOK_TAB (TOK_TABNAME DEST2))) (TOK_SELECT
(TOK_SELEXPR (TOK_FUNCTION MAP (. (TOK_TABLE_OR_COL SRC) key) (.
(TOK_TABLE_OR_COL SRC) value))) (TOK_SELEXPR (TOK_FUNCTION COUNT 1)))
(TOK_GROUPBY (TOK_FUNCTION MAP (. (TOK_TABLE_OR_COL SRC) key) (.
(TOK_TABLE_OR_COL SRC) value)))))
+
+STAGE DEPENDENCIES:
+ Stage-2 is a root stage
+ Stage-0 depends on stages: Stage-2
+ Stage-3 depends on stages: Stage-0
+ Stage-4 depends on stages: Stage-2
+ Stage-1 depends on stages: Stage-4
+ Stage-5 depends on stages: Stage-1
+
+STAGE PLANS:
+ Stage: Stage-2
+ Map Reduce
+ Alias -> Map Operator Tree:
+ src
+ TableScan
+ alias: src
+ Select Operator
+ expressions:
+ expr: key
+ type: string
+ outputColumnNames: key
+ Group By Operator
+ aggregations:
+ expr: count(1)
+ bucketGroup: false
+ keys:
+ expr: array(key)
+ type: array<string>
+ mode: hash
+ outputColumnNames: _col0, _col1
+ Reduce Output Operator
+ key expressions:
+ expr: _col0
+ type: array<string>
+ sort order: +
+ Map-reduce partition columns:
+ expr: _col0
+ type: array<string>
+ tag: -1
+ value expressions:
+ expr: _col1
+ type: bigint
+ Select Operator
+ expressions:
+ expr: key
+ type: string
+ expr: value
+ type: string
+ outputColumnNames: key, value
+ Group By Operator
+ aggregations:
+ expr: count(1)
+ bucketGroup: false
+ keys:
+ expr: map(key:value)
+ type: map<string,string>
+ mode: hash
+ outputColumnNames: _col0, _col1
+ File Output Operator
+ compressed: false
+ GlobalTableId: 0
+ table:
+ input format:
org.apache.hadoop.mapred.SequenceFileInputFormat
+ output format:
org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+ Reduce Operator Tree:
+ Group By Operator
+ aggregations:
+ expr: count(VALUE._col0)
+ bucketGroup: false
+ keys:
+ expr: KEY._col0
+ type: array<string>
+ mode: mergepartial
+ outputColumnNames: _col0, _col1
+ Select Operator
+ expressions:
+ expr: _col0
+ type: array<string>
+ expr: _col1
+ type: bigint
+ outputColumnNames: _col0, _col1
+ File Output Operator
+ compressed: false
+ GlobalTableId: 1
+ table:
+ input format: org.apache.hadoop.mapred.TextInputFormat
+ output format:
org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+ serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+ name: default.dest1
+
+ Stage: Stage-0
+ Move Operator
+ tables:
+ replace: true
+ table:
+ input format: org.apache.hadoop.mapred.TextInputFormat
+ output format:
org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+ serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+ name: default.dest1
+
+ Stage: Stage-3
+ Stats-Aggr Operator
+
+ Stage: Stage-4
+ Map Reduce
+ Alias -> Map Operator Tree:
+
file:/var/folders/C4/C40caRNsEM4C4yVangruonVUe7Y/-Tmp-/jonchang/hive_2011-09-07_12-57-23_371_8795371005069948458/-mr-10004
+ Reduce Output Operator
+ key expressions:
+ expr: _col0
+ type: map<string,string>
+ sort order: +
+ Map-reduce partition columns:
+ expr: _col0
+ type: map<string,string>
+ tag: -1
+ value expressions:
+ expr: _col1
+ type: bigint
+ Reduce Operator Tree:
+ Group By Operator
+ aggregations:
+ expr: count(VALUE._col0)
+ bucketGroup: false
+ keys:
+ expr: KEY._col0
+ type: map<string,string>
+ mode: mergepartial
+ outputColumnNames: _col0, _col1
+ Select Operator
+ expressions:
+ expr: _col0
+ type: map<string,string>
+ expr: _col1
+ type: bigint
+ outputColumnNames: _col0, _col1
+ File Output Operator
+ compressed: false
+ GlobalTableId: 2
+ table:
+ input format: org.apache.hadoop.mapred.TextInputFormat
+ output format:
org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+ serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+ name: default.dest2
+
+ Stage: Stage-1
+ Move Operator
+ tables:
+ replace: true
+ table:
+ input format: org.apache.hadoop.mapred.TextInputFormat
+ output format:
org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+ serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+ name: default.dest2
+
+ Stage: Stage-5
+ Stats-Aggr Operator
+
+
+PREHOOK: query: FROM SRC
+INSERT OVERWRITE TABLE DEST1 SELECT ARRAY(SRC.key), COUNT(1) GROUP BY
ARRAY(SRC.key)
+INSERT OVERWRITE TABLE DEST2 SELECT MAP(SRC.key, SRC.value), COUNT(1) GROUP BY
MAP(SRC.key, SRC.value)
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: default@dest1
+PREHOOK: Output: default@dest2
+POSTHOOK: query: FROM SRC
+INSERT OVERWRITE TABLE DEST1 SELECT ARRAY(SRC.key), COUNT(1) GROUP BY
ARRAY(SRC.key)
+INSERT OVERWRITE TABLE DEST2 SELECT MAP(SRC.key, SRC.value), COUNT(1) GROUP BY
MAP(SRC.key, SRC.value)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: default@dest1
+POSTHOOK: Output: default@dest2
+POSTHOOK: Lineage: dest1.key EXPRESSION [(src)src.FieldSchema(name:key,
type:string, comment:default), ]
+POSTHOOK: Lineage: dest1.value EXPRESSION [(src)src.null, ]
+POSTHOOK: Lineage: dest2.key EXPRESSION [(src)src.FieldSchema(name:key,
type:string, comment:default), (src)src.FieldSchema(name:value, type:string,
comment:default), ]
+POSTHOOK: Lineage: dest2.value EXPRESSION [(src)src.null, ]
+PREHOOK: query: SELECT DEST1.* FROM DEST1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@dest1
+PREHOOK: Output:
file:/var/folders/C4/C40caRNsEM4C4yVangruonVUe7Y/-Tmp-/jonchang/hive_2011-09-07_12-57-49_014_7204811364544227299/-mr-10000
+POSTHOOK: query: SELECT DEST1.* FROM DEST1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@dest1
+POSTHOOK: Output:
file:/var/folders/C4/C40caRNsEM4C4yVangruonVUe7Y/-Tmp-/jonchang/hive_2011-09-07_12-57-49_014_7204811364544227299/-mr-10000
+POSTHOOK: Lineage: dest1.key EXPRESSION [(src)src.FieldSchema(name:key,
type:string, comment:default), ]
+POSTHOOK: Lineage: dest1.value EXPRESSION [(src)src.null, ]
+POSTHOOK: Lineage: dest2.key EXPRESSION [(src)src.FieldSchema(name:key,
type:string, comment:default), (src)src.FieldSchema(name:value, type:string,
comment:default), ]
+POSTHOOK: Lineage: dest2.value EXPRESSION [(src)src.null, ]
+["0"] 3
+["10"] 1
+["100"] 2
+["103"] 2
+["104"] 2
+["105"] 1
+["11"] 1
+["111"] 1
+["113"] 2
+["114"] 1
+["116"] 1
+["118"] 2
+["119"] 3
+["12"] 2
+["120"] 2
+["125"] 2
+["126"] 1
+["128"] 3
+["129"] 2
+["131"] 1
+["133"] 1
+["134"] 2
+["136"] 1
+["137"] 2
+["138"] 4
+["143"] 1
+["145"] 1
+["146"] 2
+["149"] 2
+["15"] 2
+["150"] 1
+["152"] 2
+["153"] 1
+["155"] 1
+["156"] 1
+["157"] 1
+["158"] 1
+["160"] 1
+["162"] 1
+["163"] 1
+["164"] 2
+["165"] 2
+["166"] 1
+["167"] 3
+["168"] 1
+["169"] 4
+["17"] 1
+["170"] 1
+["172"] 2
+["174"] 2
+["175"] 2
+["176"] 2
+["177"] 1
+["178"] 1
+["179"] 2
+["18"] 2
+["180"] 1
+["181"] 1
+["183"] 1
+["186"] 1
+["187"] 3
+["189"] 1
+["19"] 1
+["190"] 1
+["191"] 2
+["192"] 1
+["193"] 3
+["194"] 1
+["195"] 2
+["196"] 1
+["197"] 2
+["199"] 3
+["2"] 1
+["20"] 1
+["200"] 2
+["201"] 1
+["202"] 1
+["203"] 2
+["205"] 2
+["207"] 2
+["208"] 3
+["209"] 2
+["213"] 2
+["214"] 1
+["216"] 2
+["217"] 2
+["218"] 1
+["219"] 2
+["221"] 2
+["222"] 1
+["223"] 2
+["224"] 2
+["226"] 1
+["228"] 1
+["229"] 2
+["230"] 5
+["233"] 2
+["235"] 1
+["237"] 2
+["238"] 2
+["239"] 2
+["24"] 2
+["241"] 1
+["242"] 2
+["244"] 1
+["247"] 1
+["248"] 1
+["249"] 1
+["252"] 1
+["255"] 2
+["256"] 2
+["257"] 1
+["258"] 1
+["26"] 2
+["260"] 1
+["262"] 1
+["263"] 1
+["265"] 2
+["266"] 1
+["27"] 1
+["272"] 2
+["273"] 3
+["274"] 1
+["275"] 1
+["277"] 4
+["278"] 2
+["28"] 1
+["280"] 2
+["281"] 2
+["282"] 2
+["283"] 1
+["284"] 1
+["285"] 1
+["286"] 1
+["287"] 1
+["288"] 2
+["289"] 1
+["291"] 1
+["292"] 1
+["296"] 1
+["298"] 3
+["30"] 1
+["302"] 1
+["305"] 1
+["306"] 1
+["307"] 2
+["308"] 1
+["309"] 2
+["310"] 1
+["311"] 3
+["315"] 1
+["316"] 3
+["317"] 2
+["318"] 3
+["321"] 2
+["322"] 2
+["323"] 1
+["325"] 2
+["327"] 3
+["33"] 1
+["331"] 2
+["332"] 1
+["333"] 2
+["335"] 1
+["336"] 1
+["338"] 1
+["339"] 1
+["34"] 1
+["341"] 1
+["342"] 2
+["344"] 2
+["345"] 1
+["348"] 5
+["35"] 3
+["351"] 1
+["353"] 2
+["356"] 1
+["360"] 1
+["362"] 1
+["364"] 1
+["365"] 1
+["366"] 1
+["367"] 2
+["368"] 1
+["369"] 3
+["37"] 2
+["373"] 1
+["374"] 1
+["375"] 1
+["377"] 1
+["378"] 1
+["379"] 1
+["382"] 2
+["384"] 3
+["386"] 1
+["389"] 1
+["392"] 1
+["393"] 1
+["394"] 1
+["395"] 2
+["396"] 3
+["397"] 2
+["399"] 2
+["4"] 1
+["400"] 1
+["401"] 5
+["402"] 1
+["403"] 3
+["404"] 2
+["406"] 4
+["407"] 1
+["409"] 3
+["41"] 1
+["411"] 1
+["413"] 2
+["414"] 2
+["417"] 3
+["418"] 1
+["419"] 1
+["42"] 2
+["421"] 1
+["424"] 2
+["427"] 1
+["429"] 2
+["43"] 1
+["430"] 3
+["431"] 3
+["432"] 1
+["435"] 1
+["436"] 1
+["437"] 1
+["438"] 3
+["439"] 2
+["44"] 1
+["443"] 1
+["444"] 1
+["446"] 1
+["448"] 1
+["449"] 1
+["452"] 1
+["453"] 1
+["454"] 3
+["455"] 1
+["457"] 1
+["458"] 2
+["459"] 2
+["460"] 1
+["462"] 2
+["463"] 2
+["466"] 3
+["467"] 1
+["468"] 4
+["469"] 5
+["47"] 1
+["470"] 1
+["472"] 1
+["475"] 1
+["477"] 1
+["478"] 2
+["479"] 1
+["480"] 3
+["481"] 1
+["482"] 1
+["483"] 1
+["484"] 1
+["485"] 1
+["487"] 1
+["489"] 4
+["490"] 1
+["491"] 1
+["492"] 2
+["493"] 1
+["494"] 1
+["495"] 1
+["496"] 1
+["497"] 1
+["498"] 3
+["5"] 3
+["51"] 2
+["53"] 1
+["54"] 1
+["57"] 1
+["58"] 2
+["64"] 1
+["65"] 1
+["66"] 1
+["67"] 2
+["69"] 1
+["70"] 3
+["72"] 2
+["74"] 1
+["76"] 2
+["77"] 1
+["78"] 1
+["8"] 1
+["80"] 1
+["82"] 1
+["83"] 2
+["84"] 2
+["85"] 1
+["86"] 1
+["87"] 1
+["9"] 1
+["90"] 3
+["92"] 1
+["95"] 2
+["96"] 1
+["97"] 2
+["98"] 2
+PREHOOK: query: SELECT DEST2.* FROM DEST2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@dest2
+PREHOOK: Output:
file:/var/folders/C4/C40caRNsEM4C4yVangruonVUe7Y/-Tmp-/jonchang/hive_2011-09-07_12-57-49_292_3086379109295758449/-mr-10000
+POSTHOOK: query: SELECT DEST2.* FROM DEST2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@dest2
+POSTHOOK: Output:
file:/var/folders/C4/C40caRNsEM4C4yVangruonVUe7Y/-Tmp-/jonchang/hive_2011-09-07_12-57-49_292_3086379109295758449/-mr-10000
+POSTHOOK: Lineage: dest1.key EXPRESSION [(src)src.FieldSchema(name:key,
type:string, comment:default), ]
+POSTHOOK: Lineage: dest1.value EXPRESSION [(src)src.null, ]
+POSTHOOK: Lineage: dest2.key EXPRESSION [(src)src.FieldSchema(name:key,
type:string, comment:default), (src)src.FieldSchema(name:value, type:string,
comment:default), ]
+POSTHOOK: Lineage: dest2.value EXPRESSION [(src)src.null, ]
+{"0":"val_0"} 3
+{"10":"val_10"} 1
+{"100":"val_100"} 2
+{"103":"val_103"} 2
+{"104":"val_104"} 2
+{"105":"val_105"} 1
+{"11":"val_11"} 1
+{"111":"val_111"} 1
+{"113":"val_113"} 2
+{"114":"val_114"} 1
+{"116":"val_116"} 1
+{"118":"val_118"} 2
+{"119":"val_119"} 3
+{"12":"val_12"} 2
+{"120":"val_120"} 2
+{"125":"val_125"} 2
+{"126":"val_126"} 1
+{"128":"val_128"} 3
+{"129":"val_129"} 2
+{"131":"val_131"} 1
+{"133":"val_133"} 1
+{"134":"val_134"} 2
+{"136":"val_136"} 1
+{"137":"val_137"} 2
+{"138":"val_138"} 4
+{"143":"val_143"} 1
+{"145":"val_145"} 1
+{"146":"val_146"} 2
+{"149":"val_149"} 2
+{"15":"val_15"} 2
+{"150":"val_150"} 1
+{"152":"val_152"} 2
+{"153":"val_153"} 1
+{"155":"val_155"} 1
+{"156":"val_156"} 1
+{"157":"val_157"} 1
+{"158":"val_158"} 1
+{"160":"val_160"} 1
+{"162":"val_162"} 1
+{"163":"val_163"} 1
+{"164":"val_164"} 2
+{"165":"val_165"} 2
+{"166":"val_166"} 1
+{"167":"val_167"} 3
+{"168":"val_168"} 1
+{"169":"val_169"} 4
+{"17":"val_17"} 1
+{"170":"val_170"} 1
+{"172":"val_172"} 2
+{"174":"val_174"} 2
+{"175":"val_175"} 2
+{"176":"val_176"} 2
+{"177":"val_177"} 1
+{"178":"val_178"} 1
+{"179":"val_179"} 2
+{"18":"val_18"} 2
+{"180":"val_180"} 1
+{"181":"val_181"} 1
+{"183":"val_183"} 1
+{"186":"val_186"} 1
+{"187":"val_187"} 3
+{"189":"val_189"} 1
+{"19":"val_19"} 1
+{"190":"val_190"} 1
+{"191":"val_191"} 2
+{"192":"val_192"} 1
+{"193":"val_193"} 3
+{"194":"val_194"} 1
+{"195":"val_195"} 2
+{"196":"val_196"} 1
+{"197":"val_197"} 2
+{"199":"val_199"} 3
+{"2":"val_2"} 1
+{"20":"val_20"} 1
+{"200":"val_200"} 2
+{"201":"val_201"} 1
+{"202":"val_202"} 1
+{"203":"val_203"} 2
+{"205":"val_205"} 2
+{"207":"val_207"} 2
+{"208":"val_208"} 3
+{"209":"val_209"} 2
+{"213":"val_213"} 2
+{"214":"val_214"} 1
+{"216":"val_216"} 2
+{"217":"val_217"} 2
+{"218":"val_218"} 1
+{"219":"val_219"} 2
+{"221":"val_221"} 2
+{"222":"val_222"} 1
+{"223":"val_223"} 2
+{"224":"val_224"} 2
+{"226":"val_226"} 1
+{"228":"val_228"} 1
+{"229":"val_229"} 2
+{"230":"val_230"} 5
+{"233":"val_233"} 2
+{"235":"val_235"} 1
+{"237":"val_237"} 2
+{"238":"val_238"} 2
+{"239":"val_239"} 2
+{"24":"val_24"} 2
+{"241":"val_241"} 1
+{"242":"val_242"} 2
+{"244":"val_244"} 1
+{"247":"val_247"} 1
+{"248":"val_248"} 1
+{"249":"val_249"} 1
+{"252":"val_252"} 1
+{"255":"val_255"} 2
+{"256":"val_256"} 2
+{"257":"val_257"} 1
+{"258":"val_258"} 1
+{"26":"val_26"} 2
+{"260":"val_260"} 1
+{"262":"val_262"} 1
+{"263":"val_263"} 1
+{"265":"val_265"} 2
+{"266":"val_266"} 1
+{"27":"val_27"} 1
+{"272":"val_272"} 2
+{"273":"val_273"} 3
+{"274":"val_274"} 1
+{"275":"val_275"} 1
+{"277":"val_277"} 4
+{"278":"val_278"} 2
+{"28":"val_28"} 1
+{"280":"val_280"} 2
+{"281":"val_281"} 2
+{"282":"val_282"} 2
+{"283":"val_283"} 1
+{"284":"val_284"} 1
+{"285":"val_285"} 1
+{"286":"val_286"} 1
+{"287":"val_287"} 1
+{"288":"val_288"} 2
+{"289":"val_289"} 1
+{"291":"val_291"} 1
+{"292":"val_292"} 1
+{"296":"val_296"} 1
+{"298":"val_298"} 3
+{"30":"val_30"} 1
+{"302":"val_302"} 1
+{"305":"val_305"} 1
+{"306":"val_306"} 1
+{"307":"val_307"} 2
+{"308":"val_308"} 1
+{"309":"val_309"} 2
+{"310":"val_310"} 1
+{"311":"val_311"} 3
+{"315":"val_315"} 1
+{"316":"val_316"} 3
+{"317":"val_317"} 2
+{"318":"val_318"} 3
+{"321":"val_321"} 2
+{"322":"val_322"} 2
+{"323":"val_323"} 1
+{"325":"val_325"} 2
+{"327":"val_327"} 3
+{"33":"val_33"} 1
+{"331":"val_331"} 2
+{"332":"val_332"} 1
+{"333":"val_333"} 2
+{"335":"val_335"} 1
+{"336":"val_336"} 1
+{"338":"val_338"} 1
+{"339":"val_339"} 1
+{"34":"val_34"} 1
+{"341":"val_341"} 1
+{"342":"val_342"} 2
+{"344":"val_344"} 2
+{"345":"val_345"} 1
+{"348":"val_348"} 5
+{"35":"val_35"} 3
+{"351":"val_351"} 1
+{"353":"val_353"} 2
+{"356":"val_356"} 1
+{"360":"val_360"} 1
+{"362":"val_362"} 1
+{"364":"val_364"} 1
+{"365":"val_365"} 1
+{"366":"val_366"} 1
+{"367":"val_367"} 2
+{"368":"val_368"} 1
+{"369":"val_369"} 3
+{"37":"val_37"} 2
+{"373":"val_373"} 1
+{"374":"val_374"} 1
+{"375":"val_375"} 1
+{"377":"val_377"} 1
+{"378":"val_378"} 1
+{"379":"val_379"} 1
+{"382":"val_382"} 2
+{"384":"val_384"} 3
+{"386":"val_386"} 1
+{"389":"val_389"} 1
+{"392":"val_392"} 1
+{"393":"val_393"} 1
+{"394":"val_394"} 1
+{"395":"val_395"} 2
+{"396":"val_396"} 3
+{"397":"val_397"} 2
+{"399":"val_399"} 2
+{"4":"val_4"} 1
+{"400":"val_400"} 1
+{"401":"val_401"} 5
+{"402":"val_402"} 1
+{"403":"val_403"} 3
+{"404":"val_404"} 2
+{"406":"val_406"} 4
+{"407":"val_407"} 1
+{"409":"val_409"} 3
+{"41":"val_41"} 1
+{"411":"val_411"} 1
+{"413":"val_413"} 2
+{"414":"val_414"} 2
+{"417":"val_417"} 3
+{"418":"val_418"} 1
+{"419":"val_419"} 1
+{"42":"val_42"} 2
+{"421":"val_421"} 1
+{"424":"val_424"} 2
+{"427":"val_427"} 1
+{"429":"val_429"} 2
+{"43":"val_43"} 1
+{"430":"val_430"} 3
+{"431":"val_431"} 3
+{"432":"val_432"} 1
+{"435":"val_435"} 1
+{"436":"val_436"} 1
+{"437":"val_437"} 1
+{"438":"val_438"} 3
+{"439":"val_439"} 2
+{"44":"val_44"} 1
+{"443":"val_443"} 1
+{"444":"val_444"} 1
+{"446":"val_446"} 1
+{"448":"val_448"} 1
+{"449":"val_449"} 1
+{"452":"val_452"} 1
+{"453":"val_453"} 1
+{"454":"val_454"} 3
+{"455":"val_455"} 1
+{"457":"val_457"} 1
+{"458":"val_458"} 2
+{"459":"val_459"} 2
+{"460":"val_460"} 1
+{"462":"val_462"} 2
+{"463":"val_463"} 2
+{"466":"val_466"} 3
+{"467":"val_467"} 1
+{"468":"val_468"} 4
+{"469":"val_469"} 5
+{"47":"val_47"} 1
+{"470":"val_470"} 1
+{"472":"val_472"} 1
+{"475":"val_475"} 1
+{"477":"val_477"} 1
+{"478":"val_478"} 2
+{"479":"val_479"} 1
+{"480":"val_480"} 3
+{"481":"val_481"} 1
+{"482":"val_482"} 1
+{"483":"val_483"} 1
+{"484":"val_484"} 1
+{"485":"val_485"} 1
+{"487":"val_487"} 1
+{"489":"val_489"} 4
+{"490":"val_490"} 1
+{"491":"val_491"} 1
+{"492":"val_492"} 2
+{"493":"val_493"} 1
+{"494":"val_494"} 1
+{"495":"val_495"} 1
+{"496":"val_496"} 1
+{"497":"val_497"} 1
+{"498":"val_498"} 3
+{"5":"val_5"} 3
+{"51":"val_51"} 2
+{"53":"val_53"} 1
+{"54":"val_54"} 1
+{"57":"val_57"} 1
+{"58":"val_58"} 2
+{"64":"val_64"} 1
+{"65":"val_65"} 1
+{"66":"val_66"} 1
+{"67":"val_67"} 2
+{"69":"val_69"} 1
+{"70":"val_70"} 3
+{"72":"val_72"} 2
+{"74":"val_74"} 1
+{"76":"val_76"} 2
+{"77":"val_77"} 1
+{"78":"val_78"} 1
+{"8":"val_8"} 1
+{"80":"val_80"} 1
+{"82":"val_82"} 1
+{"83":"val_83"} 2
+{"84":"val_84"} 2
+{"85":"val_85"} 1
+{"86":"val_86"} 1
+{"87":"val_87"} 1
+{"9":"val_9"} 1
+{"90":"val_90"} 3
+{"92":"val_92"} 1
+{"95":"val_95"} 2
+{"96":"val_96"} 1
+{"97":"val_97"} 2
+{"98":"val_98"} 2
Modified:
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java
URL:
http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java?rev=1185311&r1=1185310&r2=1185311&view=diff
==============================================================================
---
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java
(original)
+++
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java
Mon Oct 17 18:01:27 2011
@@ -474,9 +474,28 @@ public final class ObjectInspectorUtils
}
}
}
+ case LIST: {
+ int r = 0;
+ ListObjectInspector listOI = (ListObjectInspector)objIns;
+ ObjectInspector elemOI = listOI.getListElementObjectInspector();
+ for (int ii = 0; ii < listOI.getListLength(o); ++ii) {
+ r = 31 * r + hashCode(listOI.getListElement(o, ii), elemOI);
+ }
+ return r;
+ }
+ case MAP: {
+ int r = 0;
+ MapObjectInspector mapOI = (MapObjectInspector)objIns;
+ ObjectInspector keyOI = mapOI.getMapKeyObjectInspector();
+ ObjectInspector valueOI = mapOI.getMapValueObjectInspector();
+ Map<?, ?> map = mapOI.getMap(o);
+ for (Map.Entry entry : map.entrySet()) {
+ r += hashCode(entry.getKey(), keyOI) ^
+ hashCode(entry.getValue(), valueOI);
+ }
+ return r;
+ }
case STRUCT:
- case LIST:
- case MAP:
case UNION:
default:
throw new RuntimeException(
@@ -543,7 +562,7 @@ public final class ObjectInspectorUtils
*/
public static int compare(Object o1, ObjectInspector oi1, Object o2,
ObjectInspector oi2) {
- return compare(o1, oi1, o2, oi2, null);
+ return compare(o1, oi1, o2, oi2, new FullMapEqualComparer());
}
/**
Modified:
hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/objectinspector/TestStandardObjectInspectors.java
URL:
http://svn.apache.org/viewvc/hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/objectinspector/TestStandardObjectInspectors.java?rev=1185311&r1=1185310&r2=1185311&view=diff
==============================================================================
---
hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/objectinspector/TestStandardObjectInspectors.java
(original)
+++
hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/objectinspector/TestStandardObjectInspectors.java
Mon Oct 17 18:01:27 2011
@@ -517,7 +517,7 @@ public class TestStandardObjectInspector
Throwable th = null;
try {
ObjectInspectorUtils.compare(union, uoi1,
- new StandardUnion((byte) 4, map.clone()), uoi2);
+ new StandardUnion((byte) 4, map.clone()), uoi2, null);
} catch (Throwable t) {
th = t;
}