SQLAlchemy Join 使用 PyBigquery 过滤结果
SQLAlchemy Join using PyBigquery to filter results
使用 SQLAlchemy class,我正在尝试生成类似于
的查询
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()....
使用 SQLAlchemy class,我正在尝试生成类似于
的查询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()....