De-identify table data: Suppress a row based on the content of a column

Suppress a row based on the content of a column. You can remove a row entirely based on the content that appears in any column. This example suppresses the record for "Charles Dickens," as this patient is over 89 years old.

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 
  
 DeidentifyTableWithRowSuppress 
 { 
  
 public 
  
 static 
  
 Table 
  
 DeidentifyTable 
 ( 
  
 string 
  
 projectId 
 , 
  
  Table 
 
  
 tableToInspect 
  
 = 
  
 null 
 ) 
  
 { 
  
 // Instantiate a 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 byte content item. 
  
 var 
  
 contentItem 
  
 = 
  
 new 
  
  ContentItem 
 
  
 { 
  
 Table 
  
 = 
  
 tableToInspect 
  
 }; 
  
 // Construct the conditions. 
  
 var 
  
 conditions 
  
 = 
  
 new 
  
 RecordCondition 
 . 
 Types 
 . 
 Conditions 
  
 { 
  
 Conditions_ 
  
 = 
  
 { 
  
 new 
  
 RecordCondition 
 . 
 Types 
 . 
 Condition 
  
 { 
  
 Field 
  
 = 
  
 new 
  
  FieldId 
 
  
 { 
  
 Name 
  
 = 
  
 "AGE" 
  
 }, 
  
 Operator 
  
 = 
  
  RelationalOperator 
 
 . 
  GreaterThan 
 
 , 
  
 Value 
  
 = 
  
 new 
  
  Value 
 
  
 { 
  
 IntegerValue 
  
 = 
  
 89 
  
 } 
  
 } 
  
 } 
  
 }; 
  
 // Construct the deidentify config using the record suppression and conditions. 
  
 var 
  
 deidentifyConfig 
  
 = 
  
 new 
  
  DeidentifyConfig 
 
  
 { 
  
 RecordTransformations 
  
 = 
  
 new 
  
  RecordTransformations 
 
  
 { 
  
 RecordSuppressions 
  
 = 
  
 { 
  
 new 
  
  RecordSuppression 
 
  
 { 
  
 Condition 
  
 = 
  
 new 
  
  RecordCondition 
 
  
 { 
  
 Expressions 
  
 = 
  
 new 
  
 RecordCondition 
 . 
 Types 
 . 
 Expressions 
  
 { 
  
 Conditions 
  
 = 
  
 conditions 
  
 } 
  
 } 
  
 } 
  
 } 
  
 } 
  
 }; 
  
 // 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" 
 ) 
 // deidentifyTableRowSuppress de-identifies table data and 
 // suppress a row based on the content of column 
 func 
  
 deidentifyTableRowSuppress 
 ( 
 w 
  
 io 
 . 
 Writer 
 , 
  
 projectID 
  
 string 
 ) 
  
 error 
  
 { 
  
 // projectId := "your-project-id" 
  
 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 
 , 
  
 }, 
  
 } 
  
 // Apply the condition to record suppression. 
  
 condition 
  
 := 
  
& dlppb 
 . 
 RecordCondition 
 { 
  
 Expressions 
 : 
  
& dlppb 
 . 
 RecordCondition_Expressions 
 { 
  
 Type 
 : 
  
& dlppb 
 . 
 RecordCondition_Expressions_Conditions 
 { 
  
 Conditions 
 : 
  
& dlppb 
 . 
 RecordCondition_Conditions 
 { 
  
 Conditions 
 : 
  
 [] 
 * 
 dlppb 
 . 
 RecordCondition_Condition 
 { 
  
 { 
  
 Field 
 : 
  
& dlppb 
 . 
 FieldId 
 { 
 Name 
 : 
  
 "AGE" 
 }, 
  
 Operator 
 : 
  
 dlppb 
 . 
  RelationalOperator_GREATER_THAN 
 
 , 
  
 Value 
 : 
  
& dlppb 
 . 
 Value 
 { 
  
 Type 
 : 
  
& dlppb 
 . 
 Value_IntegerValue 
 { 
 IntegerValue 
 : 
  
 89 
 }, 
  
 }, 
  
 }, 
  
 }, 
  
 }, 
  
 }, 
  
 }, 
  
 } 
  
 recordSupression 
  
 := 
  
& dlppb 
 . 
 RecordSuppression 
 { 
  
 Condition 
 : 
  
 condition 
 , 
  
 } 
  
 // Use record suppression as the only transformation 
  
 recordTransformations 
  
 := 
  
& dlppb 
 . 
 RecordTransformations 
 { 
  
 RecordSuppressions 
 : 
  
 [] 
 * 
 dlppb 
 . 
 RecordSuppression 
 { 
  
 recordSupression 
 , 
  
 }, 
  
 } 
  
 // 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. LocationName 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. RecordCondition 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. RecordCondition 
. Condition 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. RecordCondition 
. Conditions 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. RecordCondition 
. Expressions 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. RecordSuppression 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. RecordTransformations 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. RelationalOperator 
 
 ; 
 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 
 DeIdentifyTableRowSuppress 
  
 { 
  
 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 
 (); 
  
 deIdentifyTableRowSuppress 
 ( 
 projectId 
 , 
  
 tableToDeIdentify 
 ); 
  
 } 
  
 public 
  
 static 
  
  Table 
 
  
 deIdentifyTableRowSuppress 
 ( 
 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 when the content should be de-identified. 
  
  Condition 
 
  
 condition 
  
 = 
  
  Condition 
 
 . 
 newBuilder 
 () 
  
 . 
 setField 
 ( 
  FieldId 
 
 . 
 newBuilder 
 (). 
 setName 
 ( 
 "AGE" 
 ). 
 build 
 ()) 
  
 . 
  setOperator 
 
 ( 
  RelationalOperator 
 
 . 
 GREATER_THAN 
 ) 
  
 . 
 setValue 
 ( 
  Value 
 
 . 
 newBuilder 
 (). 
  setIntegerValue 
 
 ( 
 89 
 ). 
 build 
 ()) 
  
 . 
 build 
 (); 
  
 // Apply the condition to record suppression. 
  
  RecordSuppression 
 
  
 recordSuppressions 
  
 = 
  
  RecordSuppression 
 
 . 
 newBuilder 
 () 
  
 . 
 setCondition 
 ( 
  
  RecordCondition 
 
 . 
 newBuilder 
 () 
  
 . 
 setExpressions 
 ( 
  
  Expressions 
 
 . 
 newBuilder 
 () 
  
 . 
 setConditions 
 ( 
  
  Conditions 
 
 . 
 newBuilder 
 (). 
 addConditions 
 ( 
 condition 
 ). 
 build 
 ()) 
  
 . 
 build 
 ()) 
  
 . 
 build 
 ()) 
  
 . 
 build 
 (); 
  
 // Use record suppression as the only transformation 
  
  RecordTransformations 
 
  
 transformations 
  
 = 
  
  RecordTransformations 
 
 . 
 newBuilder 
 (). 
  addRecordSuppressions 
 
 ( 
 recordSuppressions 
 ). 
 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 
  
 deIdentifyTableRowSuppress 
 () 
  
 { 
  
 // Specify when the content should be de-identified. 
  
 const 
  
 condition 
  
 = 
  
 { 
  
 expressions 
 : 
  
 { 
  
 conditions 
 : 
  
 { 
  
 conditions 
 : 
  
 [ 
  
 { 
  
 field 
 : 
  
 { 
 name 
 : 
  
 'AGE' 
 }, 
  
 operator 
 : 
  
 ' GREATER_THAN 
' 
 , 
  
 value 
 : 
  
 { 
 integerValue 
 : 
  
 89 
 }, 
  
 }, 
  
 ], 
  
 }, 
  
 }, 
  
 }; 
  
 // Apply the condition to record suppression. 
  
 const 
  
 recordTransformations 
  
 = 
  
 { 
  
 recordSuppressions 
 : 
  
 [ 
  
 { 
  
 condition 
 , 
  
 }, 
  
 ], 
  
 }; 
  
 // Combine configurations into a request for the service. 
  
 const 
  
 request 
  
 = 
  
 { 
  
 parent 
 : 
  
 `projects/ 
 ${ 
 projectId 
 } 
 /locations/global` 
 , 
  
 item 
 : 
  
 { 
  
 table 
 : 
  
 tablularData 
 , 
  
 }, 
  
 deidentifyConfig 
 : 
  
 { 
  
 recordTransformations 
 , 
  
 }, 
  
 }; 
  
 // 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 
 ) 
 } 
 ` 
  
 ); 
 } 
 deIdentifyTableRowSuppress 
 (); 
 

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\RecordCondition; 
 use Google\Cloud\Dlp\V2\RecordCondition\Condition; 
 use Google\Cloud\Dlp\V2\RecordCondition\Conditions; 
 use Google\Cloud\Dlp\V2\RecordCondition\Expressions; 
 use Google\Cloud\Dlp\V2\RecordSuppression; 
 use Google\Cloud\Dlp\V2\RecordTransformations; 
 use Google\Cloud\Dlp\V2\RelationalOperator; 
 use Google\Cloud\Dlp\V2\Table; 
 use Google\Cloud\Dlp\V2\Table\Row; 
 use Google\Cloud\Dlp\V2\Value; 
 /** 
 * De-identify table data: Suppress a row based on the content of a column 
 * Suppress a row based on the content of a column. You can remove a row entirely based on the content that appears in any column. This example suppresses the record for "Charles Dickens," as this patient is over 89 years old. 
 * 
 * @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_row_suppress( 
 // TODO(developer): Replace sample parameters before running the code. 
 string $callingProjectId, 
 string $inputCsvFile = './test/data/table2.csv', 
 string $outputCsvFile = './test/data/deidentify_table_row_suppress_output.csv' 
 ): void { 
 // Instantiate a client. 
 $dlp = new DlpServiceClient(); 
 $parent = "projects/$callingProjectId/locations/global"; 
 // 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. 
 $content = (new ContentItem()) 
 ->setTable($tableToDeIdentify); 
 // Specify when the content should be de-identified. 
 $condition = (new Condition()) 
 ->setField((new FieldId()) 
 ->setName('AGE')) 
 ->setOperator(RelationalOperator::GREATER_THAN) 
 ->setValue((new Value()) 
 ->setIntegerValue(89)); 
 // Apply the condition to record suppression. 
 $recordSuppressions = (new RecordSuppression()) 
 ->setCondition((new RecordCondition()) 
 ->setExpressions((new Expressions()) 
 ->setConditions((new Conditions()) 
 ->setConditions([$condition]) 
 ) 
 ) 
 ); 
 // Use record suppression as the only transformation 
 $recordtransformations = (new RecordTransformations()) 
 ->setRecordSuppressions([$recordSuppressions]); 
 // Create the deidentification configuration object 
 $deidentifyConfig = (new DeidentifyConfig()) 
 ->setRecordTransformations($recordtransformations); 
 // Run request 
 $deidentifyContentRequest = (new DeidentifyContentRequest()) 
 ->setParent($parent) 
 ->setDeidentifyConfig($deidentifyConfig) 
 ->setItem($content); 
 $response = $dlp->deidentifyContent($deidentifyContentRequest); 
 // Print the 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 
 def 
  
 deidentify_table_suppress_row 
 ( 
 project 
 : 
 str 
 , 
 table_data 
 : 
 Dict 
 [ 
 str 
 , 
 Union 
 [ 
 List 
 [ 
 str 
 ], 
 List 
 [ 
 List 
 [ 
 str 
 ]]]], 
 condition_field 
 : 
 str 
 , 
 condition_operator 
 : 
 str 
 , 
 condition_value 
 : 
 int 
 , 
 ) 
 - 
> None 
 : 
  
 """ Uses the Data Loss Prevention API to de-identify sensitive data in a 
 table by suppressing entire row/s based on a condition. 
 Args: 
 project: The Google Cloud project id to use as a parent resource. 
 table_data: Dictionary representing table data. 
 condition_field: A table field within the record this condition is evaluated against. 
 condition_operator: Operator used to compare the field or infoType to the value. One of: 
 RELATIONAL_OPERATOR_UNSPECIFIED, EQUAL_TO, NOT_EQUAL_TO, GREATER_THAN, LESS_THAN, GREATER_THAN_OR_EQUALS, 
 LESS_THAN_OR_EQUALS, EXISTS. 
 condition_value: Value to compare against. [Mandatory, except for ``EXISTS`` tests.]. 
 Example: 
 >> $ python deidentify_table_row_suppress.py \ 
 '{"header": ["email", "phone number", "age"], 
 "rows": [["robertfrost@example.com", "4232342345", "35"], 
 ["johndoe@example.com", "4253458383", "64"]]}' \ 
 "age" "GREATER_THAN" 50 
 >> '{"header": ["email", "phone number", "age"], 
 "rows": [["robertfrost@example.com", "4232342345", "35", "21"]]}' 
 """ 
 # Instantiate a client. 
 dlp 
 = 
 google 
 . 
 cloud 
 . 
  dlp_v2 
 
 . 
  DlpServiceClient 
 
 () 
 # 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` containing the table data. 
 item 
 = 
 { 
 "table" 
 : 
 table 
 } 
 # Construct condition list. 
 condition 
 = 
 [ 
 { 
 "field" 
 : 
 { 
 "name" 
 : 
 condition_field 
 }, 
 "operator" 
 : 
 condition_operator 
 , 
 "value" 
 : 
 { 
 "integer_value" 
 : 
 condition_value 
 }, 
 } 
 ] 
 # Construct deidentify configuration dictionary 
 deidentify_config 
 = 
 { 
 "record_transformations" 
 : 
 { 
 "record_suppressions" 
 : 
 [ 
 { 
 "condition" 
 : 
 { 
 "expressions" 
 : 
 { 
 "conditions" 
 : 
 { 
 "conditions" 
 : 
 condition 
 }} 
 } 
 } 
 ] 
 } 
 } 
 # Convert the project id into a full resource id. 
 parent 
 = 
 f 
 "projects/ 
 { 
 project 
 } 
 /locations/global" 
 # Call the API. 
 response 
 = 
 dlp 
 . 
  deidentify_content 
 
 ( 
 request 
 = 
 { 
 "parent" 
 : 
 parent 
 , 
 "deidentify_config" 
 : 
 deidentify_config 
 , 
 "item" 
 : 
 item 
 } 
 ) 
 # Print the result. 
 print 
 ( 
 f 
 "Table after de-identification: 
 { 
 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: