Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql BigQuery每月活动用户?_Sql_Firebase_Google Bigquery_Firebase Analytics - Fatal编程技术网

Sql BigQuery每月活动用户?

Sql BigQuery每月活动用户?,sql,firebase,google-bigquery,firebase-analytics,Sql,Firebase,Google Bigquery,Firebase Analytics,我目前正在对此进行查询。该查询是用遗留SQL编写的,在我的环境中不起作用。我修改了查询以使用现代SQL函数,并更新了selectdateasdate以使用timestamp\u micros 我还应该提到,我试图选择的行来自Firebase Analytics 我的问题是: SELECT FORMAT_TIMESTAMP('%Y-%m-%d', TIMESTAMP_MICROS(event.timestamp_micros)) as date, SUM(CASE WHEN pe

我目前正在对此进行查询。该查询是用遗留SQL编写的,在我的环境中不起作用。我修改了查询以使用现代SQL函数,并更新了
selectdateasdate
以使用
timestamp\u 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
列名句点在[24:13]错误处不明确

要修复此特定错误,您应该在下面进行修复

    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
回答您的最新问题

试试下面。我没有机会测试它,但希望它能帮助您修复您的查询

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

这是可行的,但现在它抛出了另一个错误:
Name date not found in activity at[31:32]
,正如您在问题中提到的那样-原始查询是为不同的表编写的,该表中有
date
字段。因此,您需要确保您使用的是表中存在的字段。我查询的字段确实存在于我的表中。这一点我是肯定的。我已将日期更改为时间戳,请参见更新的问题。我事件更改了日期字段的格式,以匹配原始旧版SQL查询中的内容。@JoeScotto-情况并非如此-如果您有新问题,应将其作为新问题发布。相反,你不断地改变现有的问题,从而使你原来问题的答案完全无效!作为一个例外(对我自己来说),我会再回答一次——但在将来——我不会回答这样永无止境的一体化问题。顺便说一句——通常你的问题的标题不应该是你正在处理的项目或任务名称——而是你有一个明确、简短和具体的问题。我知道这并不总是简单的——但这就是为什么对其他访问本文的人来说,BQ导出模式是这样定义的。