Получить все строки из запроса, соответствующие критериям

Я пытался оптимизировать запрос BigQuery, который использую для поиска в журналах приложений AppEngine (автоматически экспортируется в BigQuery через Google Cloud Logging), но я получил ошибку, которую не понимаю.

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, он работает нормально.

Как примечание, это ТАК лучше отвечает на то, чего я пытаюсь достичь, но мне все еще любопытно, что вызывает ошибку в мой запрос.


person CaptainPatate    schedule 14.01.2016    source источник


Ответы (1)


  1. Эта ошибка имеет смысл для меня для этого конкретного примера в вопросе:

вне подвыборки - protoPayload.requestId больше не видно - это matchingRequestId на основе псевдонима в protoPayload.requestId AS matchingRequestId

  1. Обратите внимание, что после того, как вы исправите внешние (две) ссылки на protoPayload.requestId, следующая ошибка будет примерно protoPayload.line.logMessage
    Она также не видна для внешнего выбора, потому что а) она не является частью подвыборки и б) ссылка на таблицу из подвыборки

  2. похоже, вы упростили свой пример, даже если/после исправления выше - это все равно не имеет для меня особого смысла - особенно из-за WHERE matchingRequestId = matchingRequestId

person Mikhail Berlyant    schedule 14.01.2016
comment
Спасибо. С вашими объяснениями понятнее. - person CaptainPatate; 14.01.2016