将UNION ALL与我的日内表

时间:2017-08-08 22:11:35

标签: google-bigquery

我已经看过几个例子,但我不知道如何将我的查询格式化为一个将包含我的日内表的联合。 TABLE_SUFFIX正好抓住我所有的日常表,但我还需要抓住日内smarttruck-6d137.com_usiinc_android_ANDROID.app_events_intraday_*。有人可以帮我处理UNION ALL格式吗?谢谢。

SELECT
  event_dim.date AS Date,
  (
  SELECT
    value.value.string_value
  FROM
    UNNEST(user_dim.user_properties)
  WHERE
    key = 'imei_id') AS IMEI,
  (
  SELECT
    value.value.string_value
  FROM
    UNNEST(user_dim.user_properties)
  WHERE
    key = 'division_id') AS Branch,
  (
  SELECT
    value.value.string_value
  FROM
    UNNEST(user_dim.user_properties)
  WHERE
    key = 'truck_id') AS Truck,
  (
  SELECT
    value.value.string_value
  FROM
    UNNEST(user_dim.user_properties)
  WHERE
    key = 'installer_id') AS Installer,
  COUNT(*) AS Count
FROM
  `smarttruck-6d137.com_usiinc_android_ANDROID.app_events_*`
CROSS JOIN
  UNNEST(event_dim) AS event_dim
WHERE
  event_dim.name = 'app_exception'
  AND EXISTS (
  SELECT
    1
  FROM
    UNNEST(event_dim.params)
  WHERE
    key = 'fatal'
    AND value.int_value = 1 )
  AND _TABLE_SUFFIX = Date
GROUP BY
  Date,
  IMEI,
  Branch,
  Truck,
  Installer
ORDER BY
  Date DESC,
  Count DESC;

2 个答案:

答案 0 :(得分:2)

检查这是否适合您:

SELECT
  event_dim.date AS Date,
  (
  SELECT
    value.value.string_value
  FROM
    UNNEST(user_dim.user_properties)
  WHERE
    key = 'imei_id') AS IMEI,
  (
  SELECT
    value.value.string_value
  FROM
    UNNEST(user_dim.user_properties)
  WHERE
    key = 'division_id') AS Branch,
  (
  SELECT
    value.value.string_value
  FROM
    UNNEST(user_dim.user_properties)
  WHERE
    key = 'truck_id') AS Truck,
  (
  SELECT
    value.value.string_value
  FROM
    UNNEST(user_dim.user_properties)
  WHERE
    key = 'installer_id') AS Installer,
  COUNT(*) AS Count
FROM
  `smarttruck-6d137.com_usiinc_android_ANDROID.app_events_*`
CROSS JOIN
  UNNEST(event_dim) AS event_dim
WHERE
  event_dim.name = 'app_exception'
  AND EXISTS (
  SELECT
    1
  FROM
    UNNEST(event_dim.params)
  WHERE
    key = 'fatal'
    AND value.int_value = 1 )
  AND REGEXP_EXTRACT(_TABLE_SUFFIX, r'(\d+)') BETWEEN '20170807' and '20170809'
GROUP BY
  Date,
  IMEI,
  Branch,
  Truck,
  Installer
ORDER BY
  Date DESC,
  Count DESC;

您可以更改我在选择中用于最适合您的日期。

如果您将在Data Studio中使用该查询,我倾向于根据今天的日期以及回溯的天数创建日期范围。例如:

AND REGEXP_EXTRACT(_TABLE_SUFFIX, r'(\d+)') BETWEEN FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY)) and FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 0 DAY))

这将自动查询从今天算起的最近30天。您可以根据数据工作室报告中的最佳选择调整此查询。

答案 1 :(得分:0)

我想我自己想出来了。通过删除where子句中的_TABLE_SUFFIX = Date,BQ也使用通配符来获取我的日内表。我不会假装我完全理解为什么会这样,但确实如此。如果你能解释的话,请加入。

standardSQL

SELECT
  event_dim.date AS Date,
  (
  SELECT
    value.value.string_value
  FROM
    UNNEST(user_dim.user_properties)
  WHERE
    key = 'imei_id') AS IMEI,
  (
  SELECT
    value.value.string_value
  FROM
    UNNEST(user_dim.user_properties)
  WHERE
    key = 'division_id') AS Branch,
  (
  SELECT
    value.value.string_value
  FROM
    UNNEST(user_dim.user_properties)
  WHERE
    key = 'truck_id') AS Truck,
  (
  SELECT
    value.value.string_value
  FROM
    UNNEST(user_dim.user_properties)
  WHERE
    key = 'installer_id') AS Installer,
  COUNT(*) AS Count
FROM
  `smarttruck-6d137.com_usiinc_android_ANDROID.app_events_*`
CROSS JOIN
  UNNEST(event_dim) AS event_dim
WHERE
  event_dim.name = 'app_exception'
  AND EXISTS (
  SELECT
    1
  FROM
    UNNEST(event_dim.params)
  WHERE
    key = 'fatal'
    AND value.int_value = 1 )
GROUP BY
  Date,
  IMEI,
  Branch,
  Truck,
  Installer
ORDER BY
  Date DESC,
  Count DESC;