首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法用PrestoDB优化下面的插入?

有没有办法用PrestoDB优化下面的插入?
EN

Stack Overflow用户
提问于 2020-01-15 20:58:12
回答 2查看 106关注 0票数 1

我正在运行一个查询,使用PrestoDB和AWS S3 (以及元数据粘合)将数据从源表插入到目标表。

该查询如下所示(尽管它有更多的案例):

代码语言:javascript
复制
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;

有没有更有效的方法来做这件事?我找不到任何关于这方面的资源。

EN

回答 2

Stack Overflow用户

发布于 2020-01-16 03:26:06

您可以使用不区分大小写的正则表达式(添加(?i))并去掉LOWER()

代码语言:javascript
复制
WHEN regexp_like(user_agent,'(?i)bot') THEN '1' 
WHEN regexp_like(user_agent,'(?i)spider') THEN '2'
...

虽然不区分大小写的regexp看起来更简单,但由于并行执行,它对提高性能没有多大帮助。

票数 2
EN

Stack Overflow用户

发布于 2020-01-16 04:19:29

由@Vamsi Prabhala建议

代码语言:javascript
复制
WITH
user_agents AS
    (SELECT DISTINCT
            headers_user_agent
        FROM
            source_table
        WHERE
            YEAR = '2020')
bot_types AS
    (SELECT
      headers_user_agent,
      (CASE
        WHEN regexp_like(LOWER(headers_user_agent), LOWER('bot'))     THEN '2'
        WHEN regexp_like(LOWER(headers_user_agent), LOWER('spider'))  THEN '3'
        ELSE NULL)
        AS
          bot_type
        FROM
          user_agents)
SELECT
  *
FROM
  bot_types
WHERE
  bot_type IS NOT NULL

我将这段代码插入到一个表中,这样我就可以连接到查询中,并摆脱其他SQL中的CASE。由于我每天执行一次基于案例的SQL,而另一个每天执行100次,这是一个很大的改进。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59751945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档