如何将SELECT查询得到的MyUrl字段值用作FROM子句url函数的参数
该需求可以实现,你最初编写的查询语法无法直接运行,因为ClickHouse的url表函数默认无法直接引用同查询中其他表的字段作为入参,需要通过LATERAL JOIN语法实现逐行传入URL参数调用。
如果你使用的ClickHouse版本>=21.10,直接使用LATERAL JOIN即可实现需求,查询语句如下:
SELECT extractTextFromHTML(html) as text, html FROM default.myTable LATERAL JOIN url(MyUrl, RawBLOB, 'html String')
注意事项
- 执行该查询前需要保证你的ClickHouse服务拥有公网访问权限,否则会出现URL请求超时的报错
- 若需要跳过无法正常访问的URL(返回404、500等状态码),可以提前执行设置:
SET url_skip_not_found = 1; - 若你使用的ClickHouse版本低于21.10,不支持LATERAL JOIN,可以通过数组拼接的方式实现,适合URL数量较少的场景,写法如下:
SELECT extractTextFromHTML(html) as text, html FROM ( SELECT groupArray(MyUrl) as url_list FROM default.myTable ) ARRAY JOIN url_list as MyUrl LATERAL JOIN url(MyUrl, RawBLOB, 'html String')
执行后即可得到你预期的查询结果,text字段为HTML提取后的纯文本内容,html字段为对应URL返回的原始HTML源码。
内容的提问来源于stack exchange,提问作者lino
相关产品推荐
相关产品推荐

