2017-08-08 10 views
0

私はいくつかの例を見てきましたが、私の日中のテーブルを組み込むユニオンにどのようにフォーマットするのか分かりません。 TABLE_SUFFIXは私の毎日のテーブルをつかんでいますが、私はまた、日中のsmarttruck-6d137.com_usiinc_android_ANDROID.app_events_intraday_*をつかむ必要があります。誰かがこのためのUNION ALLフォーマットを手伝ってくれますか?ありがとうございました。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つのテーブルを区別する必要がありますか?あるいは、それらを1つの共通のテーブルとして扱うだけで十分ですか? –

+0

一般的なテーブルは問題ありません。 – Selch

答えて

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

別のオプション(正規表現ではなく)は 'SUBSTR(_TABLE_SUFFIX、LENGTH(_TABLE_SUFFIX) - 7)'を使うことですが、うまく動作するはずです。 –

+0

@ElliottBrossardクールなテクニック!それも試してみるよ –

+0

@WillianFuks美しい。ありがとうございました。 – Selch

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; 
+0

範囲フィルタリング条件を削除して、データセット全体を選択していないことを確認してください。このクエリを実行するときに処理されるデータの量を確認します。 –

+2

ここで起こっているのは、 '*'が両方の種類の接尾辞にマッチすることです。 '20170807'と' intraday_20170807'です。 Willの答えは、正規表現を使って接尾辞の日付部分を抽出することによって動作します。 –

+0

ありがとう、私はあなたが行くところに行く。しかし、それは私の日付範囲のハードコードですか?私はData Studioでこれを使用しますので、ユーザーの入力に基づいて日付を変更したいと思っています。 – Selch

関連する問題