本页提供了一些查询示例,您可以使用这些示例查询导出到 BigQuery 的敏感数据保护发现结果。
您可以配置检查作业或作业触发器,将发现结果保存到 BigQuery。这样一来,您就可以查询发现结果以进行进一步分析。将发现结果导出到 BigQuery 后,数据 会写入新表或现有表。
详细了解 Sensitive Data Protection 可以执行的所有操作 请参阅操作概念主题。
如需详细了解如何运行查询,请参阅以下内容:
BigQuery 表的列
导出发现结果表中的列基于
Finding
对象。
将结果链接回包含相应发现结果的行
如果您要配置 BigQuery 表的检查,可以设置作业或作业触发器,以便导出的发现结果包含行标识符。这样,您就可以将检查结果重新关联到包含这些结果的行。
在检查作业或作业触发器中,将以下字段设置为用于唯一标识表中每一行的列的名称,即用作主键的列:
- 如果您使用的是 Google Cloud 控制台,请设置标识字段(英文逗号 分隔)字段。
- 如果您使用的是 DLP API,请设置
identifyingFields
属性。
完成检查并将发现结果导出到 BigQuery 后,每个发现结果都将包含您指定的列的相应值。这些值将位于 location.content_locations.record_location.record_key.id_values
字段中。然后,您可以使用这些值将发现结果重新关联到被检查的 BigQuery 表中的特定行。
查询示例
您可以使用以下示例查询来分析您的结果。您可以 也可以使用可视化工具中的查询 Looker Studio。这些查询可帮助您开始查询您的结果数据。
在以下每个查询中,替换以下内容:
PROJECT_ID
:项目标识符DATASET
:BigQuery 数据集名称TABLE_ID
:表 ID
选择每个 infoType 的数量
Google Cloud 控制台
SELECT info_type.name, COUNT(info_type.name) AS count FROM `PROJECT_ID.DATASET.TABLE_ID` GROUP BY info_type.name ORDER BY count DESC;
命令行
bq query --use_legacy_sql=false ' SELECT info_type.name, COUNT(info_type.name) AS count FROM `PROJECT_ID.DATASET.TABLE_ID` GROUP BY info_type.name ORDER BY count DESC;'
按天选择每个 infoType 的数量
Google Cloud 控制台
SELECT info_type.name, cast(TIMESTAMP_SECONDS(create_time.seconds) as date) as day, COUNT(locations.container_name) AS count FROM `PROJECT_ID.DATASET.TABLE_ID`, UNNEST(location.content_locations) AS locations GROUP BY info_type.name, day ORDER BY count DESC;
命令行
bq query --use_legacy_sql=false ' SELECT info_type.name, cast(TIMESTAMP_SECONDS(create_time.seconds) as date) as day, COUNT(locations.container_name) AS count FROM `PROJECT_ID.DATASET.TABLE_ID`, UNNEST(location.content_locations) AS locations GROUP BY info_type.name, day ORDER BY count DESC;'
选择每个容器中各个 infoType 的数量
Google Cloud 控制台
SELECT info_type.name, locations.container_name, COUNT(locations.container_name) AS count FROM `PROJECT_ID.DATASET.TABLE_ID`, UNNEST(location.content_locations) AS locations GROUP BY locations.container_name, info_type.name ORDER BY count DESC;
命令行
bq query --use_legacy_sql=false ' SELECT info_type.name, locations.container_name, COUNT(locations.container_name) AS count FROM `PROJECT_ID.DATASET.TABLE_ID`, UNNEST(location.content_locations) AS locations GROUP BY locations.container_name,info_type.name ORDER BY count DESC;'
选择为表的每一列查找的结果类型
此查询将按列名称对所有发现结果进行分组,其目的在于 从 BigQuery 检查作业中发现的发现结果。如果您尝试识别给定列的可能性类型,此查询会很有用。您可以通过修改 WHERE 和 HAVING 子句来调整设置。例如,如果有多个 表结果会包含在发现结果表中,则可以将这些结果限制为仅包含 一个作业运行或一个表名称。
Google Cloud 控制台
SELECT table_counts.field_name, STRING_AGG( CONCAT(" ",table_counts.name," [count: ",CAST(table_counts.count_total AS String),"]") ORDER BY table_counts.count_total DESC) AS infoTypes FROM ( SELECT locations.record_location.field_id.name AS field_name, info_type.name, COUNT(*) AS count_total FROM `PROJECT_ID.DATASET.TABLE_ID`, UNNEST(location.content_locations) AS locations WHERE (likelihood = 'LIKELY' OR likelihood = 'VERY_LIKELY' OR likelihood = 'POSSIBLE') GROUP BY locations.record_location.field_id.name, info_type.name HAVING count_total>200 ) AS table_counts GROUP BY table_counts.field_name ORDER BY table_counts.field_name
上面的查询可能为示例表生成类似这样的结果,其中 infoType 列显示为该指定列找到的每个 infoType 的实例数量。
field_name | infoType |
---|---|
field1 |
CUSTOM_USER_US [count: 7004] , CUSTOM_USER_EU [count: 2996] |
field2 |
US_VEHICLE_IDENTIFICATION_NUMBER [count: 9597] |
field3 |
EMAIL_ADDRESS [count: 10000] |
field4 |
IP_ADDRESS [count: 10000] |
field5 |
PHONE_NUMBER [count: 7815] |
field6 |
US_SOCIAL_SECURITY_NUMBER [count: 10000] |
field7 |
CREDIT_CARD_NUMBER [count: 10000] |