hadoop - 在 Hive 中使用 LIKE 或 RLIKE 连接表

标签 hadoop join hive hiveql rlike

我正在尝试(INNER)使用 RLIKE 连接 Hive 中的两个表。

select a.col_x, b.col_y, count(*) as n
from tableA a
join tableB b
ON a.col_x RLIKE concat('^', b.col_z)
group by a.col_x, b.col_y

(表A约100M条记录,表B约1k条记录)

此查询将不起作用,因为 Hive 仅支持相等连接。

我将不等式移至 where 子句(引用:Error in Hive Query while joining tables)。

select a.col_x, b.col_y, count(*) as n
from tableA a , tableB b
WHERE a.col_x RLIKE concat('^', b.col_z)
group by a.col_x, b.col_y

第二种方法不返回任何错误。但是,它运行得非常非常慢。运行大约 1 小时但仍然无法获得输出(通常,当我使用 equality join ON a.col_x RLIKE b.col_z 时,它只需要不到 5 分钟)。

欢迎任何解决方案(使用 Hive 或其他 hadoop 应用程序)。

最佳答案

是的,“Hive 不支持不是相等条件的连接条件,因为很难将此类条件表达为 map/reduce 作业。”我认为这意味着等连接和自然连接(就像你的第二个例子)。

我会考虑在 WHERE 子句中使用 RLIKE 条件执行 CROSS JOIN。根据数据的大小,您可能需要考虑按分区执行查询。

在 Pig 中,你也可以做一个交叉操作,然后根据你的条件进行过滤,类似于 this post 中所做的。 .

关于hadoop - 在 Hive 中使用 LIKE 或 RLIKE 连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39615744/

相关文章:

mysql - 让多个联接填充查询中的单个列。

java - 从Hive导出数据时如何转换某些列?

hadoop - 如何使用hadoop解决以下用例?

hadoop - 如何在配置单元查询中编写 case 和 group by

hadoop - Hadoop DistributedCache导致IOException

hadoop - hadoop集群数据节点无法连接:所有具有相同主机名的节点可以吗?

sql - 如何正确看待?

hadoop - 格式化名称节点,节点丢失

python - 使用带有 Kerberos 身份验证的 impyla 客户端连接到 Impala

mysql - 获取MySql中连接查询的所有字段的列名