“if”子句不适用于 clickhouse 中的插入查询

Posted

技术标签:

【中文标题】“if”子句不适用于 clickhouse 中的插入查询【英文标题】:"if" clause doesn't work into insert query in clickhouse 【发布时间】:2021-07-30 10:23:51 【问题描述】:

我正在尝试从 csv 输入中插入数据。

行示例:

1627635473988516097,1627635479990773393,6002,3,0,1152,0,1627635479:0;,1,1,1,3,2,**46.216.7.214,128.140.255.27**,60561,500,0,0,0,0,0,0,191,0,0,375001000099,0,0,0000:0000:0000:0000:0000:0000:0000:0000,0,0000:0000:0000:0000:0000:0000:0000:0000,0,0,0,0,0,0,0,116,0,0,['encrypted'],0,0,0,1545614606,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,206,0,0,0,0,0

这是 INSERT 查询的一部分:

insert into migration.gate_clickstream_indexed (datetime, login, publicSrc, publicSrcV6, publicSrcPort, dst, dstV6, dstPort, bytesOut, bytesIn, application) 
select toDateTime(truncate(start_time/1E9)), toString(msisdn),a**ssumeNotNull(if (ip_src LIKE '%.%', IPv4StringToNum(ip_src), NULL)), assumeNotNull(if (ip_src LIKE '%:%', IPv6StringToNum(ip_src), NULL))**, port_src, assumeNotNull(if (ip_dst LIKE '%.%', IPv4StringToNum(ip_dst), NULL)), assumeNotNull(if (ip_dst LIKE '%:%', IPv6StringToNum(ip_dst), NULL)), port_dst, bytes_ul, bytes_dl, toString(application) 
from input

但尽管有“if”子句,ch 插入到 publicSrcV6 格式的 IPv4:

375001000099        0.0.0.0 ::  0   46.216.7.214    **::ffff:46.216.7.214** 60561   2021-07-30 11:57:53         128.140.255.27  **::ffff:128.140.255.27**   500 1152    0   0   2021-07-30

我不明白为什么?

【问题讨论】:

【参考方案1】:

我发现只有在插入 IPv4 的情况下才会出现此问题。 我试过在“else”部分使用这个 IPv4StringToNum('0.0.0.0') 而不是 NULL。 它有效。

【讨论】:

以上是关于“if”子句不适用于 clickhouse 中的插入查询的主要内容,如果未能解决你的问题,请参考以下文章

EXISTS 不适用于 WITH 子句中的子查询

WHERE 子句中的优化似乎不适用于 UNION

ADD_DATE() 不适用于 mysql 中的 where 子句

大数据ClickHouse进阶(十五):ClickHouse的LIMIT BY和 LIMIT子句

Connect By 子句适用于 11g,但不适用于 Oracle 8i:“ORA-01436:用户数据中的 CONNECT BY 循环”

MySQL - WHERE 子句中的 NOT IN 查询具有相同的结构,适用于第一个表但不适用于第二个表