BigQuery/SQL中的一维土方机距离

BigQuery/SQL中的一维土方机距离,sql,google-bigquery,distance,probability-distribution,Sql,Google Bigquery,Distance,Probability Distribution,设p和Q是整数上的两个有限概率分布,支持度介于0和某个大整数N之间。p和Q之间的一维是将p转换为Q所需的最小成本,考虑到将与整数N相关的概率r移动到另一个整数m需要花费r*| N-m | 有一个简单的计算方法。在伪代码中: previous = 0 sum = 0 for i from 0 to N: previous = P(i) - Q(i) + previous sum = sum + abs(previous) // abs = absolute valu

设p和Q是整数上的两个有限概率分布,支持度介于0和某个大整数N之间。p和Q之间的一维是将p转换为Q所需的最小成本,考虑到将与整数N相关的概率r移动到另一个整数m需要花费r*| N-m |

有一个简单的计算方法。在伪代码中:

previous = 0
sum = 0
for i from 0 to N:
    previous = P(i) - Q(i) + previous
    sum = sum + abs(previous)         // abs = absolute value
return sum
现在,假设有两个表,每个表包含一个概率分布。n列包含整数,p列包含相应的概率。这些表是正确的所有概率都在0和1之间,它们的总和是我想在BigQuery标准SQL中计算这两个表之间的土方机距离

可能吗?我觉得需要使用分析函数,但我对它们没有太多经验,所以我不知道如何实现。 如果N的最大整数非常大,而我的表却不是,那该怎么办?我们可以调整解决方案以避免对每个整数i进行计算吗?
希望我完全理解你的问题。这似乎就是你想要的:

WITH Aggr AS (
  SELECT rp.n AS n, SUM(rp.p - rq.p)
  OVER(ORDER BY rp.n ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS emd
  FROM P rp
  LEFT JOIN Q rq
  ON rp.n = rq.n
) SELECT SUM(ABS(a.emd)) AS total_emd
FROM Aggr a;

问题2,请注意,我们只扫描表中的实际内容,而不考虑N,假设p中的每个N与Q中的N一一匹配。

我修改了Michael的答案以解决其问题,下面是我得出的解决方案。假设整数存储在列i中,概率存储在列p中。首先我连接两个表,然后使用窗口计算所有I的EMDi,然后求所有绝对值的和

WITH
joined_table AS (
  SELECT
    IFNULL(table1.i, table2.i) AS i,
    IFNULL(table1.p, 0) AS p,
    IFNULL(table2.p, 0) AS q,
  FROM table1
  OUTER JOIN table2
  ON table1.i = table2.i
),
aggr AS (
  SELECT
    (SUM(p-q) OVER win) * (i - (LAG(i,1) OVER win)) AS emd
  FROM joined_table
  WINDOW win AS (
    ORDER BY i
    ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
  )
)
SELECT SUM(ABS(emd)) AS total_emd
FROM aggr

我认为这有几个问题:1。这是一个左连接,所以如果P缺少一些隐式等于零的行,这可能不起作用?2.计算似乎并不依赖于n的值,这是可疑的,地球移动器的距离取决于n值之间的距离。因此,只有在表中表示了0或n之间的所有可能值时,它才起作用。感谢您的解决方案。如果数组的长度不同,你有什么想法吗?已经有一段时间了,但我认为解决方案应该按原样工作?初始连接并不依赖于两个数组长度相同的假设。也许我实现错了。我有两组没有匹配的“I”的值,因此为了匹配这些值,我为这两组值创建了一个行号,如下所示:选择行号overORDER BY s1.scored\u usage作为no,s1.scored_usage from scores s1 S2在执行外部联接而不是使用行号的联接_表表达式上方使用解决方案有什么问题?我没有“I”仅表1.p表2.p