首页 文章

Kudu auto生成关键栏目

提问于
浏览
1

我试图在Kudu中制作自定义自动生成/递增键,它将继续增加其值 - 从默认为零的起始种子 .

遍历所有记录并递增计数器以获得行数非常低效 .

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

2 回答

  • 0

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

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

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

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

    现在最好的做法是依靠一些外部机制来分配行ID .

    资料来源:我是Apache Kudu的PMC成员 .

  • 0

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

    • 使用impala的uuid()函数生成唯一ID .

    • 将uuid()转换为BIGINT(通过散列等)

    • 使用impala的unix_timestamp生成一个BIGINT值,表示当前日期和时间为Unix纪元的增量(这可能会导致一些冲突,因此如果您要将其用作主键,请更好地添加另一列 .

相关问题