#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()
возвращены желаемые значения.