sql - BigQuery 每月活跃用户数?

标签 sql firebase google-bigquery firebase-analytics

我目前正在处理来自此 post 的查询。该查询是用旧版 SQL 编写的,在我的环境中不起作用。我已修改查询以使用现代 SQL 函数,并将 SELECT date as date 更新为使用 timestamp_micros

我还应该提到,我尝试选择的行来自 Firebase Analytics。

我的查询:

SELECT 
    FORMAT_TIMESTAMP('%Y-%m-%d', TIMESTAMP_MICROS(event.timestamp_micros)) as date,
    SUM(CASE WHEN period = 7  THEN users END) as days_07,
    SUM(CASE WHEN period = 14 THEN users END) as days_14,
    SUM(CASE WHEN period = 30 THEN users END) as days_30
FROM (
    SELECT
        FORMAT_TIMESTAMP('%Y-%m-%d', TIMESTAMP_MICROS(event.timestamp_micros)) as date,
        periods.period as period,
        COUNT(DISTINCT user_dim.app_info.app_instance_id) as users
    FROM `com_sidearm_fanapp_uiowa_IOS.*` as activity
    CROSS JOIN
        UNNEST(event_dim) as event  
    CROSS JOIN (
        SELECT 
            FORMAT_TIMESTAMP('%Y-%m-%d', TIMESTAMP_MICROS(event.timestamp_micros)) as date
        FROM `com_sidearm_fanapp_uiowa_IOS.*`
        CROSS JOIN
            UNNEST(event_dim) as event 
        GROUP BY event.timestamp_micros
    ) as dates
    CROSS JOIN (
        SELECT 
            period 
        FROM 
            (
                SELECT 7 as period 
                UNION ALL
                SELECT 14 as period 
                UNION ALL
                SELECT 30 as period
            )
    ) as periods
    WHERE 
        dates.date >= activity.date 
    AND 
        SAFE_CAST(FLOOR(TIMESTAMP_DIFF(dates.date, activity.date, DAY)/periods.period) AS INT64) = 0
    GROUP BY 1,2
)
CROSS JOIN 
    UNNEST(event_dim) as event
GROUP BY date
ORDER BY date DESC

最佳答案

Column name period is ambiguous at [24:13] error.

要修复此特定错误 - 您应该修复以下内容

    CROSS JOIN (
        SELECT 
            period 
        FROM 
            (SELECT 7 as period), 
            (SELECT 14 as period), 
            (SELECT 30 as period)
    ) as periods

所以它应该看起来像:

    CROSS JOIN (
        SELECT 
            period 
        FROM 
            (SELECT 7 as period UNION ALL
            SELECT 14 as period UNION ALL
            SELECT 30 as period)
    ) as periods

Answer on your updated question

请尝试以下操作。我没有机会测试它,但希望它可以帮助您解决您的查询

SELECT 
    date,
    SUM(CASE WHEN period = 7  THEN users END) as days_07,
    SUM(CASE WHEN period = 14 THEN users END) as days_14,
    SUM(CASE WHEN period = 30 THEN users END) as days_30
FROM (
    SELECT 
        activity.date as date,
        periods.period as period,
        COUNT(DISTINCT user) as users
    FROM (
      SELECT
          event.timestamp_micros as date, 
           user_dim.app_info.app_instance_id as user
      FROM `yourTable` CROSS JOIN UNNEST(event_dim) as event  
    ) as activity
    CROSS JOIN (
        SELECT 
            event.timestamp_micros  as date
        FROM `yourTable` CROSS JOIN UNNEST(event_dim) as event 
        GROUP BY event.timestamp_micros
    ) as dates
    CROSS JOIN (
        SELECT period 
        FROM 
            (SELECT 7 as period UNION ALL 
            SELECT 14 as period UNION ALL
            SELECT 30 as period)
    ) as periods
    WHERE dates.date >= activity.date 
    AND SAFE_CAST(FLOOR(TIMESTAMP_DIFF(TIMESTAMP_MICROS(dates.date), TIMESTAMP_MICROS(activity.date), DAY)/periods.period) AS INT64) = 0
    GROUP BY 1,2
)
GROUP BY date
ORDER BY date DESC

关于sql - BigQuery 每月活跃用户数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41744536/

相关文章:

python-3.x - 如何从 "Google Cloud BigQuery"连接到 "Google Cloud functions"公共(public)数据集

java - 将 'dryRun' 设置为 true 时,BigQuery 客户端库抛出 NPE

mysql - 在查询结果中,防止系列中最后一个数字后面出现逗号

sql - 如何在shell脚本中运行SQL

ios - Firebase 使用电话号码 : use of unresolved identifier AuthAPNSTokenTypeProd and UIBackgroundFetchResultNoData error 进行身份验证

swift - 从cloud firestore下载图像并添加到用户对象

c# - 在用 C# 加密的 SQL Anywhere 16 中解密 AES,反之亦然

sql - Go 中数据库迁移的正确策略

javascript - Firebase:事务读取和更新多个文档

google-bigquery - 导入数据存储备份时,大查询加载失败并显示错误字符 (ASCII 0)