【问题标题】:Why do native CQL functions like MIN() and MAX() not work in Amazon Keyspaces?为什么 MIN() 和 MAX() 等原生 CQL 函数在 Amazon Keyspaces 中不起作用?
【发布时间】:2021-11-05 04:03:31
【问题描述】:

我正在尝试使用 python 在我的 aws 键空间表中检索列的最大值。 我把它作为一个类中的方法

        query = SimpleStatement('select min (timestamp) from '  + keyspace + '.'+ table_name) #+ ' limit 2'
        read = self.session.execute(query)
        
        return read.current_rows

这是我的读取函数,我称之为:

access.read_latest_timestamp('gdapp_finance','policy_test').

我收到以下错误。有人可以帮助我吗?

InvalidRequest                            Traceback (most recent call last)
/tmp/ipykernel_223/2808458841.py in <module>
----> 1 access.read_latest_timestamp('gdapp_finance','policy_test')

/tmp/ipykernel_223/1193162473.py in read_latest_timestamp(self, keyspace, table_name)
     58         query = SimpleStatement('select min (timestamp) from '  + keyspace + '.'+ table_name , \
     59                                consistency_level=ConsistencyLevel.ONE) #+ ' limit 2'
---> 60         read = self.session.execute(query)
     61 
     62         return read.current_rows

~/.local/lib/python3.9/site-packages/cassandra/cluster.cpython-39-x86_64-linux-gnu.so in cassandra.cluster.Session.execute()

~/.local/lib/python3.9/site-packages/cassandra/cluster.cpython-39-x86_64-linux-gnu.so in cassandra.cluster.ResponseFuture.result()

InvalidRequest: Error from server: code=2200 [Invalid query] message="min is not yet supported." ```

【问题讨论】:

  • 请尝试MIN 而不是min
  • AWS Keyspaces 似乎不支持 min/max。
  • 感谢@Edison,但不幸的是这也不起作用。
  • @Aaron,根据我现在阅读的内容,是的,由 Erick 分享
  • 冒着提升我工作的公司的风险,我可以说 DataStax Astra DB 将是一个不错的选择。它可以在 AWS 中运行,具有强大的“免费层”,并支持 100% 的 CQL 关键字和函数。

标签: python cassandra datastax cqlsh amazon-keyspaces


【解决方案1】:

AWS Keyspaces 仅支持原生 CQL 函数的子集。不支持MIN()MAX() 等函数。

同样,也不支持用户定义的函数和聚合。

有关支持的 Cassandra 函数列表,请参阅Built-in functions in Amazon Keyspaces

有关受支持的 Cassandra API 列表,请参阅Supported Cassandra APIs, operations, and data types in Amazon Keyspaces。干杯!

【讨论】:

  • 感谢埃里克。的确,这令人大开眼界。下一个问题是我如何做这样的聚合函数,因为我在提供的链接中看不到它们,换句话说,有没有其他选择?谢谢
  • @airdmhund 我会说你最好的选择是使用 Cassandra 的实现,它实际上支持你需要使用的功能。
  • 同意@Aaron 所说的。没有其他选择,因为也不支持用户定义的函数 (UDF)。干杯!
【解决方案2】:

sum、min、max、avg 和 count 等函数不是确定性的,并且由于在同一个 C* 节点或大型分区或分散聚集多个行/分区上并置存储和计算而提供不可预测的性能。

我建议编写一个自定义 Lambda 并针对 Keyspaces 运行它,或者存储一个聚合行

(假设我的分区中的第一行/最后一行存储所有聚合,例如 {pk, _#sk, col1=min(col1), col2=max(col2),..., col3=count(col3) })

在一个分区内并根据计划更新它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 2019-08-25
    • 1970-01-01
    相关资源
    最近更新 更多