2014-01-15 43 views
2

需要使用Jdbc程序访问Hive元数据表。Metastore实际存储的内容以及如何访问它?需要使用Jdbc程序访问Hive元数据表

我试着这样做:

sql="show tables"; 
Statement stmt = con.createStatement(); 

System.out.println("Running: " + sql); 
res = stmt.executeQuery(sql); 
while (res.next()) { 
System.out.println(res.getString(1)); 
} 

所以我拿到表的名单,但我想知道这表是存储在所以这个信息,我可以直接从该表中选择烧制蜂房,而不是命令。

而且我Metastore被配置在PostgreSQL(是否有帮助!) 感谢 希茨

回答

0

Metastore,好了,卖场上的蜂巢表中的元信息 - 姓名,隔板,立柱,核潜艇,串行解串器等。

Metastore连接参数都存储在hive-site.xml(相关属性被命名为javax.jdo.option.ConnectionURL,javax.jdo.option.ConnectionUserName和javax.jdo.option.ConnectionPassword)

您可以连接到Postgres数据库使用g连接参数并运行这些命令:

-- that'll get you the names of all Hive tables 
SELECT tbl_name FROM TBLS; 

-- that'll list all Metastore tables 
\d 
+0

好的,谢谢你会试试这个..更多的问题,我想创建一个使用主键配置单元中的表,但在eclipse中得到以下错误:正在运行:CREATE TABLE sample_Hive_Table_2(PERSON_ID INT PRIMARY KEY,PERSON VARCHAR(26)) 线程“main”中的异常java.sql.SQLException:查询返回的非零代码:40000,原因:FAILED:ParseException行1:51不匹配的输入'PRIMARY'期待) INT”在org.apache.hadoop.hive.jdbc.HiveStatement.executeQuery(HiveStatement.java:194)create table语句 \t \t在Hive_Client_17.main(Hive_Client_17.java:48) – user2176576

+0

蜂房不支持主键。 –

+0

谢谢澄清我的疑问。但我相信我们可以为列添加一些约束。我尝试添加NOT NULL约束到它..这是我得到的错误︰正在运行︰CREATE TABLE sample_Hive_Table_2(PERSON_ID INT NOT NULL,PERSON VARCHAR(26)) 线程“main”中的异常java.sql.SQLException:Query返回的非零代码:40000,原因:FAILED:ParseException行1:50不匹配输入'NOT'期待)在创建表语句中'INT'附近 \t at org.apache.hadoop.hive.jdbc.HiveStatement.executeQuery HiveStatement.java:194) \t at Hive_Client_17.main(Hive_Client_17.java:48) – user2176576

1

您可以通过JDBC查询Metastore数据库。
例如:在HDFS名单表名称和它们的位置:

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.Statement; 

import org.apache.hadoop.fs.Path; 
import org.apache.hadoop.hive.conf.HiveConf; 
import org.apache.hadoop.hive.conf.HiveConf.ConfVars; 

public class HiveMetastoreJDBCTest { 

    public static void main(String[] args) throws Exception { 

     Connection conn = null; 
     try { 
      HiveConf conf = new HiveConf(); 
      conf.addResource(new Path("file:///path/to/hive-site.xml")); 
      Class.forName(conf.getVar(ConfVars.METASTORE_CONNECTION_DRIVER)); 
      conn = DriverManager.getConnection(
        conf.getVar(ConfVars.METASTORECONNECTURLKEY), 
        conf.getVar(ConfVars.METASTORE_CONNECTION_USER_NAME), 
        conf.getVar(ConfVars.METASTOREPWD)); 

      Statement st = conn.createStatement(); 
      ResultSet rs = st.executeQuery(
       "select t.tbl_name, s.location from tbls t " + 
       "join sds s on t.sd_id = s.sd_id"); 
      while (rs.next()) { 
       System.out.println(rs.getString(1) + " : " + rs.getString(2)); 
      } 
     } 
     finally { 
      if (conn != null) { 
       conn.close(); 
      } 
     } 

    } 
} 

exists有关metastore ER图,但它可能无法跟上时代的,因此 我建议你运行metastore DDL script (Hive 0.12),在测试 架构中,并从这些表创建新ER图。 (例如与PowerArchitect

相关问题