KSQL中的Collect_LIST规范

时间:2019-07-09 11:50:22

标签: ksql

Collect_LIST的KSQL规范说:

  

他的版本将结果数组的大小限制为最大1000   条目和任何超出此限制的值都将被静默忽略。

沉默特别烦人。我需要一个无限制的版本。我需要在KTable中使用它。

我正在考虑为此实现用户定义的功能,但是,在我踏上这一旅程之前,我想了解为什么会有这个任意限制?可以以某种方式配置它吗?

EDIT1:

可以与表一起使用

<script>
    position = document.getElementsByClassName("title")[0].style.position;
    result = position === 'sticky';
    console.log(result);
</script>

规范不对吗?

1 个答案:

答案 0 :(得分:0)

有1000个极限作为护栏。随着列表的增加,反序列化,将行更新和序列化到基础的rockdb存储的成本将变得过高。

完全同意,这应该是可配置的。您可以剪切自己的UDF,或将PR提交给ksql以使其可配置!

关于错误的第二个问题:“无法应用于表。”。这是因为GROUP BY中使用的源是TABLE,而不是STREAM。

不可能为每个可在TABLES上运行的STREAM源上运行的聚合函数创建变体。与流不同,表可以从中删除行。这意味着某些聚合函数将需要保留它们曾经看到的能够支持被删除的那些值之一的每个值的完整历史记录。这显然是不可能的。因此,某些聚合函数无法在表源上工作。

如果COLLECT_LIST是无限的,那么它就没有理由不能在表上工作,因为它具有所有值,但是由于它是有限的,它不知道是否删除了一个值一个被跟踪或被忽略。