在 BigQuery 中查詢 Sensitive Data Protection 發現項目

本頁面提供範例查詢,可用於分析匯出至 BigQuery 的資訊保護發現項目。

您可以設定檢查工作或工作觸發條件,將發現項目儲存至 BigQuery。這樣一來,您就能查詢調查結果,以進行進一步分析。當發現項目匯出至 BigQuery 時,資料會寫入新資料表或現有資料表。

如要進一步瞭解 Sensitive Data Protection 在檢查後可執行的所有動作,請參閱「動作」概念主題。

如要進一步瞭解如何執行查詢,請參閱下列文章:

BigQuery 資料表的資料欄

匯出結果表格的資料欄會根據 Finding 物件的屬性而定。

如果您設定檢查 BigQuery 表格,可以設定工作或工作觸發條件,讓匯出的發現項目包含資料列的 ID。這樣一來,您就能將檢查結果連結回包含這些結果的資料列。

在檢查作業或作業觸發程序中,將下列欄位設為資料表中可唯一識別每個資料列的欄位名稱,也就是做為主鍵的欄位:

  • 如果您使用 Google Cloud 控制台,請設定「識別欄位 (以半形逗號分隔)」欄位。
  • 如果您使用 DLP API,請設定 identifyingFields 屬性。

檢查完成並將結果匯出至 BigQuery 後,每個結果都會包含您指定的資料欄對應值。這些值會位於 location.content_locations.record_location.record_key.id_values 欄位中。然後使用這些值,將發現項目連結回檢查過的 BigQuery 資料表中的特定資料列。

查詢範例

您可以使用以下查詢範例分析發現項目,也可以在 Looker Studio 等視覺化工具中使用查詢。這些查詢旨在協助您開始查詢您的發現項目資料。

在下列各項查詢中,請替換以下項目:

  • PROJECT_ID:專案 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

針對範例資料表,上述查詢可能會產生類似這樣的結果,其中 infoTypes 資料欄會告訴我們,該資料欄中找到的每個 infoType 執行個體數量。

field_name infoTypes
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]