我编写了一个简单的测试程序来插入一行。与普通HBase Put示例程序的唯一不同之处在于,Put实例及其KeyValue实例是用时间戳创建的。
预期的行为是插入行。但是,在我的HBase环境中,没有插入行。
下面是我的测试程序。
import java.io.*;
import java.util.*;
import org.apache.hadoop.conf.*;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.*;
public class Test
{
// Names of table, family, qualifier and row ID.
private static final byte[] TABLE = Bytes.toBytes("test-table");
private static final byte[] FAMILY = Bytes.toBytes("test-family");
private static final byte[] QUALIFIER = Bytes.toBytes("test-qualifier");
private static final byte[] ROWID = Bytes.toBytes("test-rowid");
/**
* The entry point of this program.
*
* <p>
* This program assumes that there already exists an HBase
* table named "test-table" with a column family named
* "test-family". To create an HBase table satisfying these
* conditions, type the following at the hbase shell prompt.
* </p>
*
* <pre>
* hbase> create 'test-table', 'test-family'
* </pre>
*
* <p>
* This program inserts a row whose row ID is "test-rowid"
* with a column named "test-family:test-qualifier". The
* value of the column is the string expression of
* <code>new Date()</code>.
* </p>
*/
public static void main(String[] args) throws Exception
{
// Get the table.
Configuration conf = HBaseConfiguration.create();
HTable table = new HTable(conf, TABLE);
// Prepare data to put.
byte[] value = Bytes.toBytes(new Date().toString());
Put put = new Put(ROWID);
put.add(FAMILY, QUALIFIER, value);
// Clone Put with a timestamp.
put = clone(put, 10);
// Put the data.
table.put(put);
// Read back the data.
Get get = new Get(ROWID);
Result result = table.get(get);
// Dump the read data.
System.out.println("DATA = " + result.toString());
}
/**
* Clone the given Put instance with the given timestamp.
*/
private static Put clone(Put a, long timestamp) throws IOException
{
// Create a Put instance with the specified timestamp.
Put b = new Put(a.getRow(), timestamp);
Map<byte[], List<KeyValue>> kvs = a.getFamilyMap();
// Copy KeyValue's from the source Put (a) to
// the cloned Put (b). Note the given timestamp
// is used for each new KeyValue instance.
for (List<KeyValue> kvl : kvs.values())
{
for (KeyValue kv : kvl)
{
b.add(new KeyValue(
kv.getRow(),
kv.getFamily(),
kv.getQualifier(),
timestamp,
kv.getValue()));
}
}
return b;
}
}
该程序生成的控制台输出如下所示。
DATA = keyvalues=NONE
而hbase shell中的“scan”表示“0行(s)”。
hbase(main):011:0> scan 'test-table'
ROW COLUMN+CELL
0 row(s) in 0.0080 seconds
// Clone Put with a timestamp.
//put = clone(put, 10);
DATA = keyvalues={test-rowid/test-family:test-qualifier/1344594210281/Put/vlen=28}
hbase(main):012:0> scan 'test-table'
ROW COLUMN+CELL
test-rowid column=test-family:test-qualifier, timestamp=1344594210281, value=Fri Aug 10 19:23:30 JST 2012
1 row(s) in 0.0110 seconds
时间戳列族和列名构成组合键。这里的时间戳是UNIX时间戳。
返回我女巫是错误的。 但接下来的查询如下: 我看对日期
我正在尝试将时间戳值转换为twig文件中的日期格式,但出现以下错误。 错误: 在呈现模板期间引发了异常(“DateTime::\构造():无法分析时间字符串(
我刚刚遇到了一个非常奇怪的问题,当使用带有时间戳和水印赋值器的EventTime时,我无法从流窗口联接中获得任何结果。 我使用Kafka作为我的数据流源,并尝试了AscendingTimestampExtractor和自定义赋值器,它们实现了Flink留档中提到的Assignerwith周期水印,正如我测试的那样,没有发出水印,也没有生成连接结果。如果我更改为使用ProcessingTime和Tu
问题内容: 中欧夏令时开始于三月的最后一个星期日。我们将时钟设置为02:00到03:00。如果我在数据库请求中进行时间戳计算会发生什么?比方说,在01:59? 结果是03:00还是02:00? 如果我们将时钟设置为03:00到02:00,那结束了呢? 时间从03:00更改为02:00之后…在02:00会发生什么?是02:59还是01:59? 应该如何处理?最佳实践以及Oracle Database
我有几个库,我已经手动部署到我的Nexus存储库中,使用: 包装战争时有没有可能消除时间戳?