join - 使用 _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
谁能告诉我为什么会这样,我该如何解决?提前致谢。
解决方案
问题是您在加入时没有选择该_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)
推荐阅读
- c++ - 我可以使用模板成员函数作为 CRTP 的替代方法来实现静态多态性吗?
- python - 如果值存在于同一行的任何其他列中,则 Pandas 删除值
- sql - 在 BigQuery 中将两个查询与 case 语句相结合
- r - 如何创建连续变量?
- leaflet - 如何监听 react-leaflet 地图的图层控制事件
- angular - 如何使用 momentjs 编写 jasmine 单元测试用例
- firebase - Push-Notification 推送到新屏幕,甚至没有点击通知(当应用程序在 FOREGOUND 中运行时)
- javascript - 无法让 Ant 设计表单元格引用动态列数
- ios - IOS iPhone Swift 上的小弹出框警报
- c++ - 将两个 API 链接在一起会导致 GUID_NULL 和 CLSID_StdGlobalInterfaceTable 未声明的标识符错误