通过impala中的常用字母对记录进行有效分类

Posted

技术标签:

【中文标题】通过impala中的常用字母对记录进行有效分类【英文标题】:Efficient Classification of records by common letters in impala 【发布时间】:2017-02-25 19:44:26 【问题描述】:

我在 impala (TBL1) 中有一个表,其中包含不同的名称和不同数量的第一个常用字母。该表包含大约 3M 条记录。我想在表中添加一个新属性,其中每个常见的第一个字母都有一个类。它与DENSE_RANK 的工作方式相同,但首字母的数量是动态的。相同首字母的个数不得少于p=3 字母(p = 参数)。 以下是表格示例和所需结果:

|  ID   |   Attr1      | New_Attr1   | Some more attribute...
+-------+--------------+-------------+-----------------------
|  1    | ZXA-12       |  1          |
|  2    | YL3300       |  2          |
|  3    | ZXA-123      |  1          |
|  4    | YL3400       |  2          |
|  5    | YL3-aaa      |  2          |
|  6    | TSA 789      |  3          |

...

【问题讨论】:

【参考方案1】:

这是你想要的吗?

select t.*,
       dense_rank() over (order by strleft(attr1, 3)) as newcol
from . . .;

“3”是你的参数。

请注意:在您的示例中,您似乎已按字母倒序分配了新值。因此,您会希望 desc 用于 order by

【讨论】:

非常感谢!我想保持桌子的顺序。会因为or​​der by而改变吗? 字母顺序只是一个例子,不能是真实大小写。 @Avi 。 . .将order by id 添加到查询中。

以上是关于通过impala中的常用字母对记录进行有效分类的主要内容,如果未能解决你的问题,请参考以下文章

通过分区控制 Impala 中的数据局部性

如何优化 Impala 查询以将 LIKE 与 IN 结合(字面意思或有效)?

spark、hive、impala、hdfs的常用命令

从 impala 更新 vertica 中的巨大记录

ORDER BY 通过表 IMPALA 之间

使用 Impala 在 INSERT INTO (Parquet) TABLE 期间对分区键进行排序