Google app engine 使用BigQuery选择所有相关行(从GAE读取日志)
我的Google应用程序引擎日志将通过标准导出到BigQuery。我想查询“显示任何日志行包含字符串的请求的所有日志行” 此查询提供了我感兴趣的请求ID:Google app engine 使用BigQuery选择所有相关行(从GAE读取日志),google-app-engine,google-bigquery,Google App Engine,Google Bigquery,我的Google应用程序引擎日志将通过标准导出到BigQuery。我想查询“显示任何日志行包含字符串的请求的所有日志行” 此查询提供了我感兴趣的请求ID: SELECT protoPayload.requestId AS reqId FROM TABLE_QUERY(logs, 'true') WHERE protoPayload.line.logMessage contains 'INTERNAL_SERVICE_ERROR' …这让我可以查询相关行: SELECT metad
SELECT protoPayload.requestId AS reqId
FROM TABLE_QUERY(logs, 'true')
WHERE protoPayload.line.logMessage contains 'INTERNAL_SERVICE_ERROR'
…这让我可以查询相关行:
SELECT
metadata.timestamp AS Time,
protoPayload.host AS Host,
protoPayload.status AS Status,
protoPayload.resource AS Path,
protoPayload.line.logMessage
FROM
TABLE_QUERY(logs, 'true')
WHERE
protoPayload.requestId in ("requestid1", "requestid2", "etc")
ORDER BY time
但是,我在将这两个问题合并到一个查询中时遇到了困难。BQ似乎不允许WHERE子句中的SUBSELECT,当我尝试使用命名表进行传统的自连接时,会收到令人困惑的错误消息。秘密是什么?要选择至少一条logMessage包含给定字符串的行,可以使用省略IF构造
SELECT
metadata.timestamp AS Time,
protoPayload.host AS Host,
protoPayload.status AS Status,
protoPayload.resource AS Path,
protoPayload.line.logMessage
FROM
TABLE_QUERY(logs, 'true')
OMIT RECORD IF
EVERY(NOT (protoPayload.line.logMessage contains 'INTERNAL_SERVICE_ERROR'))
ORDER BY time
否,它只返回匹配的特定行。protoPayload.line是一个重复记录字段;我想要一个请求中的所有行,因为请求中的任何一行都符合条件。明白了-我据此更改了建议的答案哇,这根本不是我所期望的。工作很好-谢谢!加入应该有效。令人困惑的错误信息是什么?你能分享你的加入sql以便我们可以帮助编辑它吗?