[ https://issues.apache.org/jira/browse/HIVE-28362?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17863667#comment-17863667 ]
Shohei Okumiya commented on HIVE-28362: --------------------------------------- I noticed VOID is not listed as an official type. It is not usually supported, e.g., Iceberg. "4.6.2 Null value" in part 1 says we can use the NULL literal only when the type can be inferred. The first option, i.e. supporting VOID in both regular CTAS and materialization, is unlikely to be a valid option. "6.5" of Part 2 says NULL literal is acceptable as a part of <contextually typed value specification>. The definition of "contextually typed" could be controversial, but my NULL is apparently not in the valid context. There is a room to infer types from the top-level SELECT in our real cases, but it is not obvious that we can legally infer types of CTEs from the top-level expressions. I am still considering the option, but I will the most likely void this ticket. > Fail to materialize a CTE with VOID > ----------------------------------- > > Key: HIVE-28362 > URL: https://issues.apache.org/jira/browse/HIVE-28362 > Project: Hive > Issue Type: Bug > Components: Query Planning > Affects Versions: 4.0.0 > Reporter: Shohei Okumiya > Assignee: Shohei Okumiya > Priority: Major > Labels: pull-request-available > > CTE materialization fails when it includes a NULL literal. > {code:java} > set hive.optimize.cte.materialize.full.aggregate.only=false; > set hive.optimize.cte.materialize.threshold=2; > WITH x AS (SELECT null AS null_value) > SELECT * FROM x UNION ALL SELECT * FROM x; {code} > Error message. > {code:java} > org.apache.hadoop.hive.ql.parse.SemanticException: CREATE-TABLE-AS-SELECT > creates a VOID type, please use CAST to specify the type, near field: > null_value > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.deriveFileSinkColTypes(SemanticAnalyzer.java:8344) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.deriveFileSinkColTypes(SemanticAnalyzer.java:8303) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genFileSinkPlan(SemanticAnalyzer.java:7846) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genPostGroupByBodyPlan(SemanticAnalyzer.java:11598) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genBodyPlan(SemanticAnalyzer.java:11461) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genPlan(SemanticAnalyzer.java:12397) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genPlan(SemanticAnalyzer.java:12263) > at > org.apache.hadoop.hive.ql.parse.CalcitePlanner.genOPTree(CalcitePlanner.java:638) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.analyzeInternal(SemanticAnalyzer.java:13136) > at > org.apache.hadoop.hive.ql.parse.CalcitePlanner.analyzeInternal(CalcitePlanner.java:465) > at > org.apache.hadoop.hive.ql.parse.CalcitePlanner.materializeCTE(CalcitePlanner.java:1062) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.getMetaData(SemanticAnalyzer.java:2390) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.getMetaData(SemanticAnalyzer.java:2338) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.getMetaData(SemanticAnalyzer.java:2340) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.getMetaData(SemanticAnalyzer.java:2501) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.getMetaData(SemanticAnalyzer.java:2323) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genResolvedParseTree(SemanticAnalyzer.java:12978) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.analyzeInternal(SemanticAnalyzer.java:13085) > at > org.apache.hadoop.hive.ql.parse.CalcitePlanner.analyzeInternal(CalcitePlanner.java:465) > at > org.apache.hadoop.hive.ql.parse.BaseSemanticAnalyzer.analyze(BaseSemanticAnalyzer.java:332) > at org.apache.hadoop.hive.ql.Compiler.analyze(Compiler.java:224) > at org.apache.hadoop.hive.ql.Compiler.compile(Compiler.java:109) > at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:508) {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)