我已经看过几个例子,但我不知道如何将我的查询格式化为一个将包含我的日内表的联合。 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;
答案 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;