我现在正在开发一个系统,它的任务是使用kafka的数据并将其放入hive中 /root/tableLocation/day=20161110/adfadfaaf.avro
.
但是,此位置不能满足我的要求。我想将此位置更改为 /root/tableLocation/20161110/adfadfaaf.avro .
我使用的api是apache hive metastore。创建表时的演示代码如下:
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());
从代码中,我可以设置表位置,但我的问题是,有没有一种方法可以设置分区位置?
1条答案
按热度按时间roqulrg31#
在hive和hdfs中,分区本质上是表目录下的子目录。hive识别分区的方式是通过如下结构,
<col name>=<partition value>
如果您将子目录名更改为<partition value>
,它将不会被配置单元识别为分区。