Clickhouse ASOF JOIN 仅在一列上(例外:无法从 JOIN ON 部分获取 JOIN 键)

Eva*_*rte 5 sql clickhouse

当我尝试仅在一列上进行 ASOF JOIN 时,Clickhouse 会出现错误,但在添加相等 JOIN 子句时不会出现错误。为什么?

\n

示例表:

\n
orders:\n\xe2\x94\x8c\xe2\x94\x80time\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80price\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80id\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82    0 \xe2\x94\x82     4 \xe2\x94\x82  3 \xe2\x94\x82\n\xe2\x94\x82    1 \xe2\x94\x82     4 \xe2\x94\x82  3 \xe2\x94\x82\n\xe2\x94\x82    2 \xe2\x94\x82     4 \xe2\x94\x82  3 \xe2\x94\x82\n\xe2\x94\x82    3 \xe2\x94\x82     3 \xe2\x94\x82  3 \xe2\x94\x82\n\xe2\x94\x82    4 \xe2\x94\x82     2 \xe2\x94\x82  3 \xe2\x94\x82\n\xe2\x94\x82    5 \xe2\x94\x82     1 \xe2\x94\x82  3 \xe2\x94\x82\n\xe2\x94\x82    6 \xe2\x94\x82     1 \xe2\x94\x82  3 \xe2\x94\x82\n
Run Code Online (Sandbox Code Playgroud)\n
trades:\n\xe2\x94\x8c\xe2\x94\x80time\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80qty\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80id\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82    2 \xe2\x94\x82 100 \xe2\x94\x82  3 \xe2\x94\x82\n\xe2\x94\x82    4 \xe2\x94\x82 200 \xe2\x94\x82  3 \xe2\x94\x82\n\xe2\x94\x82    5 \xe2\x94\x82 205 \xe2\x94\x82  3 \xe2\x94\x82\n
Run Code Online (Sandbox Code Playgroud)\n

我们首先尝试仅在时间列上进行 ASOF JOIN。

\n
SELECT\n    time,\n    price,\n    qty\nFROM orders\nASOF INNER JOIN trades ON trades.time >= orders.time\nORDER BY time ASC\n\nReceived exception from server (version 21.7.5):\nCode: 403. DB::Exception: Received from localhost:9000. DB::Exception: Cannot get JOIN keys from JOIN ON section: trades.time >= time. \n
Run Code Online (Sandbox Code Playgroud)\n

现在让我们做同样的事情,除了我们还将 JOIN 到虚拟列 (id) 上。

\n
SELECT\n    time,\n    price,\n    qty\nFROM orders\nASOF INNER JOIN trades ON (trades.id = orders.id) AND (trades.time >= orders.time)\nORDER BY time ASC\n\n\xe2\x94\x8c\xe2\x94\x80time\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80price\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80qty\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82    0 \xe2\x94\x82     4 \xe2\x94\x82 100 \xe2\x94\x82\n\xe2\x94\x82    1 \xe2\x94\x82     4 \xe2\x94\x82 100 \xe2\x94\x82\n\xe2\x94\x82    2 \xe2\x94\x82     4 \xe2\x94\x82 100 \xe2\x94\x82\n\xe2\x94\x82    3 \xe2\x94\x82     3 \xe2\x94\x82 200 \xe2\x94\x82\n\xe2\x94\x82    4 \xe2\x94\x82     2 \xe2\x94\x82 200 \xe2\x94\x82\n\xe2\x94\x82    5 \xe2\x94\x82     1 \xe2\x94\x82 205 \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
Run Code Online (Sandbox Code Playgroud)\n