输入SQL
WITH first_activity AS (
SELECT USER_ID, MIN(TO_TIMESTAMP(EVENT_DATE)) AS first_activity_date
FROM DF.USER_EVENTS
GROUP BY USER_ID
)
SELECT COUNT(*) AS active_users_count
FROM first_activity
WHERE DATEDIFF(day, first_activity_date, CURRENT_TIMESTAMP()) > 90
我按以下方式使用 sqlglot 转换函数
sqlglot.transpile(query, write="snowflake", pretty=True)[0]
输出查询
WITH first_activity AS (
SELECT
USER_ID,
MIN(TO_TIMESTAMP(EVENT_DATE)) AS first_activity_date
FROM DF.USER_EVENTS
GROUP BY
USER_ID
)
SELECT
COUNT(*) AS active_users_count
FROM first_activity
WHERE
DATEDIFF(, first_activity_date, day) > 90
输出查询失败,因为 DATEDIFF 函数中有一个前导逗号。此外,我不确定为什么它完全改变了函数签名和参数。
我期待查询与一些漂亮的相同。
聚会有点晚了,但现在的一代(v25.3.4)可以正常工作:
>>> import sqlglot
>>> sqlglot.transpile("""
... WITH first_activity AS (
... SELECT USER_ID, MIN(TO_TIMESTAMP(EVENT_DATE)) AS first_activity_date
... FROM DF.USER_EVENTS
... GROUP BY USER_ID
... )
... SELECT COUNT(*) AS active_users_count
... FROM first_activity
... WHERE DATEDIFF(day, first_activity_date, CURRENT_TIMESTAMP()) > 90
... """, "snowflake")
['WITH first_activity AS (SELECT USER_ID, MIN(TO_TIMESTAMP(EVENT_DATE)) AS first_activity_date FROM DF.USER_EVENTS GROUP BY USER_ID) SELECT COUNT(*) AS active_users_count FROM first_activity WHERE DATEDIFF(DAY, first_activity_date, CURRENT_TIMESTAMP()) > 90']