首页 > 解决方案 > 使用 _PARTITIONDATE 左连接

问题描述

我目前在 BigQuery 中使用 StandardSQL,我尝试加入两组表,其中一组是按天分区的伪列表。

我尝试在下面使用此查询:

SELECT 
        DISTINCT DATE(create_time) AS date,
        user_id,
        city_name,
        transaction_id,
        price

FROM 
        table_1 a

LEFT JOIN (SELECT user_id, city_name FROM table_2) b 
        ON (a.user_id = b.user_id AND DATE(create_time) = _PARTITIONDATE)

我已经尝试过这种 JOIN(使用 _PARTITIONDATE)并解决了,但是对于这个特定的查询,我收到了一条错误消息:

Unrecognized name: _PARTITIONDATE

谁能告诉我为什么会这样,我该如何解决?提前致谢。

标签: joingoogle-bigqueryleft-join

解决方案


问题是您在加入时没有选择该_PARTITIONDATE字段,table_2因此它无法识别它:

SELECT user_id, city_name FROM table_2

为了解决它,您可以按如下方式添加它:

SELECT 
        DISTINCT DATE(create_time) AS date,
        user_id,
        city_name,
        transaction_id,
        price

FROM 
        table_1 a

LEFT JOIN (SELECT _PARTITIONDATE AS pd, user_id, city_name FROM table_2) b 
        ON (a.user_id = b.user_id AND DATE(create_time) = pd)

请注意,您需要一个别名,例如pd它是一个伪列

如果您直接加入两个表,例如在(在这种情况下您不会获得选择性优势),它可能在过去是有效的:

FROM 
        table_1 a
LEFT JOIN table_2 b 
        ON (a.user_id = b.user_id AND DATE(create_time) = _PARTITIONDATE)

推荐阅读