KaliAnt created HIVE-18223:
------------------------------

             Summary: Hive JDBC driver support for retrieval of foreign keys
                 Key: HIVE-18223
                 URL: https://issues.apache.org/jira/browse/HIVE-18223
             Project: Hive
          Issue Type: Wish
         Environment: Hortonworks Data Platform 2.6.3
hive-jdbc-2.1.0.2.6.3.0-235-standalone.jar(comes bundled with the HDP 
distribution)
            Reporter: KaliAnt


I created two sample Hive tables.
Department table:

{code:java}
+-------------------------------+------------------------------------------------------------+-----------------------------+--+
|           col_name            |                         data_type             
             |           comment           |
+-------------------------------+------------------------------------------------------------+-----------------------------+--+
| # col_name                    | data_type                                     
             | comment                     |
|                               | NULL                                          
             | NULL                        |
| id                            | int                                           
             | Surrogate PK is not fun     |
| description                   | string                                        
             |                             |
| code                          | string                                        
             |                             |
|                               | NULL                                          
             | NULL                        |
| # Detailed Table Information  | NULL                                          
             | NULL                        |
| Database:                     | ojoqcu                                        
             | NULL                        |
| Owner:                        | OJOQCU                                        
             | NULL                        |
| CreateTime:                   | Mon Dec 04 14:29:58 UTC 2017                  
             | NULL                        |
| LastAccessTime:               | UNKNOWN                                       
             | NULL                        |
| Retention:                    | 0                                             
             | NULL                        |
| Location:                     | 
hdfs://devhadoop/apps/hive/warehouse/ojoqcu.db/department  | NULL               
         |
| Table Type:                   | MANAGED_TABLE                                 
             | NULL                        |
| Table Parameters:             | NULL                                          
             | NULL                        |
|                               | COLUMN_STATS_ACCURATE                         
             | {\"BASIC_STATS\":\"true\"}  |
|                               | numFiles                                      
             | 0                           |
|                               | numRows                                       
             | 0                           |
|                               | rawDataSize                                   
             | 0                           |
|                               | totalSize                                     
             | 0                           |
|                               | transient_lastDdlTime                         
             | 1512397798                  |
|                               | NULL                                          
             | NULL                        |
| # Storage Information         | NULL                                          
             | NULL                        |
| SerDe Library:                | org.apache.hadoop.hive.ql.io.orc.OrcSerde     
             | NULL                        |
| InputFormat:                  | 
org.apache.hadoop.hive.ql.io.orc.OrcInputFormat            | NULL               
         |
| OutputFormat:                 | 
org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat           | NULL               
         |
| Compressed:                   | No                                            
             | NULL                        |
| Num Buckets:                  | -1                                            
             | NULL                        |
| Bucket Columns:               | []                                            
             | NULL                        |
| Sort Columns:                 | []                                            
             | NULL                        |
| Storage Desc Params:          | NULL                                          
             | NULL                        |
|                               | serialization.format                          
             | 1                           |
|                               | NULL                                          
             | NULL                        |
| # Constraints                 | NULL                                          
             | NULL                        |
|                               | NULL                                          
             | NULL                        |
| # Primary Key                 | NULL                                          
             | NULL                        |
| Table:                        | ojoqcu.department                             
             | NULL                        |
| Constraint Name:              | pk_106546857_1512397798103_0                  
             | NULL                        |
| Column Names:                 | id                                            
             |                             |
+-------------------------------+------------------------------------------------------------+-----------------------------+--+
{code}

Employee table:

{code:java}
+-------------------------------+----------------------------------------------------------+-----------------------------+--+
|           col_name            |                        data_type              
           |           comment           |
+-------------------------------+----------------------------------------------------------+-----------------------------+--+
| # col_name                    | data_type                                     
           | comment                     |
|                               | NULL                                          
           | NULL                        |
| id                            | int                                           
           | Surrogate PK isn't fun      |
| firstname                     | string                                        
           |                             |
| lastname                      | string                                        
           |                             |
| dob                           | date                                          
           |                             |
| departmentid                  | int                                           
           |                             |
|                               | NULL                                          
           | NULL                        |
| # Detailed Table Information  | NULL                                          
           | NULL                        |
| Database:                     | ojoqcu                                        
           | NULL                        |
| Owner:                        | ojoqcu                                        
           | NULL                        |
| CreateTime:                   | Wed Nov 15 12:37:13 UTC 2017                  
           | NULL                        |
| LastAccessTime:               | UNKNOWN                                       
           | NULL                        |
| Retention:                    | 0                                             
           | NULL                        |
| Location:                     | 
hdfs://devhadoop/apps/hive/warehouse/ojoqcu.db/employee  | NULL                 
       |
| Table Type:                   | MANAGED_TABLE                                 
           | NULL                        |
| Table Parameters:             | NULL                                          
           | NULL                        |
|                               | COLUMN_STATS_ACCURATE                         
           | {\"BASIC_STATS\":\"true\"}  |
|                               | numFiles                                      
           | 0                           |
|                               | numRows                                       
           | 0                           |
|                               | rawDataSize                                   
           | 0                           |
|                               | totalSize                                     
           | 0                           |
|                               | transient_lastDdlTime                         
           | 1510749433                  |
|                               | NULL                                          
           | NULL                        |
| # Storage Information         | NULL                                          
           | NULL                        |
| SerDe Library:                | org.apache.hadoop.hive.ql.io.orc.OrcSerde     
           | NULL                        |
| InputFormat:                  | 
org.apache.hadoop.hive.ql.io.orc.OrcInputFormat          | NULL                 
       |
| OutputFormat:                 | 
org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat         | NULL                 
       |
| Compressed:                   | No                                            
           | NULL                        |
| Num Buckets:                  | -1                                            
           | NULL                        |
| Bucket Columns:               | []                                            
           | NULL                        |
| Sort Columns:                 | []                                            
           | NULL                        |
| Storage Desc Params:          | NULL                                          
           | NULL                        |
|                               | serialization.format                          
           | 1                           |
|                               | NULL                                          
           | NULL                        |
| # Constraints                 | NULL                                          
           | NULL                        |
|                               | NULL                                          
           | NULL                        |
| # Primary Key                 | NULL                                          
           | NULL                        |
| Table:                        | ojoqcu.employee                               
           | NULL                        |
| Constraint Name:              | pk_133634893_1510749433083_0                  
           | NULL                        |
| Column Names:                 | id                                            
           |                             |
+-------------------------------+----------------------------------------------------------+-----------------------------+--+
{code}

I wrote a test code snippet to retrieve the constraints:


{code:java}
DatabaseMetaData databaseMetaData = con.getMetaData();
        //PK
        ResultSet primaryKeysSet = 
databaseMetaData.getPrimaryKeys("ojoqcu","ojoqcu","employee");
        while (primaryKeysSet.next()){
            System.out.println("PK : "+primaryKeysSet.getString("COLUMN_NAME"));
        }
        primaryKeysSet.close();

        //FK
        ResultSet foreignKeysSet = 
databaseMetaData.getImportedKeys("ojoqcu","ojoqcu","employee");
        while(foreignKeysSet.next()){
            System.out.println("primary key column name being imported : 
"+foreignKeysSet.getString("PKCOLUMN_NAME"));
            System.out.println("foreign key column name : 
"+foreignKeysSet.getString("FKCOLUMN_NAME"));
        }
foreignKeysSet.close();

       //FK
        ResultSet fkSet = 
databaseMetaData.getExportedKeys("ojoqcu","ojoqcu","department");
        while(fkSet.next()){
            System.out.println("primary key column name : 
"+fkSet.getString("PKCOLUMN_NAME"));
            System.out.println("foreign key column name being exported : 
"+fkSet.getString("FKCOLUMN_NAME"));
        }
        fkSet.close();

        con.close();
{code}

The output:

{code:java}
PK : id
Exception in thread "main" java.sql.SQLException: Method not supported
        at 
org.apache.hive.jdbc.HiveDatabaseMetaData.getExportedKeys(HiveDatabaseMetaData.java:330)
        at com.my.App.connectHiveUsingZookeeper(App.java:125)
        at com.my.App.main(App.java:25)
{code}
I took a quick look at the Hive 
[implementation|https://github.com/apache/hive/blob/master/jdbc/src/java/org/apache/hive/jdbc/HiveDatabaseMetaData.java]
 of the 
[DatabaseMetaData|https://docs.oracle.com/javase/8/docs/api/java/sql/DatabaseMetaData.html]
 and I found that:
# The getImportedKeys(...) returns an empty ResutSet
# As obvious from the exception, getExportedKeys(...) is not supported

It would be great if both the primary and foreign keys pertaining to a Hive 
table can be retrieved.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to