当前位置: 首页 > 面试题库 >

连接的组件

游高杰
2023-03-14
问题内容

我有一组数据是通过将相似的子项目匹配在一起,然后按“类别”将这些相似的项目分组而创建的。

现在,必须以使每个“ group_id”内的相关类别分组在一起的方式匹配结果类别。在下面的示例中,一个匹配项是A-> B-> C-> D-> E-> F->
G,这是通过逐行重复获得的。

我已经发布了当前答案,该答案适用于此简单数据集,但是由于实际数据集最多包含1M行,并且每个“
group_id”最多可能有60个类别,因此该查询会导致“后台处理空间不足”在实际数据上的错误。

请注意:

  • 由于公司的限制,我无法使用存储过程。
  • 我不能使用用户定义的函数(UDF)
  • 我不能使用用户定义类型(UDT)

正确答案将

  • 为Teradata或兼容而编写
  • 比我的答案更有效率
  • 尊重我上面提到的限制

问题答案:

您需要递归方法,但是WITH RECURSIVE会产生巨大的中间结果,因此 不再需要假脱机

对于类似的过程,我使用了以下方法(最初在存储过程中使用WHILE循环):

CREATE MULTISET VOLATILE TABLE vt_tmp, NO Log  AS
 (
  SELECT group_id, category_1, category_2, 
     -- assign a unique number to 
     Dense_Rank() Over (ORDER BY group_id, category_1) AS rnk

  -- remove when you source data is unique
  GROUP BY 1,2,3 -- same result as a DISTINCT, but processed before DENSE_RANK
  FROM match_detail 
 )
WITH DATA
PRIMARY INDEX (category_2)
ON COMMIT PRESERVE ROWS;

现在重复以下更新,直到0 rows processed

-- find matching categories and assign them a common number    
UPDATE vt_tmp FROM
 ( SELECT e2.group_id, e2.category_1, Min(e1.rnk) AS minrnk
   FROM vt_tmp e1 JOIN vt_tmp e2
   ON e1.category_2 = e2.category_2
   AND e1.rnk < e2.rnk
   GROUP BY e2.group_id, e2.category_1
 ) x
SET rnk = minrnk
WHERE 
  vt_tmp.group_id = x.group_id
AND vt_tmp.category_1 = x.category_1
;

要获得相关类别,您最终需要:

SELECT group_id, category_1 AS category, rnk AS related_categories
FROM vt_tmp
UNION
SELECT group_id, category_2, rnk 
FROM vt_tmp

为了与您的预期结果完全匹配,您需要添加一个DENSE_RANK

SELECT group_id, category, Dense_Rank() Over (PARTITION BY group_id ORDER BY related_categories)
FROM
 (
   SELECT group_id, category_1 AS category, rnk AS related_categories
   FROM vt_tmp
   UNION
   SELECT group_id, category_2, rnk 
   FROM vt_tmp
 ) AS dt


 类似资料:
  • 问题内容: 我正在为一个类编写一个函数: 我的图是: 其中键是节点,值是边。我的功能给了我这个连接的组件: 但是我将有两个不同的连接组件,例如: 我不明白我在哪里犯了错误。谁能帮我? 问题答案: 让我们简化图形表示: 这里,我们有一个函数返回一个字典,该字典的键是根,值是连接的组件: 让我们尝试一下: {8:[6、8、9],1:[0、1、2、3、4、5、7]}

  • 用法同WebSocket 服务 - 连接分组

  • imi 支持对 WebSocket 的连接(fd)进行逻辑分组,你可以方便地对用户进行分组消息推送。 所有的分组针对服务器,所以需要 imi 的服务器对象才可以调用下面这些方法,比如在WebSocketController中可以使用$this->server。 分组的使用 配置 服务器配置文件: [ 'beans' => [ // 分组 'ServerGro

  • 问题 你希望将两个数组连接到一起。 解决方案 在 JavaScript 中,有两个标准方法可以用来连接数组。 第一种是使用 JavaScript 的数组方法 concat(): array1 = [1, 2, 3] array2 = [4, 5, 6] array3 = array1.concat array2 # => [1, 2, 3, 4, 5, 6] 需要指出的是 array1 没有被运算

  • 所以基本上,我的问题与连接Numpy中的空数组相同,但对于TensorFlow。 主要的动机是以一种比使用if语句更漂亮的方式来处理初始数组。我当前的伪代码是: 这个技术是可行的,但是我想让它变得更漂亮,也许只使用。这是一个自定义层的代码,所以我对模型内部的代码感兴趣。 我想要一个更接近已接受响应的解决方案,将E初始化为:。 这个问题已经足够接近了,但当我将其初始化为: 我得到一个空的张量,结果只