“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 中的插入查询的主要内容,如果未能解决你的问题,请参考以下文章
ADD_DATE() 不适用于 mysql 中的 where 子句
大数据ClickHouse进阶(十五):ClickHouse的LIMIT BY和 LIMIT子句
Connect By 子句适用于 11g,但不适用于 Oracle 8i:“ORA-01436:用户数据中的 CONNECT BY 循环”