【问题标题】:Cross Apply Equivalent in Hive?在 Hive 中等效交叉应用?
【发布时间】:2018-10-26 21:35:37
【问题描述】:
我想在 AWS EMR Hive 中创建交叉应用的效果。我这里有一些在 SQL Server 2017 中运行的示例代码。
with r as (
select 1 as d
union all
select 2 as d
)
select * from r
cross apply (select 'f' as u) e;
如何在 EMR Hive 中运行与此等效的操作?
我查看了Lateral View 文档,但所有引用都爆炸了,而且我没有数组。
【问题讨论】:
标签:
hive
hiveql
amazon-emr
【解决方案1】:
在您的情况下,您可以使用CROSS JOIN 而不是CROSS APPLY。 F.e.:
SET hive.strict.checks.cartesian.product = false;
WITH r AS (
SELECT 1 AS d
UNION ALL
SELECT 2 AS d
)
SELECT *
FROM r
CROSS JOIN (SELECT 'f' AS u) e;
【解决方案2】:
我最终解决了这个问题,只需添加一个带有单个值的额外字段并将两个表连接在一起以产生相同的效果。
它最终看起来像:
with d as (
select column, 'AreYouKiddingMe' as k from table
), e as (
select column2, 'AreYouKiddingMe' as k from table2
)
select * from d inner join e on d.k = e.k