在 JDBC 结果集元数据中获取没有 table 名称的 Hive 列名称
Get Hive column names without table name in JDBC ResultSet metadata
我正在尝试从 ResultSet
的元数据中获取列的名称,但在 Hive 中,如果 table_name.column_name
的形式我得到列名称,我只想column_name
(类似于我从 MySQL 中得到的)。可能吗?
是的,这是可能的。
有两种方法可以完成:
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 对象,并使用该对象我们可以获得查询输出的详细信息。你的情况 "describe table"
第二种方法:
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,然后我们从那里获取给定数据库下给定 table 的详细信息。
希望对您有所帮助...!!!
要防止 Hive table 名称被添加到列名称前面,请在 Hive-site.xml 中使用此 属性 设置文件。
<property>
<name>hive.resultset.use.unique.column.names</name>
<value>false</value>
</property>
从 Hive .13 开始,创建了一个名为 hive.resultset.use.unique.column.names
的新 Hive 属性。此 属性 的默认值为 TRUE。
如果使用默认值,Hive table 名称将添加到所有列名称的前面。这是 Hive 以前版本的行为变化。
如果您尝试使用 Spring Jdbctemplate
和 Beanpropertyrowmapper
为您进行驼峰式下划线格式转换,这也非常重要。
我正在尝试从 ResultSet
的元数据中获取列的名称,但在 Hive 中,如果 table_name.column_name
的形式我得到列名称,我只想column_name
(类似于我从 MySQL 中得到的)。可能吗?
是的,这是可能的。 有两种方法可以完成:
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 对象,并使用该对象我们可以获得查询输出的详细信息。你的情况 "describe table"
第二种方法:
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,然后我们从那里获取给定数据库下给定 table 的详细信息。
希望对您有所帮助...!!!
要防止 Hive table 名称被添加到列名称前面,请在 Hive-site.xml 中使用此 属性 设置文件。
<property>
<name>hive.resultset.use.unique.column.names</name>
<value>false</value>
</property>
从 Hive .13 开始,创建了一个名为 hive.resultset.use.unique.column.names
的新 Hive 属性。此 属性 的默认值为 TRUE。
如果使用默认值,Hive table 名称将添加到所有列名称的前面。这是 Hive 以前版本的行为变化。
如果您尝试使用 Spring Jdbctemplate
和 Beanpropertyrowmapper
为您进行驼峰式下划线格式转换,这也非常重要。