私はこのトピックについて多分検索できませんでした。私はApacheのロギング情報を取得するテーブルProtopayload.resourceを持っています。その結果、私が興味を持っているフィールドには、検索する必要がある複数の値が含まれています。フィールドはPHPのURLスタイルでフォーマットされています。 すなわちビッグ・クエリでフィールドを分割する
/?id=13242134123&ver=12&os_bits=64&os_type=mac&lng=EN
これは、すべての検索がデータを取得するために、本当に長い正規表現で終わることができます。次に、ステートメントを結合してデータを結合します。私が考えていた何MAC /勝つ統計
SELECT
t1.date, t1.wincount, COALESCE(t2.maccount, 0) AS maccount
FROM (
SELECT
DATE(metadata.timestamp) AS date,
INTEGER(COUNT(protoPayload.resource)) AS wincount
FROM (TABLE_DATE_RANGE(tablename, DATE_ADD(CURRENT_TIMESTAMP(), -30, 'DAY'), CURRENT_TIMESTAMP()))
WHERE
(REGEXP_MATCH(protoPayload.resource, r'ver=[11,12'))
AND protoPayload.resource CONTAINS 'os=win' GROUP BY date) t1
LEFT JOIN (
SELECT
DATE(metadata.timestamp) AS date,
INTEGER(COUNT(protoPayload.resource)) AS maccount
FROM (TABLE_DATE_RANGE(tablename, DATE_ADD(CURRENT_TIMESTAMP(), -30, 'DAY'), CURRENT_TIMESTAMP()))
WHERE
(REGEXP_MATCH(protoPayload.resource, r'cv=[p,m][17,16,15,14]'))
AND protoPayload.resource CONTAINS 'os=mac' GROUP BY date) t2
ON
t1.date = t2.date
ORDER BY t1.date
を組み合わせること
例の検索では、類似した正規表現検索を使用することでした。新しいテーブルを作成します。その後、関係フィールドを持つ新しいテーブルにデータを保存します。将来のロギングを修正して、テーブルに正しくログするようにします。
私の質問はこの有効な解決策ですか、それともGoogle BigQueryでこれを達成するための簡単な方法がありますか?データを変換するより良い方法はありますか? 入力してくれてありがとう!
ようこそStackOverflow!ですから、本質的にあなたの質問は、Google BigQueryがURLを簡単に解析できるかどうかです。私はGBQの専門家ではありませんが、一般的に私はあなたのアプローチがうまくいっていると言います。それは、あなたが「どちらが良いですか:aまたはb?」という代替語句をあなたに提供するならば、あなたは答えを得る可能性が高いと思います。 – akousmata