繁体   English   中英

SQL:自联接后列值不一致

[英]SQL: Inconsistent column values after self-join

我正在使用 BigQuery 来计算向量的成对距离。 每行都有一个权重向量。

这是查询。 第一部分只是生成随机数据。 重要的部分是最后的SELECT语句,我通过自联接将每个文档与其他文档进行比较。

WITH input_data AS (
  SELECT
    document_id
  FROM UNNEST(["doc1", "doc2"]) AS document_id
),
exploded AS (
  SELECT
    document_id,
    STRUCT(dimension_id, rand() AS weight) AS weight
  FROM
    input_data CROSS JOIN UNNEST(GENERATE_ARRAY(1, 3)) AS dimension_id
),
rows_with_weights AS (
  SELECT 
    document_id,
    ARRAY_AGG(weight) as vector
  FROM 
    exploded 
  GROUP BY 
    document_id
),
SELECT 
  l.document_id as l_doc_id,
  r.document_id as r_doc_id,
  l.vector as l_vectors,
  r.vector as r_vectors
FROM 
  rows_with_weights AS l 
CROSS JOIN rows_with_weights AS r WHERE l.document_id <= r.document_id

你会看到我的每个文件还与其自身进行比较,这里的地方意想不到的事情发生:当文档被与自己相比,值l_vector是从那些不同r_vector 这是上述查询的输出:

在此处输入图片说明

这令人费解。 我希望这两个向量对于同一个文档是相同的。 这里发生了什么?

这里发生了什么?

这正如预期的那样!

BigQuery 不会实现 CTE 的结果。 如果在查询中的多个位置引用了 CTE,则对每个引用执行一次 CTE。 这意味着当你做 self join 时,你实际上连接了两个不同权重的表。 于是结果

我建议改用临时表,这样随机性就会实现一次,然后你就会得到预期的结果

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM