2016-11-10 2 views
0

Я сейчас разрабатываю систему, чья задача состоит в том, чтобы потреблять данные от kafka и помещать ее в куст. Поскольку таблица имеет раздел «день», поэтому расположение этого раздела в hdfs будет /root/tableLocation/day=20161110/adfadfaaf.avro.Могу ли я изменить местоположение раздела Hive с помощью java api?

Но это место не может удовлетворить мои requirement.I хотят изменить это место для /root/tableLocation/20161110/adfadfaaf.avro .

АНИ я использую Apache улей код metastore.Demo когда я создаю таблицу, как это:

Table table = new Table(database, tableName); 
table.setTableType(TableType.EXTERNAL_TABLE); 
table.getParameters().put("EXTERNAL", "TRUE"); 
String tablePath = FileUtils.hiveDirectoryName(url, topicsDir, tableName); 
table.setDataLocation(new Path(tablePath)); 
table.setSerializationLib(avroSerde); 
try { 
    table.setInputFormatClass(avroInputFormat); 
    table.setOutputFormatClass(avroOutputFormat); 
} catch (HiveException e) { 
    throw new HiveMetaStoreException("Cannot find input/output format:", e); 
} 
List<FieldSchema> columns = HiveSchemaConverter.convertSchema(schema); 
table.setFields(columns); 
table.setPartCols(partitioner.partitionFields()); 

из кода, я могу установить расположение таблицы, , но мой вопрос в том, есть ли способ установить местоположение раздела?

+0

Я думаю, что нет, поскольку эта информация должна быть частью метаданных ... –

ответ

0

в улья и HDFS, перегородки, по существу, поддиректории в директории таблицы. Путь . Hive выполняет поиск разделов по строкам, таким как <col name>=<partition value> Если вы измените имя этого подкаталога на <partition value>, оно не будет распознано кустом как раздел.