我有一个像这样的 cassandra 表:
keyspace_name| columnfamily_name | column_name | component_index |
-------------+-------------------+-------------+-----------------+
aw | test | as_of_date | 0 |
aw | test | data | 1 |
aw | test | record_id | null |
aw | test | upload_time | 1 |
而且我不会创建将打印(例如 slf4j)行的触发器,这些行应该以下一种格式插入:
key = key1
column_name1=value1
column_name2=value2
...
column_namen=valuen
是否可以在触发器中获取列名?我尝试了互联网上的示例,但它打印的数据不正确。
public Collection<RowMutation> augment(ByteBuffer key, ColumnFamily update) {
String localKey = new String(key.array(), Charset.forName("UTF-8"));
logger.info("key={}.", localKey);
for (Column cell : update) {
try {
String name = ByteBufferUtil.string(cell.name());
logger.info("name={}.", name);
String value = ByteBufferUtil.string(cell.value());
logger.info("value={}.", value);
} catch (Exception e) {
logger.info("Exception={}.", e.getMessage());
}
}
据我了解,我必须将cell.value()转换为特定的数据类型,如下所示:
Date date = TimestampType.instance.compose(cell.value());
但我不知道,如何检测字段类型,我不明白为什么我不能使用 ByteBufferUtil.string(cell.name()) 获取列名。