Google analytics 使用重复行导出的BigQuery GA

Google analytics 使用重复行导出的BigQuery GA,google-analytics,google-bigquery,google-cloud-platform,Google Analytics,Google Bigquery,Google Cloud Platform,我们一直试图解释为什么在我们所有的数据集中都会发生这种情况,但到目前为止我们没有成功 我们观察到,从4月18日开始,我们的ga_sessions数据集的大部分条目都是重复的,比如99%的行。例如,我测试了这个查询: SELECT fullvisitorid fv, visitid v, ARRAY( SELECT AS STRUCT hits.* FROM UNNEST(hits) hits ORDER BY hits.hitnumber) h F

我们一直试图解释为什么在我们所有的数据集中都会发生这种情况,但到目前为止我们没有成功

我们观察到,从4月18日开始,我们的ga_sessions数据集的大部分条目都是重复的,比如99%的行。例如,我测试了这个查询:

SELECT
  fullvisitorid fv,
  visitid v,
  ARRAY(
  SELECT
    AS STRUCT hits.*
  FROM
    UNNEST(hits) hits
  ORDER BY
    hits.hitnumber) h
FROM
  `dafiti-analytics.40663402.ga_sessions*`
WHERE
  1 = 1
  AND REGEXP_EXTRACT(_table_suffix, r'.*_(.*)') BETWEEN FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 3 DAY))AND FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 3 DAY))
ORDER BY
  fv,
  v
LIMIT
  100
SELECT
  date,
  f,
  COUNT(f) freq from(
  SELECT
    date,
    fullvisitorid fv,
    visitid v,
    COUNT(CONCAT(fullvisitorid, CAST(visitid AS string))) f
  FROM
    `dafiti-analytics.40663402.ga_sessions*`
  WHERE
    1 = 1
    AND PARSE_TIMESTAMP('%Y%m%d', REGEXP_EXTRACT(_table_suffix, r'.*_(.*)')) BETWEEN TIMESTAMP('2017-04-01')
    AND TIMESTAMP('2017-04-30')
  GROUP BY
    fv,
    v,
    date )
GROUP BY
  f,
  date
ORDER BY
  date,
  freq DESC
结果是:

我们试图调查这是什么时候开始的,所以我运行了这个查询:

SELECT
  fullvisitorid fv,
  visitid v,
  ARRAY(
  SELECT
    AS STRUCT hits.*
  FROM
    UNNEST(hits) hits
  ORDER BY
    hits.hitnumber) h
FROM
  `dafiti-analytics.40663402.ga_sessions*`
WHERE
  1 = 1
  AND REGEXP_EXTRACT(_table_suffix, r'.*_(.*)') BETWEEN FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 3 DAY))AND FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 3 DAY))
ORDER BY
  fv,
  v
LIMIT
  100
SELECT
  date,
  f,
  COUNT(f) freq from(
  SELECT
    date,
    fullvisitorid fv,
    visitid v,
    COUNT(CONCAT(fullvisitorid, CAST(visitid AS string))) f
  FROM
    `dafiti-analytics.40663402.ga_sessions*`
  WHERE
    1 = 1
    AND PARSE_TIMESTAMP('%Y%m%d', REGEXP_EXTRACT(_table_suffix, r'.*_(.*)')) BETWEEN TIMESTAMP('2017-04-01')
    AND TIMESTAMP('2017-04-30')
  GROUP BY
    fv,
    v,
    date )
GROUP BY
  f,
  date
ORDER BY
  date,
  freq DESC
我们发现,我们的3个项目在4月18日开始,但在与LATAM数据相关的帐户中,我们最近也开始看到重复的行

我们还检查了GCP控制台中是否记录了一些内容,但找不到任何内容

我们是否可能犯了一些错误,导致了ga_会话导出中的重复?我们检查了我们的分析跟踪,但它似乎工作得很好。此外,我们这些天所做的任何修改都不能解释这一点


如果您需要更多信息,请让我知道,

确保只匹配当天或非当天表格。当日:

`dafiti-analytics.40663402.ga_sessions_intraday*`
非当日:

`dafiti-analytics.40663402.ga_sessions_intraday*`
`dafiti-analytics.40663402.ga_sessions_2017*`

重要的是要包含足够多的前缀以匹配所需的表。

能否在选择列表中包含_TABLE_后缀,并确保它与您对行的预期一致?您好@ElliottBrossard,刚刚测试了您的建议,现在我可以看到错误了!由于不再从数据集中删除天内表,因此选择将表ga_sessions和ga_sessions_intraday带到同一天。只是想知道,有没有推荐的方法只选择在where子句中不重复的日内表?谢谢你的帮助!看看我添加的答案是否有帮助。我想你只需要在通配符中加上更长的前缀。谢谢你的帮助,Elliott!我们仍然存在的一个问题是,如果我们想在同一个查询中查询intraday和ga_会话,我计划做的是为前两天选择intraday,为rest选择ga_会话。您仍然可以这样做:或者使用UNION所有两个通配符表前缀,或者让通配符同时包含两个前缀,然后在WHERE子句中的_TABLE_后缀上使用两个过滤器的or。在注释中解释有点棘手,但希望这个建议有意义:我在where:`和CASE WHEN REGEXP_包含_table_后缀,'intraday'和REGEXP_EXTRACT_table_后缀,r'.*.*'之间添加了这一子句,格式为%Y%m%d,日期为次当前_日期,间隔为2天,格式为%Y%m%d,日期为次当前_日期,间隔0天,如果非REGEXP_包含_table_后缀,“intraday”和REGEXP_EXTRACT_table_后缀,则为TRUE。格式_DATE%Y%m%d、日期_次当前_DATE、间隔5天和格式_DATE%Y%m%d之间的.*.*,间隔2天,然后为TRUE结束`