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

#hive #hcatalog

#улей #hcatalog

Вопрос:

Зависимость от POM:

     <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}
  

Ответ №1:

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

 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')
  

Разделители по умолчанию не отображаются.

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

 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')
  

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