【问题标题】:contains function for String in presto Athena包含 presto Athena 中的字符串函数
【发布时间】:2021-06-16 17:49:12
【问题描述】:

我在雅典娜有一张ORC Serde 的桌子。该表包含一个名为greeting_message 的字符串列。它也可以包含 null 值。我想找出表格中有多少行有特定的文本作为模式。

假设我的示例数据如下所示:

|greeting_message |
|-----------------|
|hello world      |
|What's up        |
|                 |
|hello Sam        |
|                 |
|hello Ram        |
|good morning, hello |
|                 |
|the above row has null |
| Good morning Sir |

现在对于上表,如果我们看到总共有 10 行。其中 7 个没有 null 值,其中 3 个只有 null/空值。

我想知道有多少行包含特定单词。

例如,考虑单词hello。它存在于 4 行中,因此此类行的百分比为 4/10,即 40 %。

另一个例子:morning 这个词出现在 2 条消息中。因此,此类行的百分比为 2/10,即 20 %。

请注意,我正在考虑 null 也在分母的计数中。

【问题讨论】:

    标签: mysql contains amazon-athena presto string-function


    【解决方案1】:
    SELECT SUM(greeting_message LIKE '%hello%') / COUNT(*) AS hello_percentage, 
           SUM(greeting_message LIKE '%morning%') / COUNT(*) AS morning_percentage 
    FROM tablename
    

    【讨论】:

    • 谢谢,@Akina。如何选择中间有空格的消息。例如,包含Linear value= 的消息。它告诉我它有多余的输入。注意单词 linear 和 value 之间的空格。
    • @AjayKrChoudhary o_O greeting_message LIKE '%Linear value=%'...除百分比和下划线外的任何字符都被视为常规字符,包括空格。
    • 现在出现此错误:您的查询有以下错误: SYNTAX_ERROR:第 1:8 行:函数 sum 的意外参数(布尔值)。预期: sum(double) , sum(real) , sum(bigint) , sum(decimal(p,s))
    • @AjayKrChoudhary This is not MySQL 错误消息 - 请参阅您的编程语言的用户手册,在这种情况下我无法为您提供帮助。
    【解决方案2】:

    prestoDB(Amazon Athena 引擎)的语法与 MySQL 不同。以下示例创建一个临时表WITH greetings AS,然后从该表创建SELECT

    WITH greetings AS
      (SELECT 'hello world' as greeting_message UNION ALL
       SELECT 'Whats up' UNION ALL
       SELECT '' UNION ALL
       SELECT 'hello Sam' UNION ALL
       SELECT '' UNION ALL
       SELECT 'hello Ram' UNION ALL
       SELECT 'good morning, hello' UNION ALL
       SELECT '' UNION ALL
       SELECT 'the above row has null' UNION ALL
       SELECT 'Good morning Sir')
    
     SELECT count_if(regexp_like(greeting_message, '.*hello.*')) / cast(COUNT(1) as real) AS hello_percentage, 
           count_if(regexp_like(greeting_message, '.*morning.*')) / cast(COUNT(1) as real) AS morning_percentage 
    FROM greetings
    

    会给出以下结果

    hello_percentage morning_percentage
    0.4 0.2

    regex_like 函数可以支持许多正则表达式选项,包括空格 (\s) 和其他字符串匹配要求。

    【讨论】:

    • 谢谢,@Guy。这个答案很有帮助。
    猜你喜欢
    • 2021-02-02
    • 2021-05-07
    • 2017-12-17
    • 2022-06-21
    • 2012-04-23
    • 2010-11-12
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多