我有下表,第一个(Range
)包括值范围和其他列:
row | From | To | Country ....
-----|--------|---------|---------
1 | 1200 | 1500 |
2 | 2200 | 2700 |
3 | 1700 | 1900 |
4 | 2100 | 2150 |
...
该From
和To
是bigint
和是互斥的。该Range
表包括180万条记录。附加表(Values
)包含270万条记录,如下所示:
row | Value | More columns....
--------|--------|----------------
1 | 1777 |
2 | 2122 |
3 | 1832 |
4 | 1340 |
...
我想创建一个表,如下所示:
row | Value | From | To | More columns....
--------|--------|--------|-------|---
1 | 1777 | 1700 | 1900 |
2 | 2122 | 2100 | 2150 |
3 | 1832 | 1700 | 1900 |
4 | 1340 | 1200 | 1500 |
...
我用于BETWEEN
上述任务,但查询永无止境:
VALUES.VALUE between RANGE.FROM and RANGE.TO
我需要在表分区或Impala中进行更改吗?
以下解决方案的主要思想是用等式联接替换theta联接(非等式联接),这将导致良好的分布+高效的局部联接算法。
范围(无穷大,无穷大)被分割为一部分n
长度。
范围表中的每个范围都与其相交的部分相关联。
例如,给定n =
1000,范围[1652,3701]
将与section关联[1000,2000)
,[2000,3000)
并且[3000,4000)
(并且将具有3条记录,每个section
1条)
1652 3701
| |
-------------------
-------------------------------------------------------
| | | | | |
0 1000 2000 3000 4000 5000
以相同的方式,将值表中的值与包含该值的范围相关联,例如,2093
将与range关联[2000,3000)
。
2个表之间的联接将在表示该节的值上进行,例如[1652,3701]
,2093
并且将在该节上进行联接[2000,3000)
create table val_range (id int,from_val bigint,to_val bigint);
insert into val_range values
(1,1200,1500)
,(2,2200,2700)
,(3,1700,1900)
,(4,2100,2150)
;
create table val (id int,val bigint);
insert into val values
(1,1777)
,(2,2122)
,(3,1832)
,(4,1340)
;
set n=1000;
select v.id
,v.val
,r.from_val
,r.to_val
from (select r.*
,floor(from_val/${hiveconf:n}) + pe.i as match_val
from val_range r
lateral view posexplode
(
split
(
space
(
cast
(
floor(to_val/${hiveconf:n})
- floor(from_val/${hiveconf:n})
as int
)
)
,' '
)
) pe as i,x
) r
join val v
on floor(v.val/${hiveconf:n}) =
r.match_val
where v.val between r.from_val and r.to_val
order by v.id
;
+------+-------+------------+----------+
| v.id | v.val | r.from_val | r.to_val |
+------+-------+------------+----------+
| 1 | 1777 | 1700 | 1900 |
| 2 | 2122 | 2100 | 2150 |
| 3 | 1832 | 1700 | 1900 |
| 4 | 1340 | 1200 | 1500 |
+------+-------+------------+----------+
我正在与一个带有日期范围的雪花数据库左联接查询作斗争。请在下面找到样表内容 我的雪花SQL查询:选择o.ORDER_DATE,大小写当ORDER_DATE为NULL时,则“no”否则“yes”结束为ORDER_PLACED,C.customer_id,C.name FROM CUSTOMER C左联接C.customer_id=o.customer_id和o.ORDER_DATE>=DATEADD
问题内容: 目前,我正在尝试实现OSGI版本范围(针对另一个主题,但是我喜欢它们定义版本范围的方式)。但是,我很难在OSGI中找到版本范围的特定定义。 不幸的是,OSGI API确实包含Version类,但不包含VersionRange类。似乎所有OSGI容器都提出了自己的(某种程度上无法找到)版本范围定义的解释。 因此,我有几个问题: 如果使用,此映射是否会映射到Version> = 1.4.0
问题内容: 假设有一个与此问题类似的情况。我想得到以下结果: 我可以使用选定的答案作为解决方案: 我如何确保即使在该范围内没有任何结果,也将显示30-39的分数范围? 问题答案: 尝试以下查询(也在SQL Fiddle上): 编辑: 您可以通过将参数更改为轻松调整范围。可以使用以下构造来确保始终覆盖您的分数: 对于CTE。
本文向大家介绍Elm按范围创建列表,包括了Elm按范围创建列表的使用技巧和注意事项,需要的朋友参考一下 示例 0.18.0 在0.18.0之前,您可以创建如下范围: 0.18.0 在0.18.0中,[1..5]语法已删除。 用此语法创建的范围始终是包含范围的,并且步长始终是1。
问题内容: 我有一个n维数组,如下所示: 在此数组中,元素表示低值和高值。例如:指 我需要使用上面给出的范围生成所有值的组合。例如我想要 我已经尝试了以下方法来获得想要的东西: 笛卡尔函数取自使用numpy来构建两个数组的所有组合的数组 我需要做 几百万遍 。 我的问题:是否有 更好/有效的 方法来做到这一点? 问题答案: 我认为您正在寻找的是。不幸的是,这会以与所需格式不同的格式返回数组,因此您
问题内容: 我有两个表,我们称它们为表A和B:- 表A看起来像这样: 表2(B)看起来像这样: 我需要一个像这样的表作为输出-它应该基本上包含表A的所有行+表B的状态 另外,最好通过简单的SQL语句,而不是过程。 提前致谢。如有任何澄清,请发表评论 因杜鲁 更新 当表B中的两行状态更改但在同一日期时,联接中的值不一致。 举个例子: 我有两个表,分别是A和B。它们是非常大的表,并且它们记录某些信息。