【问题标题】:BigQuery GA Exported with Duplicated RowsBigQuery GA 导出时存在重复行
【发布时间】:2017-10-12 02:00:47
【问题描述】:

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

我们观察到,从 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

我们发现,我们的 3 个项目从 4 月 18 日开始,但在与 LATAM 数据相关的帐户中,我们最近也开始看到重复的行。

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

我们是否可能犯了一些错误导致 ga_sessions 导出中出现重复?我们检查了我们的分析跟踪,但它似乎工作得很好。此外,我们这些天也没有进行任何修改来解释它。

如果您需要更多信息,请告诉我,

【问题讨论】:

  • 您能否将_TABLE_SUFFIX 包括在选择列表中并确保它与您对行的期望一样?
  • 嗨@ElliottBrossard,刚刚测试了你的建议,现在我可以看到错误了!由于不再从数据集中删除盘中表,因此选择同时包含两个表(同一天的 ga_sessions 和 ga_sessions_intraday)。只是想知道,是否有推荐的方法来仅选择在 where 子句中不重复的盘中表? Tnx 寻求帮助!
  • 看看我添加的答案是否有帮助。我怀疑您只需要在通配符中包含更长的前缀。

标签: google-analytics google-bigquery google-cloud-platform


【解决方案1】:

确保只匹配日内或非日内表格。盘中:

`dafiti-analytics.40663402.ga_sessions_intraday*`

对于非盘中:

`dafiti-analytics.40663402.ga_sessions_2017*`

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

【讨论】:

  • 感谢艾略特的帮助!我们仍然遇到的一个问题是,如果我们想在同一个查询中查询 intraday 和 ga_sessions(我打算做的是选择前 2 天的 intraday 和其余的 ga_sessions)
  • 您仍然可以这样做:或者使用两个通配符表前缀的 UNION ALL,或者让通配符包含两个前缀,然后在 WHERE 子句中的 _TABLE_SUFFIX 上使用两个过滤器的 OR。在评论中解释有点棘手,但希望这个建议是有道理的:)
  • 我将此子句添加到 where: ` AND CASE WHEN (REGEXP_CONTAINS(_table_suffix, 'intraday') AND REGEXP_EXTRACT(_table_suffix, r'.*_(.*)') BETWEEN FORMAT_DATE("% Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 2 DAY))AND FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 0 DAY))) THEN TRUE WHEN (NOT REGEXP_CONTAINS(_table_suffix) , 'intraday') AND REGEXP_EXTRACT(_table_suffix, r'.*_(.*)') BETWEEN FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 5 DAY))AND FORMAT_DATE("%Y %m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 2 DAY))) THEN TRUE END`
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多