我可以使用javaapi修改配置单元分区位置吗?

9bfwbjaz  于 2021-06-28  发布在  Hive
关注(0)|答案(1)|浏览(418)

我现在正在开发一个系统,它的任务是使用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());

从代码中,我可以设置表位置,但我的问题是,有没有一种方法可以设置分区位置?

roqulrg3

roqulrg31#

在hive和hdfs中,分区本质上是表目录下的子目录。hive识别分区的方式是通过如下结构, <col name>=<partition value> 如果您将子目录名更改为 <partition value> ,它将不会被配置单元识别为分区。

相关问题