[ 
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)

Reply via email to