2015-12-10 4 views
1

я создал внешнюю таблицу, как это:Есть ли способ создать Columnfamily во внешней таблице динамически?

CREATE External TABLE IF NOT EXISTS words (word string, timest string, 
    url string, occs string, nos string, hiveall string, occall string) STORED 
    BY org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES 
    ('hbase.columns.mapping' =':key, count:timest, count:url, count:occs, 
    count:nos, other:hiveall, other:occall ') 

Есть ли способ, чтобы создать columnfamilys динамически? так что у меня есть, например, что-то вроде этого:

1397897857000  column=word:occall, timestamp=1449778100184, value=value1 

1397897857000  column=otherword:occall, timestamp=1449778100184, value=value2 

Я думал о чем-то вроде этого, но из улья, этот код здесь от HBase:

Configuration config = HBaseConfiguration.create(); 
HBaseAdmin admin = new HBaseAdmin(conf); 
String table = "myTable"; 

admin.disableTable(table); 

HColumnDescriptor cf1 = ...; 
admin.addColumn(table, cf1);  // adding new ColumnFamily 
HColumnDescriptor cf2 = ...; 
admin.modifyColumn(table, cf2); // modifying existing ColumnFamily 

admin.enableTable(table); 

здесь: http://hbase.apache.org/0.94/book/schema.html

Или у кого-то есть другая идея для моей проблемы: У меня есть несколько данных из задания подсчета слов. Эти данные содержат URL-адрес, с которого было прочитано это слово, временную метку, когда было прочитано это слово, как часто она находилась в URL-адресе, и некоторая информация о категории (есть новости, социальные и все) с происхождение. Основная проблема заключается в том, что несколько слов могут встречаться в одну и ту же метку времени, которая будет переопределять существующую. Мне нужно, чтобы rowkey была меткой времени, чтобы сделать некоторые запросы против нее (например, то, что было наиболее часто используемым словом за последние 2 недели).

ответ

1

Семейства колонок не могут быть изменены после создания, подобного этому. В вашем сценарии вы должны создать разные классификаторы столбцов вместо разных семейств столбцов.

Исправьте семейство столбцов и используйте слово в качестве имени классификатора. Таким образом, он не будет отменять, когда разные слова приходят в одну и ту же метку времени.

+0

Как я могу динамически установить слова в определитель и как я могу различать разные значения? То, что я понимаю, здесь примерно такое: 1397897857000 column = count: word, timestamp = 1449778100184, value = valueFromWhatExactly? 1397897857000 column = count: otherword, timestamp = 1449778100184, value = valueFromWhatExactly? Я не хочу сохранять все записи в одной строке, потому что нужно быстро запросить временную метку, какие слова (а также какие атрибуты) у нее есть. – dino

+0

Альтернативой может быть добавление слова в ключе строки непосредственно после отметки времени и сохранение всех других атрибутов в соответствующих классификаторах столбцов. –

+0

Могу ли я хранить карту как rowkkey? если да, то как я могу это сделать, потому что слова динамически. – dino

Смежные вопросы