Google bigquery 解决;相关子查询“;UDF中的错误

Google bigquery 解决;相关子查询“;UDF中的错误,google-bigquery,Google Bigquery,我试图使用一个UDF,但是它产生了一个相关的子查询错误,我希望有人能帮助我解决这个问题。错误: 不支持引用其他表的相关子查询,除非它们可以取消相关,例如通过将它们转换为有效联接。 我的UDF是这样的: CREATE FUNCTION getTestStatus(name STRING, version STRING) AS ( ARRAY(SELECT status FROM test_complete_dummy_data WHERE release_version = ver

我试图使用一个UDF,但是它产生了一个相关的子查询错误,我希望有人能帮助我解决这个问题。错误:

不支持引用其他表的相关子查询,除非它们可以取消相关,例如通过将它们转换为有效联接。

我的UDF是这样的:

CREATE FUNCTION getTestStatus(name STRING, version STRING) AS (
ARRAY(SELECT status
    FROM test_complete_dummy_data
    WHERE release_version = version AND test_name = name
    ORDER BY result_uploaded_at DESC)[OFFSET(0)]
);
我在这样的查询中使用它:

SELECT release_version, release_timestamp,
    if(
        getTestStatus('Unit tests', release_dummy_data.release_version) = 'PASS',
        'PASS',
        'FAIL'
    ) AS unit_tests,
    if(
        getTestStatus('Nightly test 1', release_dummy_data.release_version) = 'PASS'
            AND getTestStatus('Nightly test 2', release_dummy_data.release_version) = 'PASS',
        'PASS',
        'FAIL'
    ) AS nightly_tests,
FROM release_dummy_data
ORDER BY release_version DESC
如果我从UDF中删除
orderby
语句,那么它将正常工作


有办法解决这个问题吗?

在一些帮助下,我通过使用
RANK
在子查询中获取每个版本的最新测试结果,然后从结果中选择一个特定的版本,从而获得了该函数的工作实现:

CREATE FUNCTION getTestStatus(name STRING, version STRING) AS (
(SELECT status
    FROM (SELECT release_version, status, RANK() OVER(PARTITION BY release_version ORDER BY result_uploaded_at DESC) rank
        FROM test_complete_dummy_data
        WHERE test_name = name
    )
    WHERE rank = 1 AND release_version = version
));