如何在Java代码中获取hive表格式?

时间:2016-04-18 08:41:25

标签: hive

我尝试使用

检查表格格式的详细信息

show create table test命令

输出:

CREATE TABLE `test`(
  `c1` boolean, 
  `c2` int, 
  `c3` varchar(30), 
  `c4` char(20))
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  'hdfs://hostname:8020/apps/hive/warehouse/test'
TBLPROPERTIES (
  'COLUMN_STATS_ACCURATE'='true', 
  'numFiles'='3', 
  'numRows'='3', 
  'rawDataSize'='88', 
  'totalSize'='91', 
  'transient_lastDdlTime'='1458116522')

INPUTFORMATOUTPUTFORMAT,我可以看出这是文字格式。

同样,我可以使用以下方式获取这些细节:

describe extended test

我猜这些都是效率低下的方式。如何在Java代码中使用Hive JDBC以更好的方式实现此目的。

1 个答案:

答案 0 :(得分:1)

这可以使用Hcatalog api实现。在连接到hive Metastore时,您可以根据schemaName和tableName获取HCatTable。在这个HCatTable上,你可以使用inputFileFormat和OutputFileFormat来获得相同的结构。

如果您来自java,请参阅以下代码段:

String schema = "blending";
HCatClient client = HCatalogClient.getClient(uri);
List<String> tables = client.listTableNamesByPattern(schema, "*");
for(String table : tables) {
    HCatTable hTable = client.getTable(schema, table);
    System.out.println("Table name is :" +hTable.getTableName());
    System.out.println("Input file format is:"+hTable.getInputFileFormat());
    System.out.println("Output file format is:"+hTable.getOutputFileFormat());
}