问题标签 [non-equi-join]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
53 浏览

r - 数据表操作的非等连接

我想向数据表 1 添加列,这些列是对数据表 2 的操作,通过变量连接,并且数据表 2 中的日期是 <= 数据表 1 中的日期。我正在寻找一种解决方案t 计算成本太高(我有大约 20k 行)。

数据表 1 - 我有一个提案、他们的所有者和他们的编辑日期的数据集:

数据表 2 - 我有一份提案日志以及它们的获胜或失败日期(outcome == 10):

我想添加几列,这些列proposal_df是对proposal_log、 加入owner和 where的操作proposal_log$editDate <= proposal_df$editDate

  • countWon- 提案数量outcome == 1
  • countLost- 提案数量outcome == 0
  • wonValueMean-totalAtEdit提案的平均值,其中outcome == 1
  • pctWon- 提案的百分比outcome == 1

输出如下所示:

谢谢!

0 投票
1 回答
114 浏览

sql - 查询 Hive 中左外连接的非 Equi 连接

我正在尝试使用非 equi 连接条件在两个表之间进行左外连接,而 hive 不支持它。在 where 子句中添加条件会导致数据丢失。请让我知道是否有人有解决方案。以下是示例代码片段

以下是 hive 中非 equi 连接的错误:FAILED: SemanticException [Error 10017]: Line 9:4 JOIN 'START_DATE' 中遇到的左右别名

0 投票
1 回答
179 浏览

join - 为什么 Hive 不支持 non-equi join?

发现Hive不支持non-equi join,是不是因为non-equi join很难转Map reduce?

0 投票
3 回答
78 浏览

r - data.table 连接中的列名标签

我正在尝试使用非 equi 连接将 data.table x 连接到 z。表 x 包含两列 X1 和 X2,它们用作与 z 中的列 Z1 连接的范围。当前代码成功地进行了非 equi 连接,但是某些列被删除或重命名。我想返回提供的“理想”data.table,而不是我目前拥有的那个,我必须重命名列或进一步连接数据以获得提供的“理想”数据。

0 投票
1 回答
69 浏览

r - 如何在 R 中的任何匹配子句上 LEFT JOIN?

你能帮我解决这个问题吗:

我有一个数据框 ( df1),其中包含网站 CMS 中发布的所有文章的索引。有一列当前URLURL 和一列原始 URL,以防它们在发布后被更改(列名称Origin):

网址 起源 文章编号 作者 类别 成本
https://example.com/article1 https://example.com/article 001 作者姓名 政治 120 美元
https://example.com/article2 https://example.com/article2 002 作者姓名 金融 68 美元

接下来,我有一个巨大的数据框 ( df2),其中包含一段时间内的 Web 分析导出。它有一个日期,只有 1 列 URL 和浏览量。

浏览量日期 网址 浏览量
2019-01-01 https://example.com/article 224544
2019-01-01 https://example.com/article1 656565

我如何离开加入第一个数据帧但匹配URL= URLOR Origin=URL

所以最终结果将如下所示:

浏览量日期 浏览量 文章编号 作者 类别
2019-01-01 881109 001 作者姓名 政治

881109是加起来的结果224544656565两者都与同一篇文章有​​关

我想我正在寻找的是相当于 SQL 语法,如:

0 投票
1 回答
1058 浏览

sql - 或者 Hive 中的 JOIN 错误当前不支持

我在 Hive 中运行一个查询,如下所示,并且在左连接中有 OR 条件。当我运行选择时,它会抛出一些错误消息。

  1. OR 目前在 JOIN 中不受支持(了解 OR 仅适用于 Hive 中的 equi 连接)

  2. 在 JOIN 'cre_timestamp' 中遇到左右别名

我们怎样才能克服这个问题?

#For 1:我可以尝试编写查询的一种方法是,使用 UNION 将查询复制 3 次,用于 OR 条件。

#对于2:

如果我切

并将其放入where底部的子句中,它可以正常工作。(想了解为什么它在连接中不起作用)

总的来说,寻找一种更好的方法,它不会影响运行时和更优化的查询,就像我将它更改为使用 UNION 一样,它必须处理相同的查询 3 次,这会影响查询。

感谢您花时间调查此事。

0 投票
0 回答
15 浏览

r - 使用非等连接来定义一个数据帧中的一组数据,这些数据与 R 中的另一个数据帧在一定范围内

我是 R 新手,我有一个非常艰巨的任务想要完成。

我有两组数据框。DF1 由 810 个观测值和 4 个变量组成,DF2 由 1707 个观测值和 51 个变量组成。下面是一些例子

DF1:

Chr POS Range_Plus_10 Range_Minus_10

2 47403201 47403211 47403191

2 47403202 47403212 47403192

2 47403210 47403220 47403200

2 47403210 47403220 47403200

2 47403210 47403220 47403200

2 47403211 47403221 47403201

DF2:

染色体位置
2 47630258
2 47630263
2 47630263
2 47630269
2 47630271
2 47630275
注意:并非所有变量都显示为 df2,我对其他变量不感兴趣,但最好将其他变量保留在输出数据中。

我想要的是过滤 df2 中的所有位置,以查看这些位置是否在 df1 的范围内(在每一行的 Range_Plus_10 和 Range_Minus_10 内)。例如,df2 中的第一个位置是 47630258,我想知道这个 47630258 是否位于任何行的 df1 中的 range_plus_10 和 Range_Minus_10 中的任何一个内,所以我希望 R 给我一个输出列,其中包含 df2 中所有可能的位置可以对应到 df1 范围内的每一行。

我尝试使用非 equi 连接,但我不断收到一些错误,不知道哪里出错了。有人可以提供一个代码来获取我想要的数据,其次告诉我为什么会出现我的错误。

这是我使用的脚本:

result <- df2[df1, . ("Chromosome", "Position"), on = .(Position < Range_Plus_10, Position >Range_Minus_10), by = .EACHI]

但我不断收到一条错误消息:[.data.frame(df2, df1, .("Chr", "Position", ...), on = .(Position < : 未使用的参数 (on = .(Position < Range_Plus_10, Position > Range_Minus_10), by = .EACHI)

对不起我的格式

0 投票
1 回答
153 浏览

r - R:具有合并功能的不等连接

我正在使用data.table并且我想做一个非 equi 左连接/合并。

我有一张汽车价格表和另一张表来确定每辆车所属的汽车类别:

我使用非 equi 连接来合并这两个表。但是 x[y]-join 语法data.table删除了重复项。

请注意,值为 190000 的汽车应该在data_priceclass表中的两行上得到匹配,但是由于 x[y] 删除了重复项,因此我在输出中看不到这一点。通常,当我加入时,我总是使用merge函数而不是 x[y],因为我在使用 x[y] 时会失去控制。

但以下不适用于非 equi 连接:

任何提示如何使用不删除重复项的 data.table 进行非 equi 连接?

0 投票
1 回答
133 浏览

r - 跨多个相关条件的数据表中的高效索引/加入停止检测算法

编辑:此处提供真实数据集

感谢

Wang, Rui, Fanglin Chen, Zhenyu Chen, Tianxing Li, Gabriella Harari, Stefanie Tignor, Xia Zhou, Dror Ben-Zeev, and Andrew T. Campbell。“StudentLife:使用智能手机评估大学生的心理健康、学习成绩和行为趋势。” 在 ACM 普适计算会议论文集上。2014 年。


解释

我正在进行一项模拟研究,其中我根据相对简单的标准对位置数据(纬度/经度坐标)执行停止检测。

如果在 A 之后存在时间戳至少为 180 秒的另一个位置 (B),并且如果 A 和 B 之间的所有位置与 A 的距离小于或等于 80 米,则位置 (A) 是一个停靠点。

我试图减少数据,使其仍然有效,但不需要实际坐标。

id 1不是停止,因为时间差 > 180 ( id 5) 的第一个位置在纬度中的距离为 90。

id 2是一个停靠点,因为其自身与第一个位置之间的时间差 > 180 ( id 6) 的所有位置的距离都小于 80 (0, 30, 40, 40, 50)。

id 6不是一个停止,因为即使id 10是 > 180 的时间差异,id 7它之间的距离大于 80。

id 8不是停止,因为之后至少 180 秒后没有位置。

最终,我需要能够贪婪地分配“stop id”,例如,如果我发现id 2有满足距离要求的点直到id 7,id 为 2:7 的位置的 stop id 为 2。

矩阵和for循环

如果我运行这个:

它给了> NA 7 7 NA NA NA NA NA NA NA我可以在 for 循环中使用的阈值来适当地设置停止 ID。

在这一点上,这是我能够保证准确性的唯一方法。我尝试过的所有其他事情我都认为是正确的,只是发现它的行为与这种情况不同。但正如您可能想象的那样,这是非常低效的,并且在我的模拟研究中运行了 116,000 次。

我的假设是处理此问题的最佳方法是在 data.table 中使用非 equi 连接。

当数据集中的行数使数组过于占用内存时,我目前正在运行的另一个实现更好。我不会将其翻译为处理数据,但它就在这里,以防它给任何人提供想法。我把它卡在了一个while循环中,所以当它已经为多个点分配了一个stop_id时,它可以跳过一些迭代。如果点 1:7 都属于 stop_id 1,则它们本身不被视为候选停靠点,我们只需在点 8 处再次进行测试。它在技术上返回不同的解决方案,但“足够接近”的停靠点稍后会合并这个过程,所以最终的结果不太可能相差太大。

For循环,没有矩阵

quickStopFinder 或多或少是我一开始分享的实现,它是内存密集型且速度慢,但比 stopFinder 慢一点。

以前,我有这样的东西作为基础,但它需要很多后续步骤,并且并不总是给我想要的结果,但我会为后代添加它。


新的真实数据

使用来自真实数据的示例进行编辑:

这可以处理连接的情况,但会变得太大太快。数据量小的时候速度很快。

0 投票
2 回答
87 浏览

hive - 带有子查询的 Hive Where 子句 - 仅允许作为顶级连词的子查询表达式

我需要从 tableA 中获取大于存储在另一个 tmp_table 中的 cdc_date 的所有记录

tmp_table 只有一列 cdc_date 和只有一条记录。

tableA 有更多的 500 万条记录。

我的 Hive 查询

我收到以下错误

任何人都可以建议如何激活它。