SQLAlchemy Join 使用 PyBigquery 过滤结果

问题描述

使用 sqlAlchemy 类,我试图生成一个类似于

查询
SELECT
  disTINCT(non_unique_key)
FROM
  `tablename`,UNnesT(tasks_dns) AS dns
WHERE
  create_date_utc = TIMESTAMP("2020-12-31T23:59:59")
  AND dns LIKE "%whatever%"

作为使用 unnest() 的隐式连接,我不知道如何构造我的语句。

结合使用 .label() 和移动 unnest() 调用,我设法将 unnest 子句移动到 SELECT 或 WHERE 子句,但不在 FROM 中。

例如

session.query(Table.non_unique_key).filter(func.unnest(Table.dns) != '').filter(Table.create_date == "2021-04-22")

留给我

SELECT `tablename`.`non_unique_key` AS `tablename_non_unique_key` 
FROM `tablename` 
WHERE unnest(`tablename`.`tasks_dns`) IS NOT NULL AND `tablename`.`create_date_utc` = %(create_date_utc_1)s

到目前为止,使用 join() 只是在没有要加入的列的情况下引起异常(虽然是的,我明白这意味着什么,但我不知道如何解决这个问题,因为 unnest 基本上是在做一个没有要加入的列的嵌套数据类型的扩展......这可能是我对如何正确使用 sqlAlchemys join() 方法一无所知的地方)

此时这只是 sqlAlchemy / BigQuery 方言问题吗?还是我只是个笨蛋?我知道方言库还处于起步阶段,但即使使用 Postgres,我也会认为这应该是一个有点常见的查询模式?

解决方法

经过一些额外的挖掘,我想通了

Model().query().select_from(func.unnest(Model.col1).alias("whatever")).filter()....

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...