首页 > 解决方案 > clickhouse_driver.errors.ServerException: Code: 62.DB::Exception: Syntax error

问题描述

I have an error in function.

self.client is click house driver --- from clickhouse_driver import Client

I called function with keys = "4"

def multi_get(self, keys: str) -> dict:
        if not self.initialized:
            self.make_table()
        keys_joined = "'" + "', '".join(keys) + "'"
        print(f"PPPP_1 {keys_joined}") # 4
        found = self.client.execute(
            f'SELECT max(arrivalTime), key, argMax(data, arrivalTime)'
            f' FROM {self.database}.cache'
            f' WHERE key in ({keys_joined})'
            f' and arrivalTime > now() - INTERVAL {self.expiration_interval}'
            ' GROUP BY key'
        )

And received error. How can I fix the error?

File "/home/alex/.local/lib/python3.6/site-packages/clickhouse_driver/client.py", line 118, in receive_packet raise packet.exception clickhouse_driver.errors.ServerException: Code: 62. DB::Exception: Syntax error: failed at position 137 ('GROUP'): GROUP BY key. Expected one of: HOUR, DD, SQL_TSI_QUARTER, S, SQL_TSI_YEAR, YEAR, LIKE,

标签: pythonpython-3.xdatetimeintervalsclickhouse

解决方案


错误信息试图告诉你。

这里:

and arrivalTime > now() - INTERVAL {self.expiration_interval}

这会生成无效的 SQL。INTERVAL需要一个单位,例如,INTERVAL 1 HOUR否则。支持的类型列表可以在文档中找到:

SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR

也许你想要:

and arrivalTime > now() - INTERVAL {self.expiration_interval} HOUR

推荐阅读