You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hive.apache.org by "Denys Kuzmenko (Jira)" <ji...@apache.org> on 2026/10/15 18:34:00 UTC

[jira] [Resolved] (HIVE-30164) Iceberg: DESCRIBE, SHOW CREATE TABLE and getColumns report VARIANT columns as struct

     [ https://issues.apache.org/jira/browse/HIVE-30164?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Denys Kuzmenko resolved HIVE-30164.
-----------------------------------
    Fix Version/s: NA
       Resolution: Duplicate

Fixed by HIVE-30170

> Iceberg: DESCRIBE, SHOW CREATE TABLE and getColumns report VARIANT columns as struct<metadata:binary,value:binary>
> ------------------------------------------------------------------------------------------------------------------
>
>                 Key: HIVE-30164
>                 URL: https://issues.apache.org/jira/browse/HIVE-30164
>             Project: Hive
>          Issue Type: Sub-task
>          Components: Iceberg integration
>            Reporter: Denys Kuzmenko
>            Priority: Major
>             Fix For: NA
>
>
> HMS stores an Iceberg VARIANT column as {{variant}}, and so does the Iceberg schema. HS2, however, derive Iceberg column types from the SerDe's ObjectInspector, and  {{VariantObjectInspector}} is a struct inspector.                                                                                                                                               
>                                                                                                                                                                                                   
>   {code:sql}                                                                                                                                                                                      
>   create table t (v variant) stored by iceberg tblproperties ('format-version'='3');                                                                                                              
>   describe t;                              -- v  struct<metadata:binary,value:binary>                                                                                                             
>   show create table t;                     -- `v` struct<`metadata`:binary, `value`:binary>                                                                                                       
>   show tblproperties t('current-schema');  -- ... "type":"variant" ...                                                                                                                            
>   {code}                                                                                                                                                                                          
>  
> JDBC {{DatabaseMetaData.getColumns}} with an embedded HMS also returns TYPE_NAME {{struct<metadata:binary,value:binary>}} and DATA_TYPE {{Types.STRUCT}}. A standalone HMS returns {{variant}}. 
> Reusing the SHOW CREATE TABLE column list creates an Iceberg {{struct<metadata: binary, value: binary>}} column, so the variant type is silently lost.                                          
>                                                                                                                                                                                                   
> *Cause:* HIVE-27694 added {{HiveIcebergSerDe}} to the MetastoreConf default of {{metastore.serdes.using.metastore.for.schema}}, but not to HiveConf's {hive.serdes.using.metastore.for.schema}}. {{MetastoreConf.getVar}} falls back to the {{hive.*}} key, which HiveConf always sets. As a result, HS2 and an embedded HMS read Iceberg columns from the deserializer, while a standalone HMS reads the stored schema. {{HBaseSerDe}} (HIVE-29484) has the same drift; it was not tested here.     
> *Second gap:* with {{HiveIcebergSerDe}} added to the HiveConf list, DESCRIBE shows {{variant}}, but SHOW CREATE TABLE fails:                                                                    
>   {noformat}                                                                                                                                                                                      
>   java.lang.RuntimeException: Unknown type: VARIANT                                                                                                                                               
>     at org.apache.hadoop.hive.ql.ddl.DDLPlanUtils.formatType(DDLPlanUtils.java:972)                                                                                                               
>     at org.apache.hadoop.hive.ql.ddl.DDLPlanUtils.getColumns(DDLPlanUtils.java:917)                                                                                                               
>     at org.apache.hadoop.hive.ql.ddl.DDLPlanUtils.getCreateTableCommand(DDLPlanUtils.java:892)                                                                                                    
>     at org.apache.hadoop.hive.ql.ddl.table.create.show.ShowCreateTableOperation.execute(ShowCreateTableOperation.java:61)                                                                         
>   {noformat}                                                                                                                                                                                      
>                                                                                                                                                                                                   
>   *Proposed fix:* align the HiveConf default with MetastoreConf, and handle VARIANT in {{DDLPlanUtils.formatType}}.                                                                               
>   Query result types and {{typeof()}} still report struct after this fix; they are tracked in HIVE-30166.                                                                                         
>                                                                                                                                                                                                   
>                                              
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)