问题标签 [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.
r - 数据表操作的非等连接
我想向数据表 1 添加列,这些列是对数据表 2 的操作,通过变量连接,并且数据表 2 中的日期是 <= 数据表 1 中的日期。我正在寻找一种解决方案t 计算成本太高(我有大约 20k 行)。
数据表 1 - 我有一个提案、他们的所有者和他们的编辑日期的数据集:
数据表 2 - 我有一份提案日志以及它们的获胜或失败日期(outcome == 1或0):
我想添加几列,这些列proposal_df是对proposal_log、 加入owner和 where的操作proposal_log$editDate <= proposal_df$editDate:
countWon- 提案数量outcome == 1countLost- 提案数量outcome == 0wonValueMean-totalAtEdit提案的平均值,其中outcome == 1pctWon- 提案的百分比outcome == 1
输出如下所示:
谢谢!
sql - 查询 Hive 中左外连接的非 Equi 连接
我正在尝试使用非 equi 连接条件在两个表之间进行左外连接,而 hive 不支持它。在 where 子句中添加条件会导致数据丢失。请让我知道是否有人有解决方案。以下是示例代码片段
以下是 hive 中非 equi 连接的错误:FAILED: SemanticException [Error 10017]: Line 9:4 JOIN 'START_DATE' 中遇到的左右别名
join - 为什么 Hive 不支持 non-equi join?
发现Hive不支持non-equi join,是不是因为non-equi join很难转Map reduce?
r - data.table 连接中的列名标签
我正在尝试使用非 equi 连接将 data.table x 连接到 z。表 x 包含两列 X1 和 X2,它们用作与 z 中的列 Z1 连接的范围。当前代码成功地进行了非 equi 连接,但是某些列被删除或重命名。我想返回提供的“理想”data.table,而不是我目前拥有的那个,我必须重命名列或进一步连接数据以获得提供的“理想”数据。
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是加起来的结果224544,656565两者都与同一篇文章有关
我想我正在寻找的是相当于 SQL 语法,如:
sql - 或者 Hive 中的 JOIN 错误当前不支持
我在 Hive 中运行一个查询,如下所示,并且在左连接中有 OR 条件。当我运行选择时,它会抛出一些错误消息。
OR 目前在 JOIN 中不受支持(了解 OR 仅适用于 Hive 中的 equi 连接)
在 JOIN 'cre_timestamp' 中遇到左右别名
我们怎样才能克服这个问题?
#For 1:我可以尝试编写查询的一种方法是,使用 UNION 将查询复制 3 次,用于 OR 条件。
#对于2:
如果我切
并将其放入where底部的子句中,它可以正常工作。(想了解为什么它在连接中不起作用)
总的来说,寻找一种更好的方法,它不会影响运行时和更优化的查询,就像我将它更改为使用 UNION 一样,它必须处理相同的查询 3 次,这会影响查询。
感谢您花时间调查此事。
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)
对不起我的格式
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 连接?
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 慢一点。
以前,我有这样的东西作为基础,但它需要很多后续步骤,并且并不总是给我想要的结果,但我会为后代添加它。
新的真实数据
使用来自真实数据的示例进行编辑:
这可以处理连接的情况,但会变得太大太快。数据量小的时候速度很快。
hive - 带有子查询的 Hive Where 子句 - 仅允许作为顶级连词的子查询表达式
我需要从 tableA 中获取大于存储在另一个 tmp_table 中的 cdc_date 的所有记录
tmp_table 只有一列 cdc_date 和只有一条记录。
tableA 有更多的 500 万条记录。
我的 Hive 查询
我收到以下错误
任何人都可以建议如何激活它。