Calculer des statistiques numériques et catégoriques

La protection des données sensibles permet de calculer des statistiques numériques et catégorielles pour les colonnes individuelles des tables BigQuery. Sensitive Data Protection peut calculer les éléments suivants :

  • La valeur minimale de la colonne
  • La valeur maximale de la colonne
  • Les quantiles pour la colonne
  • Un histogramme des fréquences de valeur dans la colonne

Calculer des statistiques numériques

Vous pouvez déterminer les valeurs minimales et maximales, ainsi que les quantiles d'une colonne BigQuery individuelle. Pour calculer ces valeurs, vous devez configurer une tâche DlpJob en définissant la métrique de confidentialité NumericalStatsConfig sur le nom de la colonne à analyser. Lorsque vous exécutez la tâche, Sensitive Data Protection calcule les statistiques de la colonne donnée et renvoie les résultats dans l'objet NumericalStatsResult. La protection des données sensibles peut calculer des statistiques pour les types de nombres suivants :

  • entier
  • Nombre à virgule flottante
  • Date
  • Date/Heure
  • Horodatage
  • Heure

Les statistiques renvoyées par un cycle d'analyse incluent la valeur minimale, la valeur maximale, ainsi que 99 quantiles qui partitionnent l'ensemble des valeurs de champ en 100 buckets de taille égale.

Exemples de code

Voici un exemple de code dans plusieurs langages qui montre comment calculer des statistiques numériques à l'aide de Sensitive Data Protection.

C#

Pour savoir comment installer et utiliser la bibliothèque cliente pour la protection des données sensibles, consultez la page Bibliothèques clientes de la protection des données sensibles.

Pour vous authentifier auprès de Sensitive Data Protection, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.


using Google.Api.Gax.ResourceNames;
using Google.Cloud.Dlp.V2;
using Google.Cloud.PubSub.V1;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using static Google.Cloud.Dlp.V2.Action.Types;
using static Google.Cloud.Dlp.V2.PrivacyMetric.Types;

public class RiskAnalysisCreateNumericalStats
{
    public static AnalyzeDataSourceRiskDetails.Types.NumericalStatsResult NumericalStats(
        string callingProjectId,
        string tableProjectId,
        string datasetId,
        string tableId,
        string topicId,
        string subscriptionId,
        string columnName)
    {
        var dlp = DlpServiceClient.Create();

        // Construct + submit the job
        var config = new RiskAnalysisJobConfig
        {
            PrivacyMetric = new PrivacyMetric
            {
                NumericalStatsConfig = new NumericalStatsConfig
                {
                    Field = new FieldId { Name = columnName }
                }
            },
            SourceTable = new BigQueryTable
            {
                ProjectId = tableProjectId,
                DatasetId = datasetId,
                TableId = tableId
            },
            Actions =
                {
                    new Google.Cloud.Dlp.V2.Action
                    {
                        PubSub = new PublishToPubSub
                        {
                            Topic = $"projects/{callingProjectId}/topics/{topicId}"
                        }
                    }
                }
        };

        var submittedJob = dlp.CreateDlpJob(
            new CreateDlpJobRequest
            {
                ParentAsProjectName = new ProjectName(callingProjectId),
                RiskJob = config
            });

        // Listen to pub/sub for the job
        var subscriptionName = new SubscriptionName(callingProjectId, subscriptionId);
        var subscriber = SubscriberClient.CreateAsync(
            subscriptionName).Result;

        // SimpleSubscriber runs your message handle function on multiple
        // threads to maximize throughput.
        var done = new ManualResetEventSlim(false);
        subscriber.StartAsync((PubsubMessage message, CancellationToken cancel) =>
        {
            if (message.Attributes["DlpJobName"] == submittedJob.Name)
            {
                Thread.Sleep(500); // Wait for DLP API results to become consistent
                done.Set();