Esegui query sui risultati di Cloud DLP in BigQuery

Questa pagina fornisce query di esempio che puoi utilizzare per analizzare i risultati di Cloud DLP esportati in BigQuery.

Puoi configurare un job di ispezione o un trigger di job per salvare i risultati in BigQuery. In questo modo puoi eseguire query sui risultati per ulteriori analisi. Quando i risultati vengono esportati in BigQuery, i dati vengono scritti in una tabella nuova o esistente.

Per ulteriori informazioni su tutte le azioni che Cloud DLP può eseguire dopo l'ispezione, consulta l'argomento concettuale Azioni.

Per ulteriori informazioni sulle query in esecuzione, vedi quanto segue:

Se configuri l'ispezione di una tabella BigQuery, puoi configurare il trigger di job o job in modo che i risultati esportati contengano gli identificatori della riga. In questo modo puoi collegare i risultati dell'ispezione alle righe che li contengono.

Nel job di ispezione o trigger di job, imposta i seguenti campi sui nomi delle colonne che identificano in modo univoco ogni riga della tabella, ovvero le colonne che hanno lo scopo di una chiave primaria:

  • Se utilizzi la console Google Cloud, imposta il campo Identifica i campi (separati da virgole).
  • Se utilizzi l'API DLP, imposta la proprietà identifyingFields.

Al termine dell'ispezione, gli esiti vengono esportati in BigQuery e ogni risultato conterrà i valori corrispondenti delle colonne specificate. Questi valori saranno riportati nel campo location.content_locations.record_location.record_key.id_values. Puoi quindi utilizzare questi valori per collegare il risultato alla riga specifica nella tabella BigQuery ispezionata.

Query di esempio

Puoi utilizzare le seguenti query di esempio per analizzare i risultati. Puoi anche utilizzare le query in uno strumento di visualizzazione, come Looker Studio. Queste query vengono fornite per aiutarti a iniziare a eseguire query sui dati dei risultati.

In ciascuna delle seguenti query, sostituisci quanto segue:

  • PROJECT_ID: l'identificatore del progetto
  • DATASET: nome del set di dati BigQuery
  • TABLE_ID: l'ID tabella

Seleziona il conteggio di ogni infoType

console 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;

Riga di comando

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;'

Seleziona il conteggio di ogni infoType in base al giorno

console 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;

Riga di comando

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;'

Seleziona il conteggio di ogni infoType in ogni contenitore

console 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;

Riga di comando

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;'

Seleziona i tipi di risultati trovati per ogni colonna di una tabella

Questa query raggruppa tutti i risultati per nome di colonna e vuole lavorare sui risultati di un job di ispezione di BigQuery. Questa query è utile se stai cercando di identificare i tipi possibili per una determinata colonna. Puoi regolare le impostazioni modificando le clausole WHERE e HAVING. Ad esempio, se nella tabella dei risultati sono inclusi più risultati della tabella, puoi limitarli a una sola esecuzione del job o al nome di una tabella.

console 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

La query precedente potrebbe produrre un risultato come questo per una tabella di esempio, dove la colonna infoType ci comunica quante istanze di ogni infoType sono state trovate per quella determinata colonna.

nome_campo infoType
field1 CUSTOM_USER_US [count: 7004] e 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]