2016-11-10 5 views
0

私は今、kafkaのデータを消費してハイブに入れる仕事をしているシステムを開発しています。テーブルには「day」というパーティションがあるので、hdfs上のこのパーティションの場所は/root/tableLocation/day=20161110/adfadfaaf.avroになります。java apiを使用してHiveパーティションの場所を変更できますか?

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()); 

しかし、この場所は私のrequirement.Iを満たすことができないが、/root/tableLocation/20161110/adfadfaaf.avro .

にこの場所を変更したい私はテーブルがこのようなものです作成したとき、私は使用していますAPIは、Apacheハイブmetastore.Demoコードです

コードから、私はテーブルの場所を設定することができます しかし、私の質問は、パーティションの場所を設定する方法はありますか?

+0

この情報は、この情報がメタデータの一部である必要があるとは思わない... –

答えて

0

ハイブHDFSに、パーティションは基本的にテーブルディレクトリの下のサブディレクトリです。方法ハイブは、 <col name>=<partition value> などの構造体によるパーティションです。サブディレクトリ名を<partition value>に変更すると、ハイブはパーティションとして認識されません。

関連する問題