在JDBC ResultSet元数据中获取不带表名的Hive列名

时间:2015-03-14 16:12:33

标签: java jdbc hive

我试图从ResultSet的元数据中获取列的名称,但在Hive中,如果table_name.column_name的形式我想获取列名,我想要只有column_name(类似于我从MySQL获得的例子)。有可能吗?

2 个答案:

答案 0 :(得分:5)

是的,这是可能的。 有两种方法可以完成:

1。)使用Hive JDBC连接(您正在寻找)。

2。)使用HiveMetastoreClient。

以下是上述两种方法的代码片段:

第一种方法:

ResultSet resultSet = <custom_class_for_hive_jdbc_connector>.executeQuery("DESCRIBE <TABLE_NAME>");
ResultSetMetaData metaData = resultSet.getMetaData();
while (resultSet.next()) {

System.out.println(" Column names : "+resultSet.getString(metaData.getColumnName(1)));

}

在这种方法中,我们需要创建一个resultsetmetadata对象,并使用该对象,我们可以获得查询输出的详细信息。在你的情况下“描述表”

第二种方法:

HiveMetaStoreClient metastoreClient = null;
HiveConf hiveConf = new HiveConf();         
metastoreClient = new HiveMetaStoreClient(hiveConf);
List<FieldSchema> list = metastoreClient.getFields(<database_name>,<table_name>);   
for (int i = 0; i < list.size(); i++) {
    System.out.println("Column names : "+list.get(i).getName());        
}                   
metastoreClient.close();

在这种方法中,我们没有运行任何查询,我们只是连接到HiveMetastore,从那里我们得到给定数据库下给定表的详细信息。

希望它有所帮助...... !!!

答案 1 :(得分:0)

要防止将Hive表名称添加到列名之前,请在Hive-site.xml文件中使用此属性设置。

VARCHAR(255)

从Hive .13开始,创建了一个名为 <property> <name>hive.resultset.use.unique.column.names</name> <value>false</value> </property> 的新Hive属性。此属性的默认值为TRUE。

如果使用默认值,则Hive表名称将添加到所有列名称之前。这是以前版本的Hive的行为变化。

如果您尝试将hive.resultset.use.unique.column.namesJdbctemplate一起使用来执行驼峰式情况以强调格式转换,这也非常重要。