展平BQ日志表?

时间:2016-04-05 15:28:30

标签: google-bigquery

我试图弄清楚如何压扁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的一个很好的例子,因为我认为这是一个人们想做的常见事情。

1 个答案:

答案 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)