# tPatternMasking properties for Apache Spark Batch

These properties are used to configure tPatternMasking running in the Spark Batch Job framework.

The Spark Batch tPatternMasking component belongs to the Data Quality family.

The component in this framework is available in all Talend Platform products with Big Data and in Talend Data Fabric.

## Basic settings

| Schema and Edit Schema | A schema is a row description. It defines the number of fields<br>(columns) to be processed and passed on to the next component. When you create a Spark<br>Job, avoid the reserved word line when naming the<br>fields.<br><br>Click Sync<br>columns to retrieve the schema from the previous component connected in the<br>Job.<br><br>Click Edit<br>schema to make changes to the schema. If the current schema is of the Repository type, three options are available:<br><br><ul> <li> <p> <span>View schema</span>: choose this                option to view the schema only.</p> </li> <li> <p> <span>Change to built-in property</span>:                choose this option to change the schema to <span>Built-in</span> for local changes.</p> </li> <li> <p> <span>Update repository connection</span>:                choose this option to change the schema stored in the repository and decide whether                to propagate the changes to all the Jobs upon completion. If you just want to                propagate the changes to the current Job, you can select <span>No</span> upon completion and choose this schema metadata                again in the <span>Repository Content</span>                window.</p> </li> </ul><br><br>The output schema of this component contains<br>read-only columns:<br><br><ul> <li> <span>TWEAK</span>: Is generated when the              <span>Use tweaks with FF1 Encryption</span> check box is            selected. This column contains the tweak necessary to decrypt the data.</li> <li> <span>ORIGINAL_MARK</span>: Identifies by              <span>true</span> or <span>false</span> if the record is an original record or a substitute            record respectively.</li> </ul> |
| --- | --- |
|  | Built-In: You create and store the schema locally for this component<br>only. |
|  | Repository: You have already created the schema and stored it in the<br>Repository. You can reuse it in various projects and Job designs. |
| Modifications | Define in the table what fields to change and how to change<br>them:<br><br><br>Column to mask: Select the column from the input<br>flow for which you want to generate similar data by modifying its<br>values.<br><br>You can mask data from different columns but you need to follow the order<br>of the fields you want to mask.<br><br>Each column is processed sequentially, meaning that data masking<br>operations will be performed on the data from the first column, the<br>second column, and so on.<br><br>In a colum, each data field is a fixed length field, except the last data<br>field.<br><br>For fixed length fields, each value must contain the same number of<br>characters, for example: "30001,30002,30003" or<br>"FR,EN".<br><br>In a column, the last Enumeration or Enumeration<br>from file data field is a variable length field.<br><br>For variable length fields, each value might not always contain the same<br>number of characters, for example:<br>"30001,300023,30003" or<br>"FR,ENG".<br><br>Field type: Select the field type the data belongs to.<br><br><ul> <li> <p> <span>Interval</span>: When selected, set a range                                        of numeric values used for masking purposes in the                                            <span>Range</span> field, using the following                                        syntax: <kbd>"&lt;min&gt;,&lt;max&gt;"</kbd>.</p> <p>The number of masked characters from the input data                                        corresponds to the number of characters of the maximum                                        value.</p> <p>For example, <kbd>"1,999"</kbd> will be                                        interpreted as <kbd>"001,999"</kbd>, which means                                        that three characters from the input data will be masked by                                        a value randomly selected from the defined range of                                        values.</p> </li> <li> <p> <span>Enumeration</span>: When selected, enter a                                        comma-separated list of values to be used for masking data                                        in the <span>Values</span> field, using the                                        following syntax:                                            <kbd>"value1,value2,value3"</kbd>.</p> <p>Each value must contain the same number of characters. For                                        example: <kbd>"30001,30002,30003"</kbd> or                                            <kbd>"FR,EN"</kbd>.</p> </li> <li> <span>Enumeration from                                        file</span>: When selected, set the path to the CSV                                    file containing a list of values to be used for masking data in                                    the <span>Path</span> field. The file                                    must contain one value per row, each value must be unique and                                    the values must have the same number of characters.<div>You can select a file on:<ul> <li>The local system</li> <li>Amazon S3, in local Spark mode or connected to EMR, using                            <span>tS3Configuration</span>. S3N and S3A file                        systems are supported.</li> <li>Azure Blob Storage, in local Spark mode or connected to                        Azure HDInsight or Databricks, using <span>tAzureFSConfiguration</span> </li> <li>Azure Datalake Storage, in local Spark mode or connected to                        Azure HDInsight, using <span>tAzureFSConfiguration</span> </li> <li>Google Cloud Storage, in local Spark mode or connected to                        Dataproc, using <span>tGSConfiguration</span> </li> <li>HDFS, in local Spark mode or connected to Azure HDInsight,                        using <span>tHDFSConfiguration</span> </li> </ul> </div> <div>Enter the prefix before the file path:<ul> <li> <span>prefix://file path</span>, even if                    you run the Job in local mode, or </li> <li> <span>hdfs://hdpnameservice1/file                        path</span> if the index is on a cluster.</li> </ul> </div> <p>Paths to folders are                                        not supported.</p> </li> <li> <p> <span>Date pattern (YYYYMMDD)</span>: When                                        selected, set a range of years in the <span>Date                                            Range</span> field, using the following syntax:                                            <kbd>"&lt;min_year&gt;,&lt;max_year&gt;"</kbd>.</p> <p>Years can only have four digits, for example:                                            <kbd>"1900,2100"</kbd>.</p> <p>The input dates to be masked must follow the YYYYMMDD                                        pattern, for example: <kbd>20180101</kbd>.</p> <p>For example, if the input date is                                            <kbd>20180101</kbd> and the value in the                                            <span>Date Range</span> is                                            <kbd>"1900,2100"</kbd>,                                            <span>19221221</span> could be the output date.</p> </li> </ul><br><br>In the Values, Path,<br>Range and Date Range,<br>values must be enclosed in double quotes.<br><br>When the input data is invalid, meaning that a value does not match the pattern defined in<br>the component, the generated value is null. |

## Advanced settings

| Method | The component uses Format-Preserving Encryption (FPE)<br>methods to generate masked output values in the same format as the input values.<br><br>The FPE methods are bijective methods, except when<br>using tweaks.<br><br>The Basic method is the default<br>algorithm.<br><br>Information noteNote: As the masking methods are stronger, it is recommended to use the FF1<br>algorithms rather than the Basic method.<br><br>The FF1 with AES method is based<br>on the Advanced Encryption Standard in CBC mode. The FF1 with<br>SHA-2 method depends on the secure hash function HMAC-256.<br><br>You can use those methods only if the number of possible<br>values the component can generate from the input pattern is greater than<br>or equal to 1,000,000.<br><br>Information noteNote: Java 8u161 is the minimum<br>required version to use the FF1 with AES method.<br>To be able to use this FPE method with Java versions earlier than 8u161, download the<br>Java Cryptography Extension (JCE) unlimited strength jurisdiction policy files from<br>Oracle website.<br><br>The FF1 with AES and<br>FF1 with SHA-2 methods require a password to<br>be specified in the Password for FF1 methods<br>field of the Advanced settings to generate unique<br>masked values. |
| --- | --- |
| Password for FF1<br>methods | Set the password<br>required for the FF1 with AES and FF1 with SHA-2 methods to generate unique masked<br>values. If the password is not set, a random password is created at each Job execution.<br>When using the FF1 with AES and FF1 with SHA-2 methods and a password, the seed from<br>the Seed for random generator field is not<br>used. |
| Use tweaks with FF1<br>Encryption | Select this<br>check box to use tweaks. A unique tweak is generated for each record and applies to<br>all data of a record.<br><br>If bijective<br>masking is necessary, do not use this functionality. For more information about<br>tweaks, see the [data<br>masking functions](https://help.qlik.com/talend/en-US/components/7.3/data-privacy/data-masking-functions-in-masking-components). |
| Seed for random generator | Set a random number if you want to generate<br>the same sample of substitute data in each execution of the Job. The seed is not set by<br>default.<br><br>If you do not set the seed, the component<br>creates a new random seed for each Job execution. Repeating the execution with a<br>different seed will result in a different sample being generated. |
| Encoding | Select the encoding from the list or select Custom and define it manually. If you select Custom and leave the field empty, the supported<br>encodings depend on the JVM that you are using. This field is compulsory for the file<br>encoding.<br><br>When you set Field<br>type to Enumeration from file,<br>define the file path in Path (CSV File). |
| Output the original row? | Select this check box to output original data rows in addition to the<br>substitute data. Outputting both the original and substitute data can be useful in debug<br>or test processes. |
| Should Null input return NULL? | This check box is selected by<br>default. When selected, the component outputs null when<br>input values are null. Otherwise, the component returns<br>the default value when the input is null, that is an<br>empty string for string values, 0 for numeric values<br>and the current date for date values.<br><br>If the input is<br>null, the Generate<br>Sequence function will not return null,<br>even if the check box is selected. |
| Should EMPTY input return EMPTY? | When this check box is selected, empty values are left unchanged in<br>the output data. Otherwise, the selected functions are applied to the input<br>data. |
| Send invalid data to<br>"Invalid" output flow | This check box is selected by default.<br><br><ul> <li>Selected: When the data can be masked, they are sent to the                    main flow. Otherwise, the data are sent to the "Invalid" output flow.</li> <li>Cleared: The data are sent to the main flow.</li> </ul><br><br><br>Invalid data are any values that do not match the pattern. |

## Usage

| **Usage rule** | This component is used as an intermediate step.<br><br>This component, along with the Spark Batch component Palette it belongs to,<br>appears only when you are creating a Spark Batch Job. |
| --- | --- |
| Spark Connection | In the Spark<br>Configuration tab in the Run<br>view, define the connection to a given Spark cluster for the whole Job. In<br>addition, since the Job expects its dependent jar files for execution, you must<br>specify the directory in the file system to which these jar files are<br>transferred so that Spark can access these files:<br><br><ul> <li> <div> <span>Yarn mode</span> (Yarn client or Yarn cluster):<ul> <li> <p>When using Google Dataproc, specify a bucket in the                                            <span>Google Storage staging bucket</span>                                        field in the <span>Spark configuration</span>                                        tab.</p> </li> <li> <p>When using HDInsight, specify the blob to be used for Job                                        deployment in the <span>Windows Azure Storage                                            configuration</span> area in the <span>Spark                                            configuration</span> tab.</p> </li> <li>When using Altus, specify the S3 bucket or the Azure                                    Data Lake Storage for Job deployment in the <span>Spark                                        configuration</span> tab.</li> <li>When using Qubole, add a                                        <span>tS3Configuration</span> to your Job to write                                    your actual business data in the S3 system with Qubole. Without                                        <span>tS3Configuration</span>, this business data is                                    written in the Qubole HDFS system and destroyed once you shut                                    down your cluster.</li> <li> <p>When using on-premises distributions, use the configuration component                                        corresponding to the file system your cluster is using.                                        Typically, this system is HDFS and so use <a href="https://help.qlik.com/talend/r/en-US/7.3/components/hdfs/thdfsconfiguration">tHDFSConfiguration</a>.</p> </li> </ul> </div> </li> <li> <p> <span>Standalone mode</span>: use the                            configuration component corresponding to the file system your cluster is                            using, such as <a href="https://help.qlik.com/talend/r/en-US/7.3/components/hdfs/thdfsconfiguration-properties-for-apache-spark-batch">tHDFSConfiguration Apache Spark Batch</a> or <a href="https://help.qlik.com/talend/r/en-US/7.3/components/amazon-s3/ts3configuration-properties-for-apache-spark-batch">tS3Configuration Apache Spark Batch</a>.</p> <p>If you are using Databricks without any configuration component present                            in your Job, your business data is written directly in DBFS (Databricks                            Filesystem).</p> </li> </ul><br><br>This connection is effective on a per-Job basis. |