clickhouse_driver.errors.ServerException:代码:62.DB::Exception:语法错误

Posted

技术标签:

【中文标题】clickhouse_driver.errors.ServerException:代码:62.DB::Exception:语法错误【英文标题】:clickhouse_driver.errors.ServerException: Code: 62.DB::Exception: Syntax error 【发布时间】:2020-10-13 20:02:13 【问题描述】:

我的函数有错误。

self.client是click house驱动---from clickhouse_driver import Client

我用 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'
        )

并收到错误。 我该如何解决这个错误?

文件“/home/alex/.local/lib/python3.6/site-packages/clickhouse_driver/client.py”,第 118 行,在 receive_packet 引发数据包异常 clickhouse_driver.errors.ServerException:代码:62。 DB::Exception: 语法错误:在位置 137 ('GROUP') 失败:GROUP BY 键。应为以下之一:HOUR、DD、SQL_TSI_QUARTER、S、SQL_TSI_YEAR、YEAR、LIKE,

【问题讨论】:

【参考方案1】:

错误信息试图告诉你。

这里:

and arrivalTime > now() - INTERVAL self.expiration_interval

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

SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR

也许你想要:

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

【讨论】:

以上是关于clickhouse_driver.errors.ServerException:代码:62.DB::Exception:语法错误的主要内容,如果未能解决你的问题,请参考以下文章