如何解决包含 presto Athena 中的 String 函数
我在雅典娜 (Athena) 与 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 个没有空值,其中 3 个只有空/空值。
我想知道包含特定单词的行的百分比。
例如,考虑单词 hello
。它存在于 4 行中,因此此类行的百分比为 4/10,即 40 %。
另一个例子:单词 morning
出现在 2 条消息中。所以这些行的百分比是 2/10,也就是 20%。
注意,我也在考虑分母计数中的 null
。
解决方法
SELECT SUM(greeting_message LIKE '%hello%') / COUNT(*) AS hello_percentage,SUM(greeting_message LIKE '%morning%') / COUNT(*) AS morning_percentage
FROM tablename
,
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) 和其他字符串匹配要求。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。