2016-05-25 60 views
1

我想在Kudu中自定义自动生成/增加的密钥,它将继续增加它的值 - 从默认为零的开始种子开始。Kudu自动生成密钥列

通过所有记录并增加计数器以获得行计数效率相当低。

Kudu是否提供开箱即用的行数? 如果没有,最好的方法是什么?

+0

你在使用? –

回答

0

Apache Kudu目前不支持AUTO_INCREMENT列。在Kudu网站上有一个FAQ entry提到这一点。

Kudu是一个分布式存储引擎,专注于成为一个良好的分析存储(OLAP),而不是一个好的事务存储(OLTP),它显示了我们迄今优先考虑的功能。这是一个很好的例子。

因为我们并不想成为一个OLTP存储库,所以Kudu还没有实现多行或多节点事务,所以现在很难正确实现一个简单的递增主键计数器 - 特别是当表在主键上进行散列分区时。我们需要一个当前不存在的中央事务协调器。

要回答第二个问题,在Kudu中获取行计数目前有点贵,因为它涉及扫描每个平板电脑上的索引列并总计总计数。如果您执行SELECT COUNT(*) from kudu_table,Apache Impala/Apache Spark SQL将为您透明地执行此操作,但由于Impala目前允许从稍微陈旧的Kudu副本进行扫描,因此可能会关闭,因此我目前不会将其用于分配新ID的目的在行数上。

现在要做的最好的事情是依靠一些外部机制来分配行ID。

来源:我是Apache Kudu的PMC成员。

0

有几种方法可以解决这个问题。

  1. 使用impala的uuid()函数来生成唯一的id。

  2. 转换的uuid()来BIGINT(通过散列等)

  3. 使用帕拉的UNIX_TIMESTAMP以生成表示当前的日期和时间作为从Unix纪元增量一个BIGINT值(这可能会导致一些碰撞,所以最好将另一列添加如果你打算使用这个作为主键。

+0

欢迎API来左右。请提供一些更多的信息,网址,文档,代码样本等。正如它在那个时候,它不提供适合这里的需要的解决方案。 – inetphantom