我正在运行一个查询,使用prestodb和awss3(以及元数据的粘合)将数据从源表插入到目标表。
查询如下所示(尽管它有更多的案例):
INSERT INTO my_table
SELECT other_field AS other_field ,
(CASE
WHEN regexp_like(LOWER(user_agent) , LOWER('bot')) THEN '1'
WHEN regexp_like(LOWER(user_agent) , LOWER('spider')) THEN '2'
WHEN regexp_like(LOWER(user_agent) , LOWER('crawler')) THEN '3'
WHEN regexp_like(LOWER(user_agent) , LOWER('Google-AdSense-Auto')) THEN '4'
WHEN regexp_like(LOWER(user_agent) , LOWER('Google-Adwords-DisplayAds-WebRender')) THEN '5'
ELSE NULL
END) AS bot_type
FROM source_table;
有没有更有效的方法?我找不到这方面的任何资料。
2条答案
按热度按时间epggiuax1#
可以使用不区分大小写的regexp(add
(?i)
)把它扔掉LOWER()
:虽然不区分大小写的regexp看起来更简单,但由于并行执行,它对提高性能没有多大帮助。
acruukt92#
由@vamsi prabhala建议
我将它插入到一个表中,这样我就可以加入到查询中,并在另一个sql中去掉大小写。由于我每天执行一次基于示例的sql,另一次执行100次,这是一个很大的改进。