我正在尝试优化用于搜索AppEngine应用程序日志(exported to BigQuery automatically through Google Cloud Logging)的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
字段的子查询时,它工作正常。
正如旁注,this SO answers better what I am trying to achieve但我仍然很好奇是什么导致了我的查询中的错误。
答案 0 :(得分:1)
在子选择之外 - protoPayload.requestId
不再可见 - 基于matchingRequestId
中的别名protoPayload.requestId AS matchingRequestId
请注意,在您修改protoPayload.requestId
的外部(两个)引用后,下一个错误将是protoPayload.line.logMessage
左右
外部选择也不可见,因为a)它不是subselect的一部分,b)从subselect引用表
看起来你过度简化了你的例子,即使在上面的/固定之后 - 它对我来说仍然没有多大意义 - 特别是因为WHERE matchingRequestId = matchingRequestId