[ 
https://issues.apache.org/jira/browse/HIVE-26955?focusedWorklogId=840441&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-840441
 ]

ASF GitHub Bot logged work on HIVE-26955:
-----------------------------------------

                Author: ASF GitHub Bot
            Created on: 19/Jan/23 20:13
            Start Date: 19/Jan/23 20:13
    Worklog Time Spent: 10m 
      Work Description: soumyakanti3578 commented on code in PR #3964:
URL: https://github.com/apache/hive/pull/3964#discussion_r1081802849


##########
ql/src/test/queries/clientpositive/parquet_alter_column_type.q:
##########
@@ -0,0 +1,122 @@
+create table test_parquet_1 (id decimal) stored as parquet;
+insert into test_parquet_1 values (238), (238.12), (-0.123);
+alter table test_parquet_1 change id id string;
+select * from test_parquet_1;
+
+create table test_parquet_2 (id decimal(10,2)) stored as parquet;
+insert into test_parquet_2 values (238), (238.12), (-0.123);
+alter table test_parquet_2 change id id string;
+select * from test_parquet_2;
+
+create table test_parquet_3 (id decimal(4,2)) stored as parquet;
+insert into test_parquet_3 values (238), (238.12), (-0.123);
+alter table test_parquet_3 change id id string;
+select * from test_parquet_3;
+
+create table test_parquet_4 (id decimal(11,5)) stored as parquet;
+insert into test_parquet_4 values (238), (238.12), (-0.123456789);
+alter table test_parquet_4 change id id string;
+select * from test_parquet_4;
+
+create table test_parquet_5 (id decimal(10,2)) stored as parquet;
+insert into test_parquet_5 values (238), (238.12), (-0.123);
+alter table test_parquet_5 change id id string;
+select * from test_parquet_5;
+
+create table test_parquet_6 (id decimal(38,18)) stored as parquet;
+insert into test_parquet_6 values (-12345678901234567890.098765432109876543), 
(12345678901234567890.098765432109876543), (124567.678950), 
(0987678904789.567849028679576658);
+alter table test_parquet_6 change id id string;
+select * from test_parquet_6;
+
+drop table test_parquet_1;
+drop table test_parquet_2;
+drop table test_parquet_3;
+drop table test_parquet_4;
+drop table test_parquet_5;
+drop table test_parquet_6;
+
+create table test_parquet_1 (id decimal) stored as parquet;
+insert into test_parquet_1 values (238), (238.12), (-0.123);
+alter table test_parquet_1 change id id varchar(255);
+select * from test_parquet_1;
+
+create table test_parquet_2 (id decimal(10,2)) stored as parquet;
+insert into test_parquet_2 values (238), (238.12), (-0.123);
+alter table test_parquet_2 change id id varchar(255);
+select * from test_parquet_2;
+
+create table test_parquet_3 (id decimal(4,2)) stored as parquet;
+insert into test_parquet_3 values (238), (238.12), (-0.123);
+alter table test_parquet_3 change id id varchar(255);
+select * from test_parquet_3;
+
+create table test_parquet_4 (id decimal(11,5)) stored as parquet;
+insert into test_parquet_4 values (238), (238.12), (-0.123456789);
+alter table test_parquet_4 change id id varchar(255);
+select * from test_parquet_4;
+
+create table test_parquet_5 (id decimal(10,2)) stored as parquet;
+insert into test_parquet_5 values (238), (238.12), (-0.123);
+alter table test_parquet_5 change id id varchar(255);
+select * from test_parquet_5;
+
+create table test_parquet_6 (id decimal(38,18)) stored as parquet;
+insert into test_parquet_6 values (-12345678901234567890.098765432109876543), 
(12345678901234567890.098765432109876543), (124567.678950), 
(0987678904789.567849028679576658);
+alter table test_parquet_6 change id id varchar(255);
+select * from test_parquet_6;
+
+create table test_parquet_7 (id decimal(38,18)) stored as parquet;
+insert into test_parquet_7 values (-12345678901234567890.098765432109876543), 
(12345678901234567890.098765432109876543), (124567.678950), 
(0987678904789.567849028679576658);
+alter table test_parquet_7 change id id varchar(8);
+select * from test_parquet_7;
+
+drop table test_parquet_1;
+drop table test_parquet_2;
+drop table test_parquet_3;
+drop table test_parquet_4;
+drop table test_parquet_5;
+drop table test_parquet_6;
+drop table test_parquet_7;
+
+create table test_parquet_1 (id decimal) stored as parquet;
+insert into test_parquet_1 values (238), (238.12), (-0.123);
+alter table test_parquet_1 change id id char(255);
+select * from test_parquet_1;
+
+create table test_parquet_2 (id decimal(10,2)) stored as parquet;
+insert into test_parquet_2 values (238), (238.12), (-0.123);
+alter table test_parquet_2 change id id char(255);
+select * from test_parquet_2;
+
+create table test_parquet_3 (id decimal(4,2)) stored as parquet;
+insert into test_parquet_3 values (238), (238.12), (-0.123);
+alter table test_parquet_3 change id id char(255);
+select * from test_parquet_3;
+
+create table test_parquet_4 (id decimal(11,5)) stored as parquet;
+insert into test_parquet_4 values (238), (238.12), (-0.123456789);
+alter table test_parquet_4 change id id char(255);
+select * from test_parquet_4;
+
+create table test_parquet_5 (id decimal(10,2)) stored as parquet;
+insert into test_parquet_5 values (238), (238.12), (-0.123);
+alter table test_parquet_5 change id id char(255);
+select * from test_parquet_5;
+
+create table test_parquet_6 (id decimal(38,18)) stored as parquet;
+insert into test_parquet_6 values (-12345678901234567890.098765432109876543), 
(12345678901234567890.098765432109876543), (124567.678950), 
(0987678904789.567849028679576658);
+alter table test_parquet_6 change id id char(255);
+select * from test_parquet_6;
+
+create table test_parquet_7 (id decimal(38,18)) stored as parquet;
+insert into test_parquet_7 values (-12345678901234567890.098765432109876543), 
(12345678901234567890.098765432109876543), (124567.678950), 
(0987678904789.567849028679576658);
+alter table test_parquet_7 change id id char(8);
+select * from test_parquet_7;
+
+drop table test_parquet_1;
+drop table test_parquet_2;
+drop table test_parquet_3;
+drop table test_parquet_4;
+drop table test_parquet_5;
+drop table test_parquet_6;
+drop table test_parquet_7;

Review Comment:
   Minor nit - Ideally there should be a new line at the end of the file.





Issue Time Tracking
-------------------

    Worklog Id:     (was: 840441)
    Time Spent: 1h 10m  (was: 1h)

> Select query fails when decimal column data type is changed to 
> string/char/varchar in Parquet
> ---------------------------------------------------------------------------------------------
>
>                 Key: HIVE-26955
>                 URL: https://issues.apache.org/jira/browse/HIVE-26955
>             Project: Hive
>          Issue Type: Bug
>          Components: HiveServer2
>            Reporter: Taraka Rama Rao Lethavadla
>            Assignee: Sourabh Badhya
>            Priority: Major
>              Labels: pull-request-available
>          Time Spent: 1h 10m
>  Remaining Estimate: 0h
>
> Steps to reproduce
> {noformat}
> create table test_parquet (id decimal) stored as parquet;
> insert into test_parquet values(238);
> alter table test_parquet change id id string;
> select * from test_parquet;
> Error: java.io.IOException: org.apache.parquet.io.ParquetDecodingException: 
> Can not read value at 1 in block 0 in file 
> hdfs:/namenode:8020/warehouse/tablespace/managed/hive/test_parquet/delta_0000001_0000001_0000/000000_0
>  (state=,code=0)
>     at 
> org.apache.hadoop.hive.ql.exec.FetchOperator.getNextRow(FetchOperator.java:624)
>     at 
> org.apache.hadoop.hive.ql.exec.FetchOperator.pushRow(FetchOperator.java:531)
>     at 
> org.apache.hadoop.hive.ql.exec.FetchTask.executeInner(FetchTask.java:194)
>     ... 55 more
> Caused by: org.apache.parquet.io.ParquetDecodingException: Can not read value 
> at 1 in block 0 in file 
> file:/home/centos/Apache-Hive-Tarak/itests/qtest/target/localfs/warehouse/test_parquet/000000_0
>     at 
> org.apache.parquet.hadoop.InternalParquetRecordReader.nextKeyValue(InternalParquetRecordReader.java:255)
>     at 
> org.apache.parquet.hadoop.ParquetRecordReader.nextKeyValue(ParquetRecordReader.java:207)
>     at 
> org.apache.hadoop.hive.ql.io.parquet.read.ParquetRecordReaderWrapper.<init>(ParquetRecordReaderWrapper.java:87)
>     at 
> org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat.getRecordReader(MapredParquetInputFormat.java:89)
>     at 
> org.apache.hadoop.hive.ql.exec.FetchOperator$FetchInputFormatSplit.getRecordReader(FetchOperator.java:771)
>     at 
> org.apache.hadoop.hive.ql.exec.FetchOperator.getRecordReader(FetchOperator.java:335)
>     at 
> org.apache.hadoop.hive.ql.exec.FetchOperator.getNextRow(FetchOperator.java:562)
>     ... 57 more
> Caused by: java.lang.ClassCastException: 
> org.apache.hadoop.hive.serde2.typeinfo.PrimitiveTypeInfo cannot be cast to 
> org.apache.hadoop.hive.serde2.typeinfo.DecimalTypeInfo
>     at 
> org.apache.hadoop.hive.ql.io.parquet.convert.ETypeConverter$8$5.convert(ETypeConverter.java:669)
>     at 
> org.apache.hadoop.hive.ql.io.parquet.convert.ETypeConverter$8$5.convert(ETypeConverter.java:664)
>     at 
> org.apache.hadoop.hive.ql.io.parquet.convert.ETypeConverter$BinaryConverter.addBinary(ETypeConverter.java:977)
>     at 
> org.apache.parquet.column.impl.ColumnReaderBase$2$6.writeValue(ColumnReaderBase.java:360)
>     at 
> org.apache.parquet.column.impl.ColumnReaderBase.writeCurrentValueToConverter(ColumnReaderBase.java:410)
>     at 
> org.apache.parquet.column.impl.ColumnReaderImpl.writeCurrentValueToConverter(ColumnReaderImpl.java:30)
>     at 
> org.apache.parquet.io.RecordReaderImplementation.read(RecordReaderImplementation.java:406)
>     at 
> org.apache.parquet.hadoop.InternalParquetRecordReader.nextKeyValue(InternalParquetRecordReader.java:230)
>     ... 63 more{noformat}
> However the same is working as expected in ORC table
> {noformat}
> create table test_orc (id decimal) stored as orc;
> insert into test_orc values(238);
> alter table test_orc change id id string;
> select * from test_orc;
> +--------------+
> | test_orc.id  |
> +--------------+
> | 238          |
> +--------------+{noformat}
> As well as text table
> {noformat}
> create table test_text (id decimal) stored as textfile;
> insert into test_text values(238);
> alter table test_text change id id string;
> select * from test_text;
> +---------------+
> | test_text.id  |
> +---------------+
> | 238           |
> +---------------+{noformat}
> Similar exception is thrown when the altered datatype is varchar and char 
> datatype.



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

Reply via email to