[ https://issues.apache.org/jira/browse/HIVE-26046?focusedWorklogId=804606&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-804606 ]
ASF GitHub Bot logged work on HIVE-26046: ----------------------------------------- Author: ASF GitHub Bot Created on: 30/Aug/22 02:22 Start Date: 30/Aug/22 02:22 Worklog Time Spent: 10m Work Description: zhangbutao commented on code in PR #3276: URL: https://github.com/apache/hive/pull/3276#discussion_r957943881 ########## standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/dataconnector/jdbc/MySQLConnectorProvider.java: ########## @@ -90,10 +90,20 @@ protected String getDataType(String dbDataType, int size) { // map any db specific types here. switch (dbDataType.toLowerCase()) { + case "bit": + return toHiveBitType(size); default: mappedType = ColumnType.VOID_TYPE_NAME; break; } return mappedType; } + + private String toHiveBitType(int size) { + if (size <= 1) { + return ColumnType.BOOLEAN_TYPE_NAME; + } else { + return ColumnType.BIGINT_TYPE_NAME; Review Comment: @dengzhhu653 @nrg4878 Thanks for your suggestion. Actually, i have tried to convert MySQL's bit datatype to hive's binary, but did not get expected restult. In this case, hive stores MySQL's bit values(b'111000') as binary type, and this binary values can not dispaly to users, that is to say users only can see a blank result. Step to test: 1. create mysql table with bit data type in mysql: ![image](https://user-images.githubusercontent.com/9760681/187333226-f23705a5-50b6-40bf-b1e1-8fcecc7a065c.png) 2. create jdbc-mapping table in hive: ` CREATE EXTERNAL TABLE jdbc_testmysqlbit` `(` ` id binary` `)` `STORED BY 'org.apache.hive.storage.jdbc.JdbcStorageHandler'` `TBLPROPERTIES (` `"hive.sql.database.type" = "MYSQL",` `"hive.sql.jdbc.driver" = "com.mysql.jdbc.Driver",` `"hive.sql.jdbc.url" = "jdbc:mysql://localhost:3306/testdb",` `"hive.sql.dbcp.username" = "user",` `"hive.sql.dbcp.password" = "passwd",` `"hive.sql.table" = "testmysqlbit",` `"hive.sql.dbcp.maxActive" = "1"` `);` 3.`select * from jdbc_testmysqlbit;` using hive beeline: ![image](https://user-images.githubusercontent.com/9760681/187333975-e7d6270c-e922-4088-948f-46024cbcb6e5.png) Issue Time Tracking ------------------- Worklog Id: (was: 804606) Time Spent: 3h 20m (was: 3h 10m) > MySQL's bit datatype is default to void datatype in hive > -------------------------------------------------------- > > Key: HIVE-26046 > URL: https://issues.apache.org/jira/browse/HIVE-26046 > Project: Hive > Issue Type: Sub-task > Components: Standalone Metastore > Affects Versions: 4.0.0 > Reporter: Naveen Gangam > Assignee: zhangbutao > Priority: Major > Labels: pull-request-available > Time Spent: 3h 20m > Remaining Estimate: 0h > > describe on a table that contains a "bit" datatype gets mapped to void. We > need a explicit conversion logic in the MySQL ConnectorProvider to map it to > a suitable datatype in hive. > {noformat} > +-------------------------------+---------------------------------------------------+----------------------------------------------------+ > | col_name | data_type > | comment | > +-------------------------------+---------------------------------------------------+----------------------------------------------------+ > | tbl_id | bigint > | from deserializer | > | create_time | int > | from deserializer | > | db_id | bigint > | from deserializer | > | last_access_time | int > | from deserializer | > | owner | varchar(767) > | from deserializer | > | owner_type | varchar(10) > | from deserializer | > | retention | int > | from deserializer | > | sd_id | bigint > | from deserializer | > | tbl_name | varchar(256) > | from deserializer | > | tbl_type | varchar(128) > | from deserializer | > | view_expanded_text | string > | from deserializer | > | view_original_text | string > | from deserializer | > | is_rewrite_enabled | void > | from deserializer | > | write_id | bigint > | from deserializer > {noformat} -- This message was sent by Atlassian Jira (v8.20.10#820010)