diff --git ql/src/test/queries/clientpositive/groupby_complex_types.q ql/src/test/queries/clientpositive/groupby_complex_types.q new file mode 100644 index 0000000..1ca336b --- /dev/null +++ ql/src/test/queries/clientpositive/groupby_complex_types.q @@ -0,0 +1,16 @@ + +CREATE TABLE DEST1(key ARRAY, value BIGINT) STORED AS TEXTFILE; +CREATE TABLE DEST2(key MAP, 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; + diff --git ql/src/test/results/clientpositive/groupby_complex_types.q.out ql/src/test/results/clientpositive/groupby_complex_types.q.out new file mode 100644 index 0000000..1107189 --- /dev/null +++ ql/src/test/results/clientpositive/groupby_complex_types.q.out @@ -0,0 +1,841 @@ +PREHOOK: query: CREATE TABLE DEST1(key ARRAY, value BIGINT) STORED AS TEXTFILE +PREHOOK: type: CREATETABLE +POSTHOOK: query: CREATE TABLE DEST1(key ARRAY, value BIGINT) STORED AS TEXTFILE +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@DEST1 +PREHOOK: query: CREATE TABLE DEST2(key MAP, value BIGINT) STORED AS TEXTFILE +PREHOOK: type: CREATETABLE +POSTHOOK: query: CREATE TABLE DEST2(key MAP, 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 + mode: hash + outputColumnNames: _col0, _col1 + Reduce Output Operator + key expressions: + expr: _col0 + type: array + sort order: + + Map-reduce partition columns: + expr: _col0 + type: array + 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 + 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 + mode: mergepartial + outputColumnNames: _col0, _col1 + Select Operator + expressions: + expr: _col0 + type: array + 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 + sort order: + + Map-reduce partition columns: + expr: _col0 + type: map + 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 + mode: mergepartial + outputColumnNames: _col0, _col1 + Select Operator + expressions: + expr: _col0 + type: map + 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 diff --git serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java index e504dad..716b985 100644 --- serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java +++ serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java @@ -446,9 +446,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 += 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); + r += hashCode(entry.getValue(), valueOI); + } + return r; + } case STRUCT: - case LIST: - case MAP: case UNION: default: throw new RuntimeException( @@ -515,7 +534,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()); } /** -- 1.6.6