Created on 04-21-2018 02:42 PM - edited 09-16-2022 06:07 AM
I have two tables in Hive. CREATE TABLE Target_table( col_1 timestamp, col_2 int, col_3 int) CLUSTERED BY (col_1) INTO 50 BUCKETS STORED AS ORC TBLPROPERTIES('transactional'='true') CREATE TABLE Source_table( col_1 timestamp, col_2 int) I am trying to execute this query INSERT INTO Target_table (col_1, col_2) SELECT col_1, col_2 FROM Source_table; Query runs successfully in Beeline. Same query fails when executed via Hortonworks ODBC Driver with the error ERROR [HY000] [Hortonworks][Hardy] (80) Syntax or semantic analysis error thrown in server while executing query. Error message from server: Error while compiling statement: FAILED: SemanticException [Error 10044]: Line 1:18 Cannot insert into target table because column number/types are different 'Targer': Table insclause-0 has 3 columns, but query has 2 columns. Looks like Hive is completely ignoring the column list in the Insert clause. Other Details Cluster: Azure HDInsight Cluster Hortonworkds Data Platform: HDP-2.6.2.25 OS: Windows 10 Language: C# Any help is appreciated.
Created 04-21-2018 03:26 PM
Probably it's a bug in Hive ODBC driver, As a workaround you can use the below query, this query will run in beeline and in ODBC driver also.
INSERT INTO Target_table(col_1, col_2, col_3) SELECT col_1, col_2,int(null) col_3 FROM Source_table;
(or)
INSERT INTO Target_table SELECT col_1, col_2,int(null) col_3 FROM Source_table; //if the order of columns matches between select statement and target_table
These both query will insert same results as your query does (i.e . INSERT INTO Target_table(col_1, col_2) SELECT col_1, col_2 FROM Source_table;)
Created 04-21-2018 03:26 PM
Probably it's a bug in Hive ODBC driver, As a workaround you can use the below query, this query will run in beeline and in ODBC driver also.
INSERT INTO Target_table(col_1, col_2, col_3) SELECT col_1, col_2,int(null) col_3 FROM Source_table;
(or)
INSERT INTO Target_table SELECT col_1, col_2,int(null) col_3 FROM Source_table; //if the order of columns matches between select statement and target_table
These both query will insert same results as your query does (i.e . INSERT INTO Target_table(col_1, col_2) SELECT col_1, col_2 FROM Source_table;)
Created 04-21-2018 04:02 PM
@ShuThank you so much. First approach worked.
INSERT INTO Target_table(col_1, col_2, col_3) SELECT col_1, col_2,int(null) col_3 FROM Source_table;