我试图弄清楚如何压扁bigquery日志表(logs.cloudaudit_googleapis_com_data_access_20160404等),以便我基本上可以看到任何给定目标表的所有已完成的作业。
我理想情况下只需要下面的内容向我展示触及表[dataset_xyz.table_abc]的作业的所有条目,然后我就可以弄清楚如何理解根据作业类型等填充的某些字段。
SELECT
*
FROM
[logs.cloudaudit_googleapis_com_data_access_20160404]
where
(
protoPayload.serviceData.jobCompletedEvent.job.jobConfiguration.query.destinationTable.datasetId='dataset_xyz'
and
protoPayload.serviceData.jobCompletedEvent.job.jobConfiguration.query.destinationTable.tableId='table_abc'
)
or
(
protoPayload.serviceData.jobCompletedEvent.job.jobConfiguration.tableCopy.destinationTable.datasetId='dataset_xyz'
and
protoPayload.serviceData.jobCompletedEvent.job.jobConfiguration.tableCopy.destinationTable.tableId='table_abc'
)
or
(
protoPayload.serviceData.jobCompletedEvent.job.jobConfiguration.load.destinationTable.datasetId='dataset_xyz'
and
protoPayload.serviceData.jobCompletedEvent.job.jobConfiguration.load.destinationTable.tableId='table_abc'
)
我试图做很多嵌套的扁平化但我无法弄明白,因为发现日志结构有点复杂。
我基本上希望能够查询日志导出以说明"显示与编辑表格有关的所有内容[dataset_xyz.table_abc]"所以我猜主要是load,tableCopy和查询作业,它们附加或覆盖表[dataset_xyz.table_abc]中的任何数据。
我唯一能想到的就是沿着它的嵌套记录逐字地分开表格,然后以某种方式将它们全部重新组合在一起,但这似乎是一个疯狂的想法。我确定有一种方法可以反复压扁它,但我无法弄清楚如何压扁这么复杂的结构。即使我可以在protoPayload.serviceData.jobCompletedEvent下展平一切。*所以我可以做到
select protoPayload.serviceData.jobCompletedEvent.* from flatten(...
或许还有一种更简单的方法可以解决这个问题,我错过了什么?
P.S。我认为这可能是guide的一个很好的例子,因为我认为这是一个人们想做的常见事情。
答案 0 :(得分:0)
你试过这个:
SELECT protoPayload.serviceData.jobCompletedEvent.job.jobName.jobId 来自[audit_logs.cloudaudit_googleapis_com_data_access_20160406] 省略记录if(sum(
(protoPayload.serviceData.jobCompletedEvent.job.jobConfiguration.query.destinationTable.tableId ='table'和 protoPayload.serviceData.jobCompletedEvent.job.jobConfiguration.query.destinationTable.datasetId ='ds' ) 要么 ( protoPayload.serviceData.jobCompletedEvent.job.jobConfiguration.load.destinationTable.datasetId ='ds'AND protoPayload.serviceData.jobCompletedEvent.job.jobConfiguration.load.destinationTable.tableId ='table'
) )= 0)