De-identify data using table bucketing

Transform a column without inspection. To transform a column in which the content is already known, you can skip inspection and specify a transformation directly.

Explore further

For detailed documentation that includes this code sample, see the following:

Code sample

C#

To learn how to install and use the client library for Sensitive Data Protection, see Sensitive Data Protection client libraries .

To authenticate to Sensitive Data Protection, set up Application Default Credentials. For more information, see Set up authentication for a local development environment .

  using 
  
 System 
 ; 
 using 
  
  Google.Api.Gax.ResourceNames 
 
 ; 
 using 
  
  Google.Cloud.Dlp.V2 
 
 ; 
 public 
  
 class 
  
 DeidentifyUsingTableBucketing 
 { 
  
 public 
  
 static 
  
 Table 
  
 DeidentifyData 
 ( 
  
 string 
  
 projectId 
 , 
  
  Table 
 
  
 tableToInspect 
  
 = 
  
 null 
 ) 
  
 { 
  
 // Instantiate dlp client. 
  
 var 
  
 dlp 
  
 = 
  
  DlpServiceClient 
 
 . 
  Create 
 
 (); 
  
 // Construct the table if null. 
  
 if 
  
 ( 
 tableToInspect 
  
 == 
  
 null 
 ) 
  
 { 
  
 var 
  
 row1 
  
 = 
  
 new 
  
  Value 
 
 [] 
  
 { 
  
 new 
  
  Value 
 
  
 { 
  
 StringValue 
  
 = 
  
 "101" 
  
 }, 
  
 new 
  
  Value 
 
  
 { 
  
 StringValue 
  
 = 
  
 "Charles Dickens" 
  
 }, 
  
 new 
  
  Value 
 
  
 { 
  
 StringValue 
  
 = 
  
 "95" 
  
 } 
  
 }; 
  
 var 
  
 row2 
  
 = 
  
 new 
  
  Value 
 
 [] 
  
 { 
  
 new 
  
  Value 
 
  
 { 
  
 StringValue 
  
 = 
  
 "22" 
  
 }, 
  
 new 
  
  Value 
 
  
 { 
  
 StringValue 
  
 = 
  
 "Jane Austin" 
  
 }, 
  
 new 
  
  Value 
 
  
 { 
  
 StringValue 
  
 = 
  
 "21" 
  
 } 
  
 }; 
  
 var 
  
 row3 
  
 = 
  
 new 
  
  Value 
 
 [] 
  
 { 
  
 new 
  
  Value 
 
  
 { 
  
 StringValue 
  
 = 
  
 "55" 
  
 }, 
  
 new 
  
  Value 
 
  
 { 
  
 StringValue 
  
 = 
  
 "Mark Twain" 
  
 }, 
  
 new 
  
  Value 
 
  
 { 
  
 StringValue 
  
 = 
  
 "75" 
  
 } 
  
 }; 
  
 tableToInspect 
  
 = 
  
 new 
  
  Table 
 
  
 { 
  
 Headers 
  
 = 
  
 { 
  
 new 
  
  FieldId 
 
  
 { 
  
 Name 
  
 = 
  
 "AGE" 
  
 }, 
  
 new 
  
  FieldId 
 
  
 { 
  
 Name 
  
 = 
  
 "PATIENT" 
  
 }, 
  
 new 
  
  FieldId 
 
  
 { 
  
 Name 
  
 = 
  
 "HAPPINESS SCORE" 
  
 } 
  
 }, 
  
 Rows 
  
 = 
  
 { 
  
 new 
  
 Table 
 . 
 Types 
 . 
 Row 
  
 { 
  
 Values 
  
 = 
  
 { 
  
 row1 
  
 } 
  
 }, 
  
 new 
  
 Table 
 . 
 Types 
 . 
 Row 
  
 { 
  
 Values 
  
 = 
  
 { 
  
 row2 
  
 } 
  
 }, 
  
 new 
  
 Table 
 . 
 Types 
 . 
 Row 
  
 { 
  
 Values 
  
 = 
  
 { 
  
 row3 
  
 } 
  
 } 
  
 } 
  
 }; 
  
 } 
  
 // Construct the table content item. 
  
 var 
  
 contentItem 
  
 = 
  
 new 
  
  ContentItem 
 
  
 { 
  
 Table 
  
 = 
  
 tableToInspect 
  
 }; 
  
 // Specify how the content should be de-identified. 
  
 var 
  
 fixedSizeBucketingConfig 
  
 = 
  
 new 
  
  FixedSizeBucketingConfig 
 
  
 { 
  
 BucketSize 
  
 = 
  
 10 
 , 
  
 LowerBound 
  
 = 
  
 new 
  
  Value 
 
  
 { 
  
 IntegerValue 
  
 = 
  
 0 
  
 }, 
  
 UpperBound 
  
 = 
  
 new 
  
  Value 
 
  
 { 
  
 IntegerValue 
  
 = 
  
 100 
  
 }, 
  
 }; 
  
 // Specify the fields to be encrypted. 
  
 var 
  
 fields 
  
 = 
  
 new 
  
  FieldId 
 
 [] 
  
 { 
  
 new 
  
  FieldId 
 
  
 { 
  
 Name 
  
 = 
  
 "HAPPINESS SCORE" 
  
 } 
  
 }; 
  
 // Associate the encryption with the specified field. 
  
 var 
  
 fieldTransformation 
  
 = 
  
 new 
  
  FieldTransformation 
 
  
 { 
  
 PrimitiveTransformation 
  
 = 
  
 new 
  
  PrimitiveTransformation 
 
  
 { 
  
 FixedSizeBucketingConfig 
  
 = 
  
 fixedSizeBucketingConfig 
  
 }, 
  
 Fields 
  
 = 
  
 { 
  
 fields 
  
 } 
  
 }; 
  
 // Construct the deidentify config. 
  
 var 
  
 deidentifyConfig 
  
 = 
  
 new 
  
  DeidentifyConfig 
 
  
 { 
  
 RecordTransformations 
  
 = 
  
 new 
  
  RecordTransformations 
 
  
 { 
  
 FieldTransformations 
  
 = 
  
 { 
  
 fieldTransformation 
  
 } 
  
 } 
  
 }; 
  
 // Construct the request. 
  
 var 
  
 request 
  
 = 
  
 new 
  
  DeidentifyContentRequest 
 
  
 { 
  
 ParentAsLocationName 
  
 = 
  
 new 
  
  LocationName 
 
 ( 
 projectId 
 , 
  
 "global" 
 ), 
  
 DeidentifyConfig 
  
 = 
  
 deidentifyConfig 
 , 
  
 Item 
  
 = 
  
 contentItem 
 , 
  
 }; 
  
 // Call the API. 
  
 var 
  
 response 
  
 = 
  
 dlp 
 . 
 DeidentifyContent 
 ( 
 request 
 ); 
  
 // Inspect the response. 
  
 Console 
 . 
 WriteLine 
 ( 
 response 
 . 
 Item 
 . 
  Table 
 
 ); 
  
 return 
  
 response 
 . 
 Item 
 . 
  Table 
 
 ; 
  
 } 
 } 
 

Go

To learn how to install and use the client library for Sensitive Data Protection, see Sensitive Data Protection client libraries .

To authenticate to Sensitive Data Protection, set up Application Default Credentials. For more information, see Set up authentication for a local development environment .

  import 
  
 ( 
  
 "context" 
  
 "fmt" 
  
 "io" 
  
 dlp 
  
 "cloud.google.com/go/dlp/apiv2" 
  
 "cloud.google.com/go/dlp/apiv2/dlppb" 
 ) 
 // deIdentifyTableBucketing de-identifies data using table bucketing 
 func 
  
 deIdentifyTableBucketing 
 ( 
 w 
  
 io 
 . 
 Writer 
 , 
  
 projectID 
  
 string 
 ) 
  
 error 
  
 { 
  
 // projectId := "your-project-id" 
  
 // table := "your-table-value" 
  
 row1 
  
 := 
  
& dlppb 
 . 
 Table_Row 
 { 
  
 Values 
 : 
  
 [] 
 * 
 dlppb 
 . 
 Value 
 { 
  
 { 
 Type 
 : 
  
& dlppb 
 . 
 Value_StringValue 
 { 
 StringValue 
 : 
  
 "22" 
 }}, 
  
 { 
 Type 
 : 
  
& dlppb 
 . 
 Value_StringValue 
 { 
 StringValue 
 : 
  
 "Jane Austen" 
 }}, 
  
 { 
 Type 
 : 
  
& dlppb 
 . 
 Value_StringValue 
 { 
 StringValue 
 : 
  
 "21" 
 }}, 
  
 }, 
  
 } 
  
 row2 
  
 := 
  
& dlppb 
 . 
 Table_Row 
 { 
  
 Values 
 : 
  
 [] 
 * 
 dlppb 
 . 
 Value 
 { 
  
 { 
 Type 
 : 
  
& dlppb 
 . 
 Value_StringValue 
 { 
 StringValue 
 : 
  
 "55" 
 }}, 
  
 { 
 Type 
 : 
  
& dlppb 
 . 
 Value_StringValue 
 { 
 StringValue 
 : 
  
 "Mark Twain" 
 }}, 
  
 { 
 Type 
 : 
  
& dlppb 
 . 
 Value_StringValue 
 { 
 StringValue 
 : 
  
 "75" 
 }}, 
  
 }, 
  
 } 
  
 row3 
  
 := 
  
& dlppb 
 . 
 Table_Row 
 { 
  
 Values 
 : 
  
 [] 
 * 
 dlppb 
 . 
 Value 
 { 
  
 { 
 Type 
 : 
  
& dlppb 
 . 
 Value_StringValue 
 { 
 StringValue 
 : 
  
 "101" 
 }}, 
  
 { 
 Type 
 : 
  
& dlppb 
 . 
 Value_StringValue 
 { 
 StringValue 
 : 
  
 "Charles Dickens" 
 }}, 
  
 { 
 Type 
 : 
  
& dlppb 
 . 
 Value_StringValue 
 { 
 StringValue 
 : 
  
 "95" 
 }}, 
  
 }, 
  
 } 
  
 table 
  
 := 
  
& dlppb 
 . 
 Table 
 { 
  
 Headers 
 : 
  
 [] 
 * 
 dlppb 
 . 
 FieldId 
 { 
  
 { 
 Name 
 : 
  
 "AGE" 
 }, 
  
 { 
 Name 
 : 
  
 "PATIENT" 
 }, 
  
 { 
 Name 
 : 
  
 "HAPPINESS SCORE" 
 }, 
  
 }, 
  
 Rows 
 : 
  
 [] 
 * 
 dlppb 
 . 
 Table_Row 
 { 
  
 { 
 Values 
 : 
  
 row1 
 . 
 Values 
 }, 
  
 { 
 Values 
 : 
  
 row2 
 . 
 Values 
 }, 
  
 { 
 Values 
 : 
  
 row3 
 . 
 Values 
 }, 
  
 }, 
  
 } 
  
 ctx 
  
 := 
  
 context 
 . 
 Background 
 () 
  
 // Initialize a client once and reuse it to send multiple requests. Clients 
  
 // are safe to use across goroutines. When the client is no longer needed, 
  
 // call the Close method to cleanup its resources. 
  
 client 
 , 
  
 err 
  
 := 
  
 dlp 
 . 
  NewClient 
 
 ( 
 ctx 
 ) 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 err 
  
 } 
  
 // Closing the client safely cleans up background resources. 
  
 defer 
  
 client 
 . 
  Close 
 
 () 
  
 // Specify what content you want the service to de-identify. 
  
 contentItem 
  
 := 
  
& dlppb 
 . 
 ContentItem 
 { 
  
 DataItem 
 : 
  
& dlppb 
 . 
 ContentItem_Table 
 { 
  
 Table 
 : 
  
 table 
 , 
  
 }, 
  
 } 
  
 // Specify how the content should be de-identified. 
  
 fixedSizeBucketingConfig 
  
 := 
  
& dlppb 
 . 
 FixedSizeBucketingConfig 
 { 
  
 BucketSize 
 : 
  
 10 
 , 
  
 LowerBound 
 : 
  
& dlppb 
 . 
 Value 
 { 
  
 Type 
 : 
  
& dlppb 
 . 
 Value_IntegerValue 
 { 
  
 IntegerValue 
 : 
  
 0 
 , 
  
 }, 
  
 }, 
  
 UpperBound 
 : 
  
& dlppb 
 . 
 Value 
 { 
  
 Type 
 : 
  
& dlppb 
 . 
 Value_IntegerValue 
 { 
  
 IntegerValue 
 : 
  
 100 
 , 
  
 }, 
  
 }, 
  
 } 
  
 primitiveTransformation 
  
 := 
  
& dlppb 
 . 
 PrimitiveTransformation_FixedSizeBucketingConfig 
 { 
  
 FixedSizeBucketingConfig 
 : 
  
 fixedSizeBucketingConfig 
 , 
  
 } 
  
 // Specify field to be encrypted. 
  
 fieldId 
  
 := 
  
& dlppb 
 . 
 FieldId 
 { 
  
 Name 
 : 
  
 "HAPPINESS SCORE" 
 , 
  
 } 
  
 // Associate the encryption with the specified field. 
  
 fieldTransformation 
  
 := 
  
& dlppb 
 . 
 FieldTransformation 
 { 
  
 Transformation 
 : 
  
& dlppb 
 . 
 FieldTransformation_PrimitiveTransformation 
 { 
  
 PrimitiveTransformation 
 : 
  
& dlppb 
 . 
 PrimitiveTransformation 
 { 
  
 Transformation 
 : 
  
 primitiveTransformation 
 , 
  
 }, 
  
 }, 
  
 Fields 
 : 
  
 [] 
 * 
 dlppb 
 . 
 FieldId 
 { 
  
 fieldId 
 , 
  
 }, 
  
 } 
  
 recordTransformations 
  
 := 
  
& dlppb 
 . 
 RecordTransformations 
 { 
  
 FieldTransformations 
 : 
  
 [] 
 * 
 dlppb 
 . 
 FieldTransformation 
 { 
  
 fieldTransformation 
 , 
  
 }, 
  
 } 
  
 // Construct the de-identification request to be sent by the client. 
  
 req 
  
 := 
  
& dlppb 
 . 
 DeidentifyContentRequest 
 { 
  
 Parent 
 : 
  
 fmt 
 . 
 Sprintf 
 ( 
 "projects/%s/locations/global" 
 , 
  
 projectID 
 ), 
  
 DeidentifyConfig 
 : 
  
& dlppb 
 . 
 DeidentifyConfig 
 { 
  
 Transformation 
 : 
  
& dlppb 
 . 
 DeidentifyConfig_RecordTransformations 
 { 
  
 RecordTransformations 
 : 
  
 recordTransformations 
 , 
  
 }, 
  
 }, 
  
 Item 
 : 
  
 contentItem 
 , 
  
 } 
  
 // Send the request. 
  
 resp 
 , 
  
 err 
  
 := 
  
 client 
 . 
 DeidentifyContent 
 ( 
 ctx 
 , 
  
 req 
 ) 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 err 
  
 } 
  
 // Print the results. 
  
 fmt 
 . 
 Fprintf 
 ( 
 w 
 , 
  
 "Table after de-identification : %v" 
 , 
  
 resp 
 . 
 GetItem 
 (). 
 GetTable 
 ()) 
  
 return 
  
 nil 
 } 
 

Java

To learn how to install and use the client library for Sensitive Data Protection, see Sensitive Data Protection client libraries .

To authenticate to Sensitive Data Protection, set up Application Default Credentials. For more information, see Set up authentication for a local development environment .

  import 
  
 com.google.cloud.dlp.v2. DlpServiceClient 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. ContentItem 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. DeidentifyConfig 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. DeidentifyContentRequest 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. DeidentifyContentResponse 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. FieldId 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. FieldTransformation 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. FixedSizeBucketingConfig 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. LocationName 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. PrimitiveTransformation 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. RecordTransformations 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. Table 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. Table 
. Row 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. Value 
 
 ; 
 import 
  
 java.io.IOException 
 ; 
 public 
  
 class 
 DeIdentifyTableBucketing 
  
 { 
  
 public 
  
 static 
  
 void 
  
 main 
 ( 
 String 
 [] 
  
 args 
 ) 
  
 throws 
  
 IOException 
  
 { 
  
 // TODO(developer): Replace these variables before running the sample. 
  
 String 
  
 projectId 
  
 = 
  
 "your-project-id" 
 ; 
  
  Table 
 
  
 tableToDeIdentify 
  
 = 
  
  Table 
 
 . 
 newBuilder 
 () 
  
 . 
  addHeaders 
 
 ( 
  FieldId 
 
 . 
 newBuilder 
 (). 
 setName 
 ( 
 "AGE" 
 ). 
 build 
 ()) 
  
 . 
  addHeaders 
 
 ( 
  FieldId 
 
 . 
 newBuilder 
 (). 
 setName 
 ( 
 "PATIENT" 
 ). 
 build 
 ()) 
  
 . 
  addHeaders 
 
 ( 
  FieldId 
 
 . 
 newBuilder 
 (). 
 setName 
 ( 
 "HAPPINESS SCORE" 
 ). 
 build 
 ()) 
  
 . 
  addRows 
 
 ( 
  
  Row 
 
 . 
 newBuilder 
 () 
  
 . 
  addValues 
 
 ( 
  Value 
 
 . 
 newBuilder 
 (). 
  setStringValue 
 
 ( 
 "101" 
 ). 
 build 
 ()) 
  
 . 
  addValues 
 
 ( 
  Value 
 
 . 
 newBuilder 
 (). 
  setStringValue 
 
 ( 
 "Charles Dickens" 
 ). 
 build 
 ()) 
  
 . 
  addValues 
 
 ( 
  Value 
 
 . 
 newBuilder 
 (). 
  setStringValue 
 
 ( 
 "95" 
 ). 
 build 
 ()) 
  
 . 
 build 
 ()) 
  
 . 
  addRows 
 
 ( 
  
  Row 
 
 . 
 newBuilder 
 () 
  
 . 
  addValues 
 
 ( 
  Value 
 
 . 
 newBuilder 
 (). 
  setStringValue 
 
 ( 
 "22" 
 ). 
 build 
 ()) 
  
 . 
  addValues 
 
 ( 
  Value 
 
 . 
 newBuilder 
 (). 
  setStringValue 
 
 ( 
 "Jane Austen" 
 ). 
 build 
 ()) 
  
 . 
  addValues 
 
 ( 
  Value 
 
 . 
 newBuilder 
 (). 
  setStringValue 
 
 ( 
 "21" 
 ). 
 build 
 ()) 
  
 . 
 build 
 ()) 
  
 . 
  addRows 
 
 ( 
  
  Row 
 
 . 
 newBuilder 
 () 
  
 . 
  addValues 
 
 ( 
  Value 
 
 . 
 newBuilder 
 (). 
  setStringValue 
 
 ( 
 "55" 
 ). 
 build 
 ()) 
  
 . 
  addValues 
 
 ( 
  Value 
 
 . 
 newBuilder 
 (). 
  setStringValue 
 
 ( 
 "Mark Twain" 
 ). 
 build 
 ()) 
  
 . 
  addValues 
 
 ( 
  Value 
 
 . 
 newBuilder 
 (). 
  setStringValue 
 
 ( 
 "75" 
 ). 
 build 
 ()) 
  
 . 
 build 
 ()) 
  
 . 
 build 
 (); 
  
 deIdentifyTableBucketing 
 ( 
 projectId 
 , 
  
 tableToDeIdentify 
 ); 
  
 } 
  
 public 
  
 static 
  
  Table 
 
  
 deIdentifyTableBucketing 
 ( 
 String 
  
 projectId 
 , 
  
  Table 
 
  
 tableToDeIdentify 
 ) 
  
 throws 
  
 IOException 
  
 { 
  
 // Initialize client that will be used to send requests. This client only needs to be created 
  
 // once, and can be reused for multiple requests. After completing all of your requests, call 
  
 // the "close" method on the client to safely clean up any remaining background resources. 
  
 try 
  
 ( 
  DlpServiceClient 
 
  
 dlp 
  
 = 
  
  DlpServiceClient 
 
 . 
 create 
 ()) 
  
 { 
  
 // Specify what content you want the service to de-identify. 
  
  ContentItem 
 
  
 contentItem 
  
 = 
  
  ContentItem 
 
 . 
 newBuilder 
 (). 
 setTable 
 ( 
 tableToDeIdentify 
 ). 
 build 
 (); 
  
 // Specify how the content should be de-identified. 
  
  FixedSizeBucketingConfig 
 
  
 fixedSizeBucketingConfig 
  
 = 
  
  FixedSizeBucketingConfig 
 
 . 
 newBuilder 
 () 
  
 . 
 setBucketSize 
 ( 
 10 
 ) 
  
 . 
  setLowerBound 
 
 ( 
  Value 
 
 . 
 newBuilder 
 (). 
  setIntegerValue 
 
 ( 
 0 
 ). 
 build 
 ()) 
  
 . 
  setUpperBound 
 
 ( 
  Value 
 
 . 
 newBuilder 
 (). 
  setIntegerValue 
 
 ( 
 100 
 ). 
 build 
 ()) 
  
 . 
 build 
 (); 
  
  PrimitiveTransformation 
 
  
 primitiveTransformation 
  
 = 
  
  PrimitiveTransformation 
 
 . 
 newBuilder 
 () 
  
 . 
  setFixedSizeBucketingConfig 
 
 ( 
 fixedSizeBucketingConfig 
 ) 
  
 . 
 build 
 (); 
  
 // Specify field to be encrypted. 
  
  FieldId 
 
  
 fieldId 
  
 = 
  
  FieldId 
 
 . 
 newBuilder 
 (). 
 setName 
 ( 
 "HAPPINESS SCORE" 
 ). 
 build 
 (); 
  
 // Associate the encryption with the specified field. 
  
  FieldTransformation 
 
  
 fieldTransformation 
  
 = 
  
  FieldTransformation 
 
 . 
 newBuilder 
 () 
  
 . 
 setPrimitiveTransformation 
 ( 
 primitiveTransformation 
 ) 
  
 . 
  addFields 
 
 ( 
 fieldId 
 ) 
  
 . 
 build 
 (); 
  
  RecordTransformations 
 
  
 transformations 
  
 = 
  
  RecordTransformations 
 
 . 
 newBuilder 
 (). 
 addFieldTransformations 
 ( 
 fieldTransformation 
 ). 
 build 
 (); 
  
  DeidentifyConfig 
 
  
 deidentifyConfig 
  
 = 
  
  DeidentifyConfig 
 
 . 
 newBuilder 
 (). 
  setRecordTransformations 
 
 ( 
 transformations 
 ). 
 build 
 (); 
  
 // Combine configurations into a request for the service. 
  
  DeidentifyContentRequest 
 
  
 request 
  
 = 
  
  DeidentifyContentRequest 
 
 . 
 newBuilder 
 () 
  
 . 
 setParent 
 ( 
  LocationName 
 
 . 
 of 
 ( 
 projectId 
 , 
  
 "global" 
 ). 
 toString 
 ()) 
  
 . 
 setItem 
 ( 
 contentItem 
 ) 
  
 . 
 setDeidentifyConfig 
 ( 
 deidentifyConfig 
 ) 
  
 . 
 build 
 (); 
  
 // Send the request and receive response from the service. 
  
  DeidentifyContentResponse 
 
  
 response 
  
 = 
  
 dlp 
 . 
 deidentifyContent 
 ( 
 request 
 ); 
  
 // Print the results. 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "Table after de-identification: " 
  
 + 
  
 response 
 . 
  getItem 
 
 (). 
 getTable 
 ()); 
  
 return 
  
 response 
 . 
  getItem 
 
 (). 
 getTable 
 (); 
  
 } 
  
 } 
 } 
 

Node.js

To learn how to install and use the client library for Sensitive Data Protection, see Sensitive Data Protection client libraries .

To authenticate to Sensitive Data Protection, set up Application Default Credentials. For more information, see Set up authentication for a local development environment .

  // Imports the Google Cloud Data Loss Prevention library 
 const 
  
 DLP 
  
 = 
  
 require 
 ( 
 ' @google-cloud/dlp 
' 
 ); 
 // Initialize google DLP Client 
 const 
  
 dlp 
  
 = 
  
 new 
  
 DLP 
 . 
  DlpServiceClient 
 
 (); 
 // The project ID to run the API call under 
 // const projectId = 'my-project'; 
 // Construct the tabular data 
 const 
  
 tablularData 
  
 = 
  
 { 
  
 headers 
 : 
  
 [{ 
 name 
 : 
  
 'AGE' 
 }, 
  
 { 
 name 
 : 
  
 'PATIENT' 
 }, 
  
 { 
 name 
 : 
  
 'HAPPINESS SCORE' 
 }], 
  
 rows 
 : 
  
 [ 
  
 { 
  
 values 
 : 
  
 [ 
  
 { 
 integerValue 
 : 
  
 101 
 }, 
  
 { 
 stringValue 
 : 
  
 'Charles Dickens' 
 }, 
  
 { 
 integerValue 
 : 
  
 95 
 }, 
  
 ], 
  
 }, 
  
 { 
  
 values 
 : 
  
 [ 
  
 { 
 integerValue 
 : 
  
 22 
 }, 
  
 { 
 stringValue 
 : 
  
 'Jane Austen' 
 }, 
  
 { 
 integerValue 
 : 
  
 21 
 }, 
  
 ], 
  
 }, 
  
 { 
  
 values 
 : 
  
 [ 
  
 { 
 integerValue 
 : 
  
 55 
 }, 
  
 { 
 stringValue 
 : 
  
 'Mark Twain' 
 }, 
  
 { 
 integerValue 
 : 
  
 75 
 }, 
  
 ], 
  
 }, 
  
 ], 
 }; 
 async 
  
 function 
  
 deIdentifyTableBucketing 
 () 
  
 { 
  
 // Specify field to be de-identified. 
  
 const 
  
 targetColumn 
  
 = 
  
 { 
 name 
 : 
  
 'HAPPINESS SCORE' 
 }; 
  
 // Specify how the content should be de-identified. 
  
 const 
  
 bucketingConfig 
  
 = 
  
 { 
  
 bucketSize 
 : 
  
 10 
 , 
  
 lowerBound 
 : 
  
 { 
  
 integerValue 
 : 
  
 0 
 , 
  
 }, 
  
 upperBound 
 : 
  
 { 
  
 integerValue 
 : 
  
 100 
 , 
  
 }, 
  
 }; 
  
 const 
  
 primitiveTransformation 
  
 = 
  
 { 
  
 fixedSizeBucketingConfig 
 : 
  
 bucketingConfig 
 , 
  
 }; 
  
 // Combine configurations into a request for the service. 
  
 const 
  
 request 
  
 = 
  
 { 
  
 parent 
 : 
  
 `projects/ 
 ${ 
 projectId 
 } 
 /locations/global` 
 , 
  
 item 
 : 
  
 { 
  
 table 
 : 
  
 tablularData 
 , 
  
 }, 
  
 deidentifyConfig 
 : 
  
 { 
  
 recordTransformations 
 : 
  
 { 
  
 fieldTransformations 
 : 
  
 [ 
  
 { 
  
 fields 
 : 
  
 [ 
 targetColumn 
 ], 
  
 primitiveTransformation 
 , 
  
 }, 
  
 ], 
  
 }, 
  
 }, 
  
 }; 
  
 // Send the request and receive response from the service 
  
 const 
  
 [ 
 response 
 ] 
  
 = 
  
 await 
  
 dlp 
 . 
 deidentifyContent 
 ( 
 request 
 ); 
  
 // Print the results. 
  
 console 
 . 
 log 
 ( 
  
 `Table after de-identification: 
 ${ 
 JSON 
 . 
 stringify 
 ( 
 response 
 . 
 item 
 . 
 table 
 ) 
 } 
 ` 
  
 ); 
 } 
 deIdentifyTableBucketing 
 (); 
 

PHP

To learn how to install and use the client library for Sensitive Data Protection, see Sensitive Data Protection client libraries .

To authenticate to Sensitive Data Protection, set up Application Default Credentials. For more information, see Set up authentication for a local development environment .

  use Google\Cloud\Dlp\V2\Client\DlpServiceClient; 
 use Google\Cloud\Dlp\V2\ContentItem; 
 use Google\Cloud\Dlp\V2\DeidentifyConfig; 
 use Google\Cloud\Dlp\V2\DeidentifyContentRequest; 
 use Google\Cloud\Dlp\V2\FieldId; 
 use Google\Cloud\Dlp\V2\FieldTransformation; 
 use Google\Cloud\Dlp\V2\FixedSizeBucketingConfig; 
 use Google\Cloud\Dlp\V2\PrimitiveTransformation; 
 use Google\Cloud\Dlp\V2\RecordTransformations; 
 use Google\Cloud\Dlp\V2\Table; 
 use Google\Cloud\Dlp\V2\Table\Row; 
 use Google\Cloud\Dlp\V2\Value; 
 /** 
 * De-identify data using table bucketing 
 * Transform a column without inspection. To transform a column in which the content is 
 * already known, you can skip inspection and specify a transformation directly. 
 * 
 * @param string $callingProjectId      The Google Cloud project id to use as a parent resource. 
 * @param string $inputCsvFile          The input file(csv) path  to deidentify 
 * @param string $outputCsvFile         The oupt file path to save deidentify content 
 * 
 */ 
 function deidentify_table_bucketing( 
 // TODO(developer): Replace sample parameters before running the code. 
 string $callingProjectId, 
 string $inputCsvFile = './test/data/table2.csv', 
 string $outputCsvFile = './test/data/deidentify_table_bucketing_output.csv' 
 ): void { 
 // Instantiate a client. 
 $dlp = new DlpServiceClient(); 
 // Read a CSV file 
 $csvLines = file($inputCsvFile, FILE_IGNORE_NEW_LINES); 
 $csvHeaders = explode(',', $csvLines[0]); 
 $csvRows = array_slice($csvLines, 1); 
 // Convert CSV file into protobuf objects 
 $tableHeaders = array_map(function ($csvHeader) { 
 return (new FieldId) 
 ->setName($csvHeader); 
 }, $csvHeaders); 
 $tableRows = array_map(function ($csvRow) { 
 $rowValues = array_map(function ($csvValue) { 
 return (new Value()) 
 ->setStringValue($csvValue); 
 }, explode(',', $csvRow)); 
 return (new Row()) 
 ->setValues($rowValues); 
 }, $csvRows); 
 // Construct the table object 
 $tableToDeIdentify = (new Table()) 
 ->setHeaders($tableHeaders) 
 ->setRows($tableRows); 
 // Specify what content you want the service to de-identify. 
 $contentItem = (new ContentItem()) 
 ->setTable($tableToDeIdentify); 
 // Specify how the content should be de-identified. 
 $fixedSizeBucketingConfig = (new FixedSizeBucketingConfig()) 
 ->setBucketSize(10) 
 ->setLowerBound((new Value()) 
 ->setIntegerValue(10)) 
 ->setUpperBound((new Value()) 
 ->setIntegerValue(100)); 
 $primitiveTransformation = (new PrimitiveTransformation()) 
 ->setFixedSizeBucketingConfig($fixedSizeBucketingConfig); 
 // Specify the field to to apply bucketing transform on 
 $fieldId = (new FieldId()) 
 ->setName('HAPPINESS_SCORE'); 
 // Associate the encryption with the specified field. 
 $fieldTransformation = (new FieldTransformation()) 
 ->setPrimitiveTransformation($primitiveTransformation) 
 ->setFields([$fieldId]); 
 $recordTransformations = (new RecordTransformations()) 
 ->setFieldTransformations([$fieldTransformation]); 
 // Create the deidentification configuration object 
 $deidentifyConfig = (new DeidentifyConfig()) 
 ->setRecordTransformations($recordTransformations); 
 $parent = "projects/$callingProjectId/locations/global"; 
 // Run request 
 $deidentifyContentRequest = (new DeidentifyContentRequest()) 
 ->setParent($parent) 
 ->setDeidentifyConfig($deidentifyConfig) 
 ->setItem($contentItem); 
 $response = $dlp->deidentifyContent($deidentifyContentRequest); 
 // Print results 
 $csvRef = fopen($outputCsvFile, 'w'); 
 fputcsv($csvRef, $csvHeaders); 
 foreach ($response->getItem()->getTable()->getRows() as $tableRow) { 
 $values = array_map(function ($tableValue) { 
 return $tableValue->getStringValue(); 
 }, iterator_to_array($tableRow->getValues())); 
 fputcsv($csvRef, $values); 
 }; 
 printf($outputCsvFile); 
 } 
 

Python

To learn how to install and use the client library for Sensitive Data Protection, see Sensitive Data Protection client libraries .

To authenticate to Sensitive Data Protection, set up Application Default Credentials. For more information, see Set up authentication for a local development environment .

  from 
  
 typing 
  
 import 
 Dict 
 , 
 List 
 , 
 Union 
 import 
  
 google.cloud.dlp 
 from 
  
 google.cloud.dlp_v2 
  
 import 
  types 
 
 def 
  
 deidentify_table_bucketing 
 ( 
 project 
 : 
 str 
 , 
 table_data 
 : 
 Dict 
 [ 
 str 
 , 
 Union 
 [ 
 List 
 [ 
 str 
 ], 
 List 
 [ 
 List 
 [ 
 str 
 ]]]], 
 deid_content_list 
 : 
 List 
 [ 
 str 
 ], 
 bucket_size 
 : 
 int 
 , 
 bucketing_lower_bound 
 : 
 int 
 , 
 bucketing_upper_bound 
 : 
 int 
 , 
 ) 
 - 
> types 
 . 
 dlp 
 . 
 Table 
 : 
  
 """Uses the Data Loss Prevention API to de-identify sensitive data in a 
 table by replacing them with fixed size bucket ranges. 
 Args: 
 project: The Google Cloud project id to use as a parent resource. 
 table_data: Dictionary representing table data. 
 deid_content_list: A list of fields in table to de-identify. 
 bucket_size: Size of each bucket for fixed sized bucketing 
 (except for minimum and maximum buckets). So if ``bucketing_lower_bound`` = 10, 
 ``bucketing_upper_bound`` = 89, and ``bucket_size`` = 10, then the 
 following buckets would be used: -10, 10-20, 20-30, 30-40, 
 40-50, 50-60, 60-70, 70-80, 80-89, 89+. 
 bucketing_lower_bound: Lower bound value of buckets. 
 bucketing_upper_bound:  Upper bound value of buckets. 
 Returns: 
 De-identified table is returned; 
 the response from the API is also printed to the terminal. 
 Example: 
 >> $ python deidentify_table_bucketing.py \ 
 '{"header": ["email", "phone number", "age"], 
 "rows": [["robertfrost@example.com", "4232342345", "35"], 
 ["johndoe@example.com", "4253458383", "68"]]}' \ 
 ["age"] 10 0 100 
 >>  '{"header": ["email", "phone number", "age"], 
 "rows": [["robertfrost@example.com", "4232342345", "30:40"], 
 ["johndoe@example.com", "4253458383", "60:70"]]}' 
 """ 
 # Instantiate a client. 
 dlp 
 = 
 google 
 . 
 cloud 
 . 
  dlp_v2 
 
 . 
  DlpServiceClient 
 
 () 
 # Convert the project id into a full resource id. 
 parent 
 = 
 f 
 "projects/ 
 { 
 project 
 } 
 /locations/global" 
 # Construct the `table`. For more details on the table schema, please see 
 # https://cloud.google.com/dlp/docs/reference/rest/v2/ContentItem#Table 
 headers 
 = 
 [{ 
 "name" 
 : 
 val 
 } 
 for 
 val 
 in 
 table_data 
 [ 
 "header" 
 ]] 
 rows 
 = 
 [] 
 for 
 row 
 in 
 table_data 
 [ 
 "rows" 
 ]: 
 rows 
 . 
 append 
 ({ 
 "values" 
 : 
 [{ 
 "string_value" 
 : 
 cell_val 
 } 
 for 
 cell_val 
 in 
 row 
 ]}) 
 table 
 = 
 { 
 "headers" 
 : 
 headers 
 , 
 "rows" 
 : 
 rows 
 } 
 # Construct the `item`. 
 item 
 = 
 { 
 "table" 
 : 
 table 
 } 
 # Construct fixed sized bucketing configuration 
 fixed_size_bucketing_config 
 = 
 { 
 "bucket_size" 
 : 
 bucket_size 
 , 
 "lower_bound" 
 : 
 { 
 "integer_value" 
 : 
 bucketing_lower_bound 
 }, 
 "upper_bound" 
 : 
 { 
 "integer_value" 
 : 
 bucketing_upper_bound 
 }, 
 } 
 # Specify fields to be de-identified 
 deid_content_list 
 = 
 [{ 
 "name" 
 : 
 _i 
 } 
 for 
 _i 
 in 
 deid_content_list 
 ] 
 # Construct Deidentify Config 
 deidentify_config 
 = 
 { 
 "record_transformations" 
 : 
 { 
 "field_transformations" 
 : 
 [ 
 { 
 "fields" 
 : 
 deid_content_list 
 , 
 "primitive_transformation" 
 : 
 { 
 "fixed_size_bucketing_config" 
 : 
 fixed_size_bucketing_config 
 }, 
 } 
 ] 
 } 
 } 
 # Call the API. 
 response 
 = 
 dlp 
 . 
  deidentify_content 
 
 ( 
 request 
 = 
 { 
 "parent" 
 : 
 parent 
 , 
 "deidentify_config" 
 : 
 deidentify_config 
 , 
 "item" 
 : 
 item 
 } 
 ) 
 # Print the results. 
 print 
 ( 
 f 
 "Table after de-identification: 
 { 
 response 
 . 
 item 
 . 
 table 
 } 
 " 
 ) 
 # Return the response. 
 return 
 response 
 . 
 item 
 . 
 table 
 

What's next

To search and filter code samples for other Google Cloud products, see the Google Cloud sample browser .

Create a Mobile Website
View Site in Mobile | Classic
Share by: