我试图在Kudu中制作自定义自动生成/递增键,它将继续增加其值 - 从默认为零的起始种子 .
遍历所有记录并递增计数器以获得行数非常低效 .
Kudu是否提供开箱即用的行数?如果没有,最好的方法是什么?
Apache Kudu目前不支持 AUTO_INCREMENT 列 . 在Kudu网站上有一个FAQ entry提到了这一点 .
AUTO_INCREMENT
Kudu是一个分布式存储引擎,专注于成为一个好的分析存储(OLAP),而不是一个好的事务存储(OLTP),它显示了我们迄今为止优先考虑的功能 . 这是一个很好的例子 .
因为我们不想成为OLTP存储库,所以Kudu还没有实现多行或多节点事务,因此此时很难正确实现简单的递增主键计数器 - 尤其是当该表在主键上进行散列分区 . 我们需要一个目前不存在的中央事务协调器 .
要回答第二个问题,在Kudu中获取行计数目前有点贵,因为它涉及扫描每个平板电脑上的索引列并总计总计数 . Apache Impala / Apache Spark SQL将为您透明地执行此操作,如果您执行 SELECT COUNT(*) from kudu_table 但我目前不会依赖它来分配新ID,因为Impala当前允许从稍微陈旧的Kudu副本进行扫描,因此可能会关闭在行数上 .
SELECT COUNT(*) from kudu_table
现在最好的做法是依靠一些外部机制来分配行ID .
资料来源:我是Apache Kudu的PMC成员 .
有几种方法可以解决这个问题 .
使用impala的uuid()函数生成唯一ID .
将uuid()转换为BIGINT(通过散列等)
使用impala的unix_timestamp生成一个BIGINT值,表示当前日期和时间为Unix纪元的增量(这可能会导致一些冲突,因此如果您要将其用作主键,请更好地添加另一列 .
2 回答
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成员 .
有几种方法可以解决这个问题 .
使用impala的uuid()函数生成唯一ID .
将uuid()转换为BIGINT(通过散列等)
使用impala的unix_timestamp生成一个BIGINT值,表示当前日期和时间为Unix纪元的增量(这可能会导致一些冲突,因此如果您要将其用作主键,请更好地添加另一列 .