Use column alias:

INSERT OVERWRITE TABLE all_dictionaries_ext
     SELECT name, id, category FROM dictionary
     UNION ALL SELECT NAME, ID, "CAMPAIGN" as category FROM md_campaigns


On Fri, Jan 30, 2015 at 1:41 PM, Philippe Kernévez <pkerne...@octo.com>
wrote:

> Hi all,
>
> I would like to do union all with a field that is hardcoded in the request.
>
>    INSERT OVERWRITE TABLE all_dictionaries_ext
>      SELECT name, id, category FROM dictionary
>      UNION ALL SELECT NAME, ID, "CAMPAIGN" FROM md_campaigns
>
> Name type is String
> Id type is int
> Category type is string
>
> When I run this command I had an error :
> FAILED: SemanticException 4:47 Schema of both sides of union should match.
> _u1-subquery2 does not have the field category. Error encountered near
> token 'md_campaigns'
>
> I supposed that the error is cause by the String "CAMPAIGN" which should
> not have a type.
>
> How can do this kind of union ?
>
> The union all with 2 hard coded fields is ok.
>   INSERT OVERWRITE TABLE all_dictionaries_ext
>     SELECT NAME, ID, "CAMPAIGN" FROM md_campaigns
>      UNION ALL SELECT NAME, ID, "AD_SERVER" FROM md_ad_servers
>      UNION ALL SELECT NAME, ID, "AVERTISER" FROM md_advertisers
>      UNION ALL SELECT NAME, ID, "AGENCIES" FROM md_agencies
>
>
> More debug info :
>
> 15/01/30 22:34:23 [main]: INFO parse.ParseDriver: Parsing command:
>   INSERT OVERWRITE TABLE all_dictionaries_ext
>     SELECT name, id, category FROM byoa_dictionary
>     UNION ALL SELECT NAME, ID, "CAMPAIGN" FROM md_campaigns
> 15/01/30 22:34:23 [main]: INFO parse.ParseDriver: Parse Completed
> 15/01/30 22:34:23 [main]: INFO log.PerfLogger: </PERFLOG method=parse
> start=1422653663887 end=1422653663900 duration=13
> from=org.apache.hadoop.hive.ql.Driver>
> 15/01/30 22:34:23 [main]: INFO log.PerfLogger: <PERFLOG
> method=semanticAnalyze from=org.apache.hadoop.hive.ql.Driver>
> 15/01/30 22:34:23 [main]: INFO parse.SemanticAnalyzer: Starting Semantic
> Analysis
> 15/01/30 22:34:23 [main]: INFO parse.SemanticAnalyzer: Completed phase 1
> of Semantic Analysis
> 15/01/30 22:34:23 [main]: INFO parse.SemanticAnalyzer: Get metadata for
> source tables
> 15/01/30 22:34:23 [main]: INFO parse.SemanticAnalyzer: Get metadata for
> subqueries
> 15/01/30 22:34:23 [main]: INFO parse.SemanticAnalyzer: Get metadata for
> source tables
> 15/01/30 22:34:23 [main]: INFO parse.SemanticAnalyzer: Get metadata for
> subqueries
> 15/01/30 22:34:24 [main]: INFO parse.SemanticAnalyzer: Get metadata for
> destination tables
> 15/01/30 22:34:24 [main]: INFO parse.SemanticAnalyzer: Get metadata for
> source tables
> 15/01/30 22:34:24 [main]: INFO parse.SemanticAnalyzer: Get metadata for
> subqueries
> 15/01/30 22:34:24 [main]: INFO parse.SemanticAnalyzer: Get metadata for
> destination tables
> 15/01/30 22:34:24 [main]: INFO parse.SemanticAnalyzer: Get metadata for
> destination tables
> 15/01/30 22:34:24 [main]: INFO parse.SemanticAnalyzer: Completed getting
> MetaData in Semantic Analysis
> 15/01/30 22:34:24 [main]: INFO parse.SemanticAnalyzer: Not invoking CBO
> because the statement has too few joins
> FAILED: SemanticException 4:47 Schema of both sides of union should match.
> _u1-subquery2 does not have the field category. Error encountered near
> token 'md_campaigns'
> 15/01/30 22:34:24 [main]: ERROR ql.Driver: FAILED: SemanticException 4:47
> Schema of both sides of union should match. _u1-subquery2 does not have the
> field category. Error encountered near token 'md_campaigns'
> org.apache.hadoop.hive.ql.parse.SemanticException: 4:47 Schema of both
> sides of union should match. _u1-subquery2 does not have the field
> category. Error encountered near token 'md_campaigns'
> at
> org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genUnionPlan(SemanticAnalyzer.java:9007)
> at
> org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genPlan(SemanticAnalyzer.java:9600)
> at
> org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genPlan(SemanticAnalyzer.java:9620)
> at
> org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genPlan(SemanticAnalyzer.java:9607)
> at
> org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.analyzeInternal(SemanticAnalyzer.java:10093)
> at
> org.apache.hadoop.hive.ql.parse.BaseSemanticAnalyzer.analyze(BaseSemanticAnalyzer.java:221)
> at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:415)
> at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:303)
> at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1067)
> at org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1129)
> at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1004)
> at org.apache.hadoop.hive.ql.Driver.run(Driver.java:994)
> at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:247)
> at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:199)
> at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:410)
> at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:345)
> at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:733)
> at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:677)
> at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:616)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
> at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
>
> Regards,
> --
> Philippe Kernévez
>
>

Reply via email to