1

AppEngine アプリケーション ログ ( Google Cloud Logging を介して自動的に BigQuery にエクスポート) を検索するために使用する BigQuery クエリを最適化しようとしましたが、理解できないエラーが発生しました。

SELECT
  protoPayload.requestId,
  protoPayload.line.logMessage
FROM (
  SELECT
    protoPayload.requestId AS matchingRequestId
  FROM
   TABLE_DATE_RANGE(MyProject_Logs.appengine_googleapis_com_request_log_, DATE_ADD(CURRENT_TIMESTAMP(), -1, 'HOUR'), CURRENT_TIMESTAMP())
  WHERE
    protoPayload.resource CONTAINS '/url'
    AND protoPayload.line.logMessage CONTAINS 'criteria'
  LIMIT 50)
WHERE
  protoPayload.requestId = matchingRequestId

結果は

Query Failed
Error: Field 'protoPayload.requestId' not found.
Job ID: myProject:job_DZpCc0u52LBFh8DFL0nDCsizo8o

protoPayload.requestIdフィールドを使用するサブクエリだけを実行しようとすると、正常に動作するため、このエラーは意味がありません。

補足として、このSOは私が達成しようとしていることにより良い答えを出しますが、クエリでエラーが発生する原因はまだ知りたいです。

4

1 に答える 1

1
  1. このエラーは、質問の特定の例で意味があります。

副選択の外側 -protoPayload.requestIdもう表示されません - のmatchingRequestIdエイリアスに基づいていますprotoPayload.requestId AS matchingRequestId

  1. への外部 (2 つの) 参照を修正した後protoPayload.requestId、次のエラーは次のようになることに注意しprotoPayload.line.logMessage
    てください。

  2. 上記の修正後でも、例を単純化しすぎたようです-それでも私にはあまり意味がありません-特に理由はWHERE matchingRequestId = matchingRequestId

于 2016-01-14T15:20:47.083 に答える