我試圖在檔案和其他論壇中找到答案,但未能理解。檔案:https : //clickhouse.com/docs/en/sql-reference/statements/select/join/ CH doc
我的表格類似于:堆疊溢位問題
我想在交易前獲得訂單價格(并回傳訂單 ts 和有關交易的資訊)。
使用下面的代碼,我得到以下錯誤:SQL Error [48]: ClickHouse exception, code: 48,DB::Exception: ASOF join over right table Nullable column is not implemented
我嘗試的是條件“IS NOT NULL”,但它沒有做任何事情。
代碼:
WITH
orders as(
SELECT order_timestamp, order_price, product_id
FROM order_table
WHERE
( order_timestamp >= toInt32(toDateTime64('2022-01-02 10:00:00.000', 3))*1000
AND order_timestamp <= toInt32(toDateTime64('2022-01-02 12:00:00.000', 3))*1000)
AND product_id = 'SPXFUT'
AND order_timestamp IS NOT NULL),
trades as (
SELECT
trade_timestamp,
price
FROM trades_table
WHERE
trade_timestamp >= toInt32(toDateTime64('2021-12-02 10:00:00.000', 3))*1000 AND trade_timestamp <= toInt32(toDateTime64('2021-12-02 12:00:00.000', 3))*1000
AND product_id = 'SPXFUT'
AND trade_timestamp IS NOT NULL),
results as(
SELECT
tt.product_id,
tt.trade_timestamp,
tt.price,
o.order_timestamp,
o.order_price
FROM trades tt
ASOF LEFT JOIN orders o
ON (tt.product_id = o.product_id ) AND (tt.trade_timestamp >= o.order_timestamp ))
SELECT *
FROM results
uj5u.com熱心網友回復:
當前的實作ASOF LEFT JOIN要求不等式中使用的右側列是不可為空的型別。由于型別來自表定義(并且您的 order_table 必須具有order_timestamplike的定義Nullable(Int64)),ClickHouse 將拒絕運行例外 like ClickHouse exception, code: 48,DB::Exception: ASOF join over right table Nullable column is not implemented。
作為一種解決方案,您可以在 ASOF LEFT JOIN 條件中o.order_timestamp使用assumeNotNull函式包裝:
ON (tt.product_id = o.product_id ) AND (tt.trade_timestamp >= assumeNotNull(o.order_timestamp) ))
但是您應該考慮assumeNotNull(檔案)的行為-它將為型別(默認值)提供非空值,這可能會在o.order_timestamp為空的情況下給出錯誤的結果(assumeNotNull特定于實作并且可能帶來更多問題-assumeNotNull 和朋友)。
另一種解決方案是使用ifNull缺失值并為缺失值提供合適的替代品,從而避免assumeNotNull帶來以下潛在問題:
ON (tt.product_id = o.product_id ) AND (tt.trade_timestamp >= ifNull(o.order_timestamp,0) ))
最后一個建議是將列資料型別更改為不可為空的:
ALTER TABLE order_table MODIFY COLUMN order_timestamp <TypeName>;
但這取決于您的用例 - 如果它是order_timestamp必須接受空值的要求,我建議采用第二種解決方案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/407040.html
標籤:
上一篇:如果它們具有從表1到表2的相同資料,則顯示資料的查詢
下一篇:使用連接進行更新查詢時出錯
