Hadoop 为什么Phoenix在执行UPSERT命令时总是向hbase添加一个额外的列(名为_0)?
当我在apache phoenix上执行UPSERT命令时,我总是看到phoenix在hbase中添加了一个额外的列(名为_0),该列(_0)由phoenix自动生成,但我不需要它,如下所示:Hadoop 为什么Phoenix在执行UPSERT命令时总是向hbase添加一个额外的列(名为_0)?,hadoop,hbase,phoenix,Hadoop,Hbase,Phoenix,当我在apache phoenix上执行UPSERT命令时,我总是看到phoenix在hbase中添加了一个额外的列(名为_0),该列(_0)由phoenix自动生成,但我不需要它,如下所示: ROW COLUMN+CELL abc column=F:A,timestamp=1451305685300,value=123
ROW COLUMN+CELL
abc column=F:A,timestamp=1451305685300,value=123
abc column=F:_0, timestamp=1451305685300, value= # I want to avoid generate this row
你能告诉我怎么避免吗?多谢各位
“在创建时,为了提高查询性能,需要使用空键值
添加到任何现有行或默认行的第一列族
如果没有显式定义列族,则列族。Upserts还将添加此空键值。这通过使用键值列来提高查询性能,我们可以保证始终存在该列,从而最大限度地减少必须投影并随后返回给客户端的数据量。”
关于您的问题,如果可以避免: 您可以通过在sql语句末尾添加以下语句来解决此问题:
ALTER TABLE "<your-table>" ADD "<your-cf>"."_0" VARCHAR(1);
ALTER TABLE "<your-table>" DROP COLUMN "<your-cf>"."_0";
ALTER TABLE“ADD.”“\u 0”VARCHAR(1);
更改表“删除列”。“0”;
只有当您使用phoenix查询某个表,然后使用另一个不知道phoenix特定伪值的系统访问该表时,才应该执行此操作。谢谢!我得到了它!但这真的没有办法避免吗?空键值看起来非常零碎和冗余,即使它是为性能而设计的。