2016-10-21 10 views
0

POM зависимость:Как получить строку и разделитель полей с помощью HCatalog Java API

<dependency> 
     <groupId>org.apache.hive.hcatalog</groupId> 
     <artifactId>hive-webhcat-java-client</artifactId> 
     <version>1.2.1</version> 
    </dependency> 

Я могу получить столбцы, столбцы разделов, формат входного файла и т.д.

Полезный код:

HiveConf hcatConf = new HiveConf(); 

    hcatConf.setVar(HiveConf.ConfVars.METASTOREURIS, connectionUri); 
    hcatConf.set("hive.metastore.local", "false"); 
    hcatConf.setIntVar(HiveConf.ConfVars.METASTORETHRIFTCONNECTIONRETRIES, THRIFT_CONNECTION_RETRY); 
    hcatConf.set(HiveConf.ConfVars.HIVE_SUPPORT_CONCURRENCY.varname, "true"); 
    hcatConf.set(HiveConf.ConfVars.SEMANTIC_ANALYZER_HOOK.varname, HCatSemanticAnalyzer.class.getName()); 
    hcatConf.set(HiveConf.ConfVars.PREEXECHOOKS.varname, ""); 
    hcatConf.set(HiveConf.ConfVars.POSTEXECHOOKS.varname, ""); 

    hcatConf.setTimeVar(HiveConf.ConfVars.METASTORE_CLIENT_SOCKET_TIMEOUT, TIME_OUT, TimeUnit.MILLISECONDS); 

    HCatClient client = null; 
    HCatTable hTable = null; 

    try { 
     client = HCatClient.create(hcatConf); 
     hTable = client.getTable(databaseName, tableName); 
     System.out.println(hTable.getInputFileFormat()); 
     System.out.println(hTable.getOutputFileFormat()); 
     System.out.println(hTable.getSerdeLib()); 

    } catch (HCatException hCatEx) { 
     LOG.error("Not able to connect to hive. Caused By;", hCatEx); 
    } 

Как получить разделитель строк и полей для текстовых таблиц?

В соответствии с Javadoc getSerdeParams(),

public Map<String,String> getSerdeParams()
- возвращает параметры, такие как разделитель полей, и т.д..

, но в моем случае я получаю только 1 запись в этой карте

{serialization.format=1} 

ответ

0

Если я создаю таблицу:

create table tbl1 (c1 int) stored as textfile 

И когда я бегу show create table tbl1:

CREATE TABLE `tbl1`(
    `c1` int) 
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://localhost:8020/apps/hive/warehouse/dev.db/tbl1' 
TBLPROPERTIES (
    'transient_lastDdlTime'='1477067078') 

По умолчанию delimite rs показаны.

Когда я создаю таблицу с разделителями:

create table tbl2 (c1 int) ROW FORMAT DELIMITED FIELDS TERMINATED BY "\," LINES TERMINATED BY "\n" stored as textfile; 

И когда я бегу show create table tbl2:

CREATE TABLE `tbl2`(
    `c1` int) 
ROW FORMAT DELIMITED 
    FIELDS TERMINATED BY ',' 
    LINES TERMINATED BY '\n' 
STORED AS INPUTFORMAT 
    'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
    'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' 
LOCATION 
    'hdfs://localhost:8020/apps/hive/warehouse/dev.db/tbl2' 
TBLPROPERTIES (
    'transient_lastDdlTime'='1477067160') 

Во 2-ом случае я явно упомянул разделители. Итак, getSerdeParams() вернули желаемые значения.