This is an automated email from the ASF dual-hosted git repository.
chriss pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/main by this push:
new 964f56043c NIFI-11910: Clarified some points in docs
964f56043c is described below
commit 964f56043c7840c11c944fd320dc253d4acd37da
Author: Mark Payne <[email protected]>
AuthorDate: Thu Aug 3 17:25:54 2023 -0400
NIFI-11910: Clarified some points in docs
This closes #7574
Signed-off-by: Chris Sampson <[email protected]>
---
.../nifi/processors/aws/AbstractAWSProcessor.java | 2 +
.../processors/aws/s3/AbstractS3Processor.java | 22 +++---
.../nifi/processors/aws/s3/DeleteS3Object.java | 14 ++--
.../org/apache/nifi/processors/aws/s3/ListS3.java | 6 +-
.../AbstractAzureDataLakeStorageProcessor.java | 13 ++--
.../azure/storage/PutAzureDataLakeStorage.java | 2 +-
.../processors/compress/ModifyCompression.java | 5 +-
.../nifi/processors/gcp/bigquery/PutBigQuery.java | 19 +++---
.../processors/gcp/drive/FetchGoogleDrive.java | 26 ++++---
.../nifi/processors/gcp/drive/ListGoogleDrive.java | 55 +++++++--------
.../nifi/processors/gcp/drive/PutGoogleDrive.java | 79 +++++++++++-----------
.../nifi/processors/gcp/storage/ListGCSBucket.java | 2 +-
.../nifi/processors/gcp/storage/PutGCSObject.java | 8 +--
.../nifi/processors/standard/CompressContent.java | 6 +-
.../nifi/processors/standard/ConvertJSONToSQL.java | 44 ++++++------
.../nifi/processors/standard/EncodeContent.java | 24 +++----
.../nifi/processors/standard/ExtractText.java | 43 ++++++------
.../nifi/processors/standard/PartitionRecord.java | 11 ++-
.../nifi/processors/standard/UnpackContent.java | 42 ++++++------
19 files changed, 214 insertions(+), 209 deletions(-)
diff --git
a/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-abstract-processors/src/main/java/org/apache/nifi/processors/aws/AbstractAWSProcessor.java
b/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-abstract-processors/src/main/java/org/apache/nifi/processors/aws/AbstractAWSProcessor.java
index 50310b93c6..fb88c07251 100644
---
a/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-abstract-processors/src/main/java/org/apache/nifi/processors/aws/AbstractAWSProcessor.java
+++
b/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-abstract-processors/src/main/java/org/apache/nifi/processors/aws/AbstractAWSProcessor.java
@@ -124,6 +124,7 @@ public abstract class AbstractAWSProcessor<ClientType
extends AmazonWebServiceCl
public static final PropertyDescriptor REGION = new
PropertyDescriptor.Builder()
.name("Region")
+ .description("The AWS Region to connect to.")
.required(true)
.allowableValues(getAvailableRegions())
.defaultValue(createAllowableValue(Regions.DEFAULT_REGION).getValue())
@@ -131,6 +132,7 @@ public abstract class AbstractAWSProcessor<ClientType
extends AmazonWebServiceCl
public static final PropertyDescriptor TIMEOUT = new
PropertyDescriptor.Builder()
.name("Communications Timeout")
+ .description("The amount of time to wait in order to establish a
connection to AWS or receive data from AWS before timing out.")
.required(true)
.addValidator(StandardValidators.TIME_PERIOD_VALIDATOR)
.defaultValue("30 secs")
diff --git
a/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-abstract-processors/src/main/java/org/apache/nifi/processors/aws/s3/AbstractS3Processor.java
b/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-abstract-processors/src/main/java/org/apache/nifi/processors/aws/s3/AbstractS3Processor.java
index 143549e397..f236f67ef8 100644
---
a/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-abstract-processors/src/main/java/org/apache/nifi/processors/aws/s3/AbstractS3Processor.java
+++
b/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-abstract-processors/src/main/java/org/apache/nifi/processors/aws/s3/AbstractS3Processor.java
@@ -33,7 +33,6 @@ import com.amazonaws.services.s3.model.EmailAddressGrantee;
import com.amazonaws.services.s3.model.Grantee;
import com.amazonaws.services.s3.model.Owner;
import com.amazonaws.services.s3.model.Permission;
-import java.util.Map;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.nifi.annotation.lifecycle.OnScheduled;
@@ -48,9 +47,9 @@ import org.apache.nifi.processor.ProcessContext;
import org.apache.nifi.processor.ProcessSession;
import org.apache.nifi.processor.exception.ProcessException;
import org.apache.nifi.processor.util.StandardValidators;
-import org.apache.nifi.processors.aws.AwsClientDetails;
import org.apache.nifi.processors.aws.AbstractAWSCredentialsProviderProcessor;
import org.apache.nifi.processors.aws.AbstractAWSProcessor;
+import org.apache.nifi.processors.aws.AwsClientDetails;
import org.apache.nifi.processors.aws.AwsPropertyDescriptors;
import org.apache.nifi.processors.aws.signer.AwsCustomSignerUtil;
import org.apache.nifi.processors.aws.signer.AwsSignerType;
@@ -59,6 +58,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.EnumSet;
import java.util.List;
+import java.util.Map;
import static java.lang.String.format;
import static
org.apache.nifi.processors.aws.signer.AwsSignerType.AWS_S3_V2_SIGNER;
@@ -70,70 +70,72 @@ public abstract class AbstractS3Processor extends
AbstractAWSCredentialsProvider
public static final PropertyDescriptor FULL_CONTROL_USER_LIST = new
PropertyDescriptor.Builder()
.name("FullControl User List")
+ .description("A comma-separated list of Amazon User ID's or E-mail
addresses that specifies who should have Full Control for an object")
.required(false)
.expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
- .description("A comma-separated list of Amazon User ID's or E-mail
addresses that specifies who should have Full Control for an object")
.defaultValue("${s3.permissions.full.users}")
.build();
public static final PropertyDescriptor READ_USER_LIST = new
PropertyDescriptor.Builder()
.name("Read Permission User List")
+ .description("A comma-separated list of Amazon User ID's or E-mail
addresses that specifies who should have Read Access for an object")
.required(false)
.expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
- .description("A comma-separated list of Amazon User ID's or E-mail
addresses that specifies who should have Read Access for an object")
.defaultValue("${s3.permissions.read.users}")
.build();
public static final PropertyDescriptor WRITE_USER_LIST = new
PropertyDescriptor.Builder()
.name("Write Permission User List")
+ .description("A comma-separated list of Amazon User ID's or E-mail
addresses that specifies who should have Write Access for an object")
.required(false)
.expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
- .description("A comma-separated list of Amazon User ID's or E-mail
addresses that specifies who should have Write Access for an object")
.defaultValue("${s3.permissions.write.users}")
.build();
public static final PropertyDescriptor READ_ACL_LIST = new
PropertyDescriptor.Builder()
.name("Read ACL User List")
+ .description("A comma-separated list of Amazon User ID's or E-mail
addresses that specifies who should have permissions to read the Access Control
List for an object")
.required(false)
.expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
- .description("A comma-separated list of Amazon User ID's or E-mail
addresses that specifies who should have permissions to read the Access Control
List for an object")
.defaultValue("${s3.permissions.readacl.users}")
.build();
public static final PropertyDescriptor WRITE_ACL_LIST = new
PropertyDescriptor.Builder()
.name("Write ACL User List")
+ .description("A comma-separated list of Amazon User ID's or E-mail
addresses that specifies who should have permissions to change the Access
Control List for an object")
.required(false)
.expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
- .description("A comma-separated list of Amazon User ID's or E-mail
addresses that specifies who should have permissions to change the Access
Control List for an object")
.defaultValue("${s3.permissions.writeacl.users}")
.build();
public static final PropertyDescriptor CANNED_ACL = new
PropertyDescriptor.Builder()
.name("canned-acl")
.displayName("Canned ACL")
+ .description("Amazon Canned ACL for an object, one of:
BucketOwnerFullControl, BucketOwnerRead, LogDeliveryWrite, AuthenticatedRead,
PublicReadWrite, PublicRead, Private; " +
+ "will be ignored if any other ACL/permission/owner property is
specified")
.required(false)
.expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
- .description("Amazon Canned ACL for an object, one of:
BucketOwnerFullControl, BucketOwnerRead, LogDeliveryWrite, AuthenticatedRead,
PublicReadWrite, PublicRead, Private; " +
- "will be ignored if any other ACL/permission/owner
property is specified")
.defaultValue("${s3.permissions.cannedacl}")
.build();
public static final PropertyDescriptor OWNER = new
PropertyDescriptor.Builder()
.name("Owner")
+ .description("The Amazon ID to use for the object's owner")
.required(false)
.expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
- .description("The Amazon ID to use for the object's owner")
.defaultValue("${s3.owner}")
.build();
public static final PropertyDescriptor BUCKET = new
PropertyDescriptor.Builder()
.name("Bucket")
+ .description("The S3 Bucket to interact with")
.expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
.required(true)
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
.build();
public static final PropertyDescriptor KEY = new
PropertyDescriptor.Builder()
.name("Object Key")
+ .description("The S3 Object Key to use. This is analogous to a
filename for traditional file systems.")
.required(true)
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
.expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
diff --git
a/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/s3/DeleteS3Object.java
b/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/s3/DeleteS3Object.java
index fd551e7007..b93d7ebc4a 100644
---
a/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/s3/DeleteS3Object.java
+++
b/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/s3/DeleteS3Object.java
@@ -16,16 +16,10 @@
*/
package org.apache.nifi.processors.aws.s3;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.concurrent.TimeUnit;
-
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.DeleteObjectRequest;
import com.amazonaws.services.s3.model.DeleteVersionRequest;
-
import org.apache.nifi.annotation.behavior.InputRequirement;
import org.apache.nifi.annotation.behavior.InputRequirement.Requirement;
import org.apache.nifi.annotation.behavior.SupportsBatching;
@@ -41,6 +35,11 @@ import org.apache.nifi.processor.ProcessContext;
import org.apache.nifi.processor.ProcessSession;
import org.apache.nifi.processor.util.StandardValidators;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
@SupportsBatching
@WritesAttributes({
@@ -52,8 +51,7 @@ import org.apache.nifi.processor.util.StandardValidators;
@SeeAlso({PutS3Object.class, FetchS3Object.class, ListS3.class})
@Tags({"Amazon", "S3", "AWS", "Archive", "Delete"})
@InputRequirement(Requirement.INPUT_REQUIRED)
-@CapabilityDescription("Deletes FlowFiles on an Amazon S3 Bucket. " +
- "If attempting to delete a file that does not exist, FlowFile is
routed to success.")
+@CapabilityDescription("Deletes a file from an Amazon S3 Bucket. If attempting
to delete a file that does not exist, FlowFile is routed to success.")
public class DeleteS3Object extends AbstractS3Processor {
public static final PropertyDescriptor VERSION_ID = new
PropertyDescriptor.Builder()
diff --git
a/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/s3/ListS3.java
b/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/s3/ListS3.java
index 8c02acf5fd..0f51b73317 100644
---
a/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/s3/ListS3.java
+++
b/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/s3/ListS3.java
@@ -246,9 +246,9 @@ public class ListS3 extends AbstractS3Processor implements
VerifiableProcessor {
+ "the S3 bucket. This sets the 'x-amz-request-payer'
header to 'requester'. Note that this "
+ "setting is not applicable when 'Use Versions' is
'true'.")
.addValidator(createRequesterPaysValidator())
- .allowableValues(new AllowableValue("true", "True", "Indicates
that the requester consents to pay any charges associated "
- + "with listing the S3 bucket."), new
AllowableValue("false", "False", "Does not consent to pay "
- + "requester charges for listing the S3 bucket."))
+ .allowableValues(
+ new AllowableValue("true", "True", "Indicates that the
requester consents to pay any charges associated with listing the S3 bucket."),
+ new AllowableValue("false", "False", "Does not consent to pay
requester charges for listing the S3 bucket."))
.defaultValue("false")
.build();
diff --git
a/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/main/java/org/apache/nifi/processors/azure/AbstractAzureDataLakeStorageProcessor.java
b/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/main/java/org/apache/nifi/processors/azure/AbstractAzureDataLakeStorageProcessor.java
index b16176f3fd..8a958e5880 100644
---
a/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/main/java/org/apache/nifi/processors/azure/AbstractAzureDataLakeStorageProcessor.java
+++
b/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/main/java/org/apache/nifi/processors/azure/AbstractAzureDataLakeStorageProcessor.java
@@ -64,7 +64,8 @@ public abstract class AbstractAzureDataLakeStorageProcessor
extends AbstractProc
.build();
public static final PropertyDescriptor DIRECTORY = new
PropertyDescriptor.Builder()
- .name("directory-name").displayName("Directory Name")
+ .name("directory-name")
+ .displayName("Directory Name")
.description("Name of the Azure Storage Directory. The Directory
Name cannot contain a leading '/'. The root directory can be designated by the
empty string value. " +
"In case of the PutAzureDataLakeStorage processor, the
directory will be created if not already existing.")
.addValidator(new DirectoryValidator())
@@ -81,11 +82,13 @@ public abstract class AbstractAzureDataLakeStorageProcessor
extends AbstractProc
.defaultValue(String.format("${%s}", ATTR_NAME_FILENAME))
.build();
- public static final Relationship REL_SUCCESS = new
Relationship.Builder().name("success").description(
- "Files that have been successfully written to Azure storage are
transferred to this relationship")
+ public static final Relationship REL_SUCCESS = new Relationship.Builder()
+ .name("success")
+ .description("Files that have been successfully written to Azure
storage are transferred to this relationship")
.build();
- public static final Relationship REL_FAILURE = new
Relationship.Builder().name("failure").description(
- "Files that could not be written to Azure storage for some reason
are transferred to this relationship")
+ public static final Relationship REL_FAILURE = new Relationship.Builder()
+ .name("failure")
+ .description("Files that could not be written to Azure storage for
some reason are transferred to this relationship")
.build();
private static final Set<Relationship> RELATIONSHIPS =
Collections.unmodifiableSet(new HashSet<>(Arrays.asList(
diff --git
a/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/main/java/org/apache/nifi/processors/azure/storage/PutAzureDataLakeStorage.java
b/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/main/java/org/apache/nifi/processors/azure/storage/PutAzureDataLakeStorage.java
index ab6014abfd..cfd660c289 100644
---
a/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/main/java/org/apache/nifi/processors/azure/storage/PutAzureDataLakeStorage.java
+++
b/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/main/java/org/apache/nifi/processors/azure/storage/PutAzureDataLakeStorage.java
@@ -69,7 +69,7 @@ import static
org.apache.nifi.processors.transfer.ResourceTransferUtils.getFileR
@Tags({"azure", "microsoft", "cloud", "storage", "adlsgen2", "datalake"})
@SeeAlso({DeleteAzureDataLakeStorage.class, FetchAzureDataLakeStorage.class,
ListAzureDataLakeStorage.class})
-@CapabilityDescription("Puts content into an Azure Data Lake Storage Gen 2")
+@CapabilityDescription("Writes the contents of a FlowFile as a file on Azure
Data Lake Storage Gen 2")
@WritesAttributes({@WritesAttribute(attribute = ATTR_NAME_FILESYSTEM,
description = ATTR_DESCRIPTION_FILESYSTEM),
@WritesAttribute(attribute = ATTR_NAME_DIRECTORY, description =
ATTR_DESCRIPTION_DIRECTORY),
@WritesAttribute(attribute = ATTR_NAME_FILENAME, description =
ATTR_DESCRIPTION_FILENAME),
diff --git
a/nifi-nar-bundles/nifi-compress-bundle/nifi-compress-processors/src/main/java/org/apache/nifi/processors/compress/ModifyCompression.java
b/nifi-nar-bundles/nifi-compress-bundle/nifi-compress-processors/src/main/java/org/apache/nifi/processors/compress/ModifyCompression.java
index 9467bfe6d7..f4a3653e03 100644
---
a/nifi-nar-bundles/nifi-compress-bundle/nifi-compress-processors/src/main/java/org/apache/nifi/processors/compress/ModifyCompression.java
+++
b/nifi-nar-bundles/nifi-compress-bundle/nifi-compress-processors/src/main/java/org/apache/nifi/processors/compress/ModifyCompression.java
@@ -85,8 +85,9 @@ import java.util.zip.InflaterInputStream;
@SupportsBatching
@InputRequirement(Requirement.INPUT_REQUIRED)
@Tags({"content", "compress", "recompress", "gzip", "bzip2", "lzma",
"xz-lzma2", "snappy", "snappy-hadoop", "snappy framed", "lz4-framed",
"deflate", "zstd", "brotli"})
-@CapabilityDescription("Decompresses the contents of FlowFiles using a
user-specified compression algorithm and recompresses the contents using the
specified compression format properties. "
- + "This processor operates in a very memory efficient way so very
large objects well beyond the heap size are generally fine to process")
+@CapabilityDescription("Changes the compression algorithm used to compress the
contents of a FlowFile by decompressing the contents of FlowFiles using a
user-specified compression algorithm and " +
+ "recompressing the contents using the specified compression format
properties. This processor operates in a very memory efficient way so very
large objects well beyond " +
+ "the heap size are generally fine to process")
@ReadsAttribute(attribute = "mime.type", description = "If the Decompression
Format is set to 'use mime.type attribute', this attribute is used to "
+ "determine the decompression type. Otherwise, this attribute is
ignored.")
@WritesAttribute(attribute = "mime.type", description = "The appropriate MIME
Type is set based on the value of the Compression Format property. If the
Compression Format is 'no compression' this "
diff --git
a/nifi-nar-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/bigquery/PutBigQuery.java
b/nifi-nar-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/bigquery/PutBigQuery.java
index 0b17f0d939..1b416c2c79 100644
---
a/nifi-nar-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/bigquery/PutBigQuery.java
+++
b/nifi-nar-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/bigquery/PutBigQuery.java
@@ -17,18 +17,15 @@
package org.apache.nifi.processors.gcp.bigquery;
-import static java.util.stream.Collectors.collectingAndThen;
-import static java.util.stream.Collectors.toList;
-
import com.google.api.core.ApiFuture;
import com.google.api.core.ApiFutureCallback;
import com.google.api.core.ApiFutures;
import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.cloud.bigquery.storage.v1.AppendRowsResponse;
+import com.google.cloud.bigquery.storage.v1.BQTableSchemaToProtoDescriptor;
import com.google.cloud.bigquery.storage.v1.BatchCommitWriteStreamsRequest;
import com.google.cloud.bigquery.storage.v1.BatchCommitWriteStreamsResponse;
-import com.google.cloud.bigquery.storage.v1.BQTableSchemaToProtoDescriptor;
import com.google.cloud.bigquery.storage.v1.BigQueryWriteClient;
import com.google.cloud.bigquery.storage.v1.BigQueryWriteSettings;
import com.google.cloud.bigquery.storage.v1.CivilTimeEncoder;
@@ -46,8 +43,6 @@ import
com.google.cloud.bigquery.storage.v1.stub.BigQueryWriteStubSettings;
import com.google.protobuf.Descriptors;
import com.google.protobuf.DynamicMessage;
import io.grpc.Status;
-import java.time.LocalTime;
-import java.util.stream.Stream;
import org.apache.nifi.annotation.behavior.InputRequirement;
import org.apache.nifi.annotation.behavior.TriggerSerially;
import org.apache.nifi.annotation.behavior.WritesAttribute;
@@ -75,6 +70,7 @@ import java.io.InputStream;
import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
+import java.time.LocalTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -85,13 +81,16 @@ import java.util.Optional;
import java.util.concurrent.Phaser;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
+import java.util.stream.Stream;
+
+import static java.util.stream.Collectors.collectingAndThen;
+import static java.util.stream.Collectors.toList;
@TriggerSerially
@Tags({"google", "google cloud", "bq", "bigquery"})
-@CapabilityDescription("Unified processor for batch and stream flow files
content to a Google BigQuery table via the Storage Write API." +
- "The processor is record based so the used schema is driven by the
RecordReader. Attributes that are not matched to the target schema" +
- "are skipped. Exactly once delivery semantics are achieved via stream
offsets. The Storage Write API is more efficient than the older " +
- "insertAll method because it uses gRPC streaming rather than REST over
HTTP")
+@CapabilityDescription("Writes the contents of a FlowFile to a Google BigQuery
table. " +
+ "The processor is record based so the schema that is used is driven by the
RecordReader. Attributes that are not matched to the target schema " +
+ "are skipped. Exactly once delivery semantics are achieved via stream
offsets.")
@InputRequirement(InputRequirement.Requirement.INPUT_REQUIRED)
@WritesAttributes({
@WritesAttribute(attribute = BigQueryAttributes.JOB_NB_RECORDS_ATTR,
description = BigQueryAttributes.JOB_NB_RECORDS_DESC)
diff --git
a/nifi-nar-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/drive/FetchGoogleDrive.java
b/nifi-nar-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/drive/FetchGoogleDrive.java
index 2aca33f02f..bbdb555042 100644
---
a/nifi-nar-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/drive/FetchGoogleDrive.java
+++
b/nifi-nar-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/drive/FetchGoogleDrive.java
@@ -140,11 +140,10 @@ public class FetchGoogleDrive extends AbstractProcessor
implements GoogleDriveTr
}
- public static final PropertyDescriptor FILE_ID = new PropertyDescriptor
- .Builder().name("drive-file-id")
+ public static final PropertyDescriptor FILE_ID = new
PropertyDescriptor.Builder()
+ .name("drive-file-id")
.displayName("File ID")
- .description("The Drive ID of the File to fetch. "
- + "Please see Additional Details to obtain Drive ID.")
+ .description("The Drive ID of the File to fetch. Please see
Additional Details for information on how to obtain the Drive ID.")
.required(true)
.defaultValue("${drive.id}")
.expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
@@ -198,16 +197,15 @@ public class FetchGoogleDrive extends AbstractProcessor
implements GoogleDriveTr
- public static final Relationship REL_SUCCESS =
- new Relationship.Builder()
- .name("success")
- .description("A FlowFile will be routed here for each
successfully fetched File.")
- .build();
+ public static final Relationship REL_SUCCESS = new Relationship.Builder()
+ .name("success")
+ .description("A FlowFile will be routed here for each successfully
fetched File.")
+ .build();
- public static final Relationship REL_FAILURE =
- new Relationship.Builder().name("failure")
- .description("A FlowFile will be routed here for each File
for which fetch was attempted but failed.")
- .build();
+ public static final Relationship REL_FAILURE = new Relationship.Builder()
+ .name("failure")
+ .description("A FlowFile will be routed here for each File for
which fetch was attempted but failed.")
+ .build();
private static final List<PropertyDescriptor> PROPERTIES =
Collections.unmodifiableList(Arrays.asList(
GoogleUtils.GCP_CREDENTIALS_PROVIDER_SERVICE,
@@ -349,7 +347,7 @@ public class FetchGoogleDrive extends AbstractProcessor
implements GoogleDriveTr
private void handleErrorResponse(final ProcessSession session, final
String fileId, FlowFile flowFile, final GoogleJsonResponseException e) {
getLogger().error("Fetching File [{}] failed", fileId, e);
- flowFile = session.putAttribute(flowFile, ERROR_CODE, "" +
e.getStatusCode());
+ flowFile = session.putAttribute(flowFile, ERROR_CODE,
String.valueOf(e.getStatusCode()));
flowFile = session.putAttribute(flowFile, ERROR_MESSAGE,
e.getMessage());
flowFile = session.penalize(flowFile);
diff --git
a/nifi-nar-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/drive/ListGoogleDrive.java
b/nifi-nar-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/drive/ListGoogleDrive.java
index b7855d1102..2cf710bf39 100644
---
a/nifi-nar-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/drive/ListGoogleDrive.java
+++
b/nifi-nar-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/drive/ListGoogleDrive.java
@@ -16,36 +16,12 @@
*/
package org.apache.nifi.processors.gcp.drive;
-import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.FILENAME_DESC;
-import static org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.ID;
-import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.ID_DESC;
-import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.MIME_TYPE_DESC;
-import static org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.SIZE;
-import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.SIZE_DESC;
-import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.TIMESTAMP;
-import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.TIMESTAMP_DESC;
-
import com.google.api.client.http.HttpTransport;
import com.google.api.client.util.DateTime;
import com.google.api.services.drive.Drive;
import com.google.api.services.drive.DriveScopes;
import com.google.api.services.drive.model.File;
import com.google.api.services.drive.model.FileList;
-import java.io.IOException;
-import java.time.Instant;
-import java.time.OffsetDateTime;
-import java.time.ZoneOffset;
-import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.concurrent.TimeUnit;
import org.apache.nifi.annotation.behavior.InputRequirement;
import org.apache.nifi.annotation.behavior.InputRequirement.Requirement;
import org.apache.nifi.annotation.behavior.PrimaryNodeOnly;
@@ -74,12 +50,37 @@ import org.apache.nifi.proxy.ProxyConfiguration;
import org.apache.nifi.scheduling.SchedulingStrategy;
import org.apache.nifi.serialization.record.RecordSchema;
+import java.io.IOException;
+import java.time.Instant;
+import java.time.OffsetDateTime;
+import java.time.ZoneOffset;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.concurrent.TimeUnit;
+
+import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.FILENAME_DESC;
+import static org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.ID;
+import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.ID_DESC;
+import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.MIME_TYPE_DESC;
+import static org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.SIZE;
+import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.SIZE_DESC;
+import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.TIMESTAMP;
+import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.TIMESTAMP_DESC;
+
@PrimaryNodeOnly
@TriggerSerially
@Tags({"google", "drive", "storage"})
-@CapabilityDescription("Lists concrete files (shortcuts are ignored) in a
Google Drive folder. " +
- "Each listed file may result in one FlowFile, the metadata being
written as FlowFile attributes. " +
- "Or - in case the 'Record Writer' property is set - the entire result
is written as records to a single FlowFile. " +
+@CapabilityDescription("Performs a listing of concrete files (shortcuts are
ignored) in a Google Drive folder. " +
+ "If the 'Record Writer' property is set, a single Output FlowFile is
created, and each file in the listing is written as a single record to the
output file. " +
+ "Otherwise, for each file in the listing, an individual FlowFile is
created, the metadata being written as FlowFile attributes. " +
"This Processor is designed to run on Primary Node only in a cluster.
If the primary node changes, the new Primary Node will pick up where the " +
"previous node left off without duplicating all of the data. " +
"Please see Additional Details to set up access to Google Drive.")
diff --git
a/nifi-nar-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/drive/PutGoogleDrive.java
b/nifi-nar-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/drive/PutGoogleDrive.java
index f0b8683c6e..632ff541e5 100644
---
a/nifi-nar-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/drive/PutGoogleDrive.java
+++
b/nifi-nar-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/drive/PutGoogleDrive.java
@@ -16,30 +16,6 @@
*/
package org.apache.nifi.processors.gcp.drive;
-import static java.lang.String.format;
-import static java.lang.String.valueOf;
-import static java.nio.charset.StandardCharsets.UTF_8;
-import static java.util.Arrays.asList;
-import static java.util.Collections.singletonList;
-import static java.util.stream.Collectors.joining;
-import static
org.apache.nifi.processor.util.StandardValidators.DATA_SIZE_VALIDATOR;
-import static
org.apache.nifi.processors.conflict.resolution.ConflictResolutionStrategy.FAIL;
-import static
org.apache.nifi.processors.conflict.resolution.ConflictResolutionStrategy.IGNORE;
-import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.ERROR_CODE;
-import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.ERROR_CODE_DESC;
-import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.ERROR_MESSAGE;
-import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.ERROR_MESSAGE_DESC;
-import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.FILENAME;
-import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.FILENAME_DESC;
-import static org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.ID;
-import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.ID_DESC;
-import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.MIME_TYPE_DESC;
-import static org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.SIZE;
-import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.SIZE_DESC;
-import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.TIMESTAMP;
-import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.TIMESTAMP_DESC;
-import static
org.apache.nifi.processors.gcp.util.GoogleUtils.GCP_CREDENTIALS_PROVIDER_SERVICE;
-
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
import com.google.api.client.googleapis.media.MediaHttpUploader;
import com.google.api.client.http.GenericUrl;
@@ -53,20 +29,6 @@ import com.google.api.services.drive.DriveRequest;
import com.google.api.services.drive.DriveScopes;
import com.google.api.services.drive.model.File;
import com.google.api.services.drive.model.FileList;
-import java.io.BufferedInputStream;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
import org.apache.nifi.annotation.behavior.InputRequirement;
import org.apache.nifi.annotation.behavior.InputRequirement.Requirement;
import org.apache.nifi.annotation.behavior.ReadsAttribute;
@@ -95,10 +57,49 @@ import
org.apache.nifi.processors.gcp.ProxyAwareTransportFactory;
import org.apache.nifi.proxy.ProxyConfiguration;
import org.json.JSONObject;
+import java.io.BufferedInputStream;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+
+import static java.lang.String.format;
+import static java.lang.String.valueOf;
+import static java.nio.charset.StandardCharsets.UTF_8;
+import static java.util.Arrays.asList;
+import static java.util.Collections.singletonList;
+import static java.util.stream.Collectors.joining;
+import static
org.apache.nifi.processor.util.StandardValidators.DATA_SIZE_VALIDATOR;
+import static
org.apache.nifi.processors.conflict.resolution.ConflictResolutionStrategy.FAIL;
+import static
org.apache.nifi.processors.conflict.resolution.ConflictResolutionStrategy.IGNORE;
+import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.ERROR_CODE;
+import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.ERROR_CODE_DESC;
+import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.ERROR_MESSAGE;
+import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.ERROR_MESSAGE_DESC;
+import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.FILENAME;
+import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.FILENAME_DESC;
+import static org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.ID;
+import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.ID_DESC;
+import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.MIME_TYPE_DESC;
+import static org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.SIZE;
+import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.SIZE_DESC;
+import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.TIMESTAMP;
+import static
org.apache.nifi.processors.gcp.drive.GoogleDriveAttributes.TIMESTAMP_DESC;
+import static
org.apache.nifi.processors.gcp.util.GoogleUtils.GCP_CREDENTIALS_PROVIDER_SERVICE;
+
@SeeAlso({ListGoogleDrive.class, FetchGoogleDrive.class})
@InputRequirement(Requirement.INPUT_REQUIRED)
@Tags({"google", "drive", "storage", "put"})
-@CapabilityDescription("Puts content to a Google Drive Folder.")
+@CapabilityDescription("Writes the contents of a FlowFile as a file in Google
Drive.")
@ReadsAttribute(attribute = "filename", description = "Uses the FlowFile's
filename as the filename for the Google Drive object.")
@WritesAttributes({
@WritesAttribute(attribute = ID, description = ID_DESC),
diff --git
a/nifi-nar-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/storage/ListGCSBucket.java
b/nifi-nar-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/storage/ListGCSBucket.java
index 1b156aac71..417af91388 100644
---
a/nifi-nar-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/storage/ListGCSBucket.java
+++
b/nifi-nar-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/storage/ListGCSBucket.java
@@ -132,7 +132,7 @@ import static
org.apache.nifi.processors.gcp.storage.StorageAttributes.URI_DESC;
@TriggerWhenEmpty
@InputRequirement(Requirement.INPUT_FORBIDDEN)
@Tags({"google cloud", "google", "storage", "gcs", "list"})
-@CapabilityDescription("Retrieves a listing of objects from an GCS bucket. For
each object that is listed, creates a FlowFile that represents "
+@CapabilityDescription("Retrieves a listing of objects from a GCS bucket. For
each object that is listed, creates a FlowFile that represents "
+ "the object so that it can be fetched in conjunction with
FetchGCSObject. This Processor is designed to run on Primary Node only "
+ "in a cluster. If the primary node changes, the new Primary Node
will pick up where the previous node left off without duplicating "
+ "all of the data.")
diff --git
a/nifi-nar-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/storage/PutGCSObject.java
b/nifi-nar-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/storage/PutGCSObject.java
index ef33008b0c..70cc3332fc 100644
---
a/nifi-nar-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/storage/PutGCSObject.java
+++
b/nifi-nar-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/storage/PutGCSObject.java
@@ -107,17 +107,15 @@ import static
org.apache.nifi.processors.gcp.storage.StorageAttributes.URI_DESC;
@InputRequirement(InputRequirement.Requirement.INPUT_REQUIRED)
@Tags({"google", "google cloud", "gcs", "archive", "put"})
-@CapabilityDescription("Puts flow files to a Google Cloud Bucket.")
+@CapabilityDescription("Writes the contents of a FlowFile as an object in a
Google Cloud Storage.")
@SeeAlso({FetchGCSObject.class, DeleteGCSObject.class, ListGCSBucket.class})
@DynamicProperty(name = "The name of a User-Defined Metadata field to add to
the GCS Object",
value = "The value of a User-Defined Metadata field to add to the GCS
Object",
description = "Allows user-defined metadata to be added to the GCS
object as key/value pairs",
expressionLanguageScope = ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
@ReadsAttributes({
- @ReadsAttribute(attribute = "filename", description = "Uses the
FlowFile's filename as the filename for the " +
- "GCS object"),
- @ReadsAttribute(attribute = "mime.type", description = "Uses the
FlowFile's MIME type as the content-type for " +
- "the GCS object")
+ @ReadsAttribute(attribute = "filename", description = "Uses the
FlowFile's filename as the filename for the GCS object"),
+ @ReadsAttribute(attribute = "mime.type", description = "Uses the
FlowFile's MIME type as the content-type for the GCS object")
})
@WritesAttributes({
@WritesAttribute(attribute = BUCKET_ATTR, description = BUCKET_DESC),
diff --git
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/CompressContent.java
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/CompressContent.java
index 5e1e202cc4..4868d4ca74 100644
---
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/CompressContent.java
+++
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/CompressContent.java
@@ -88,8 +88,10 @@ import java.util.zip.InflaterInputStream;
@InputRequirement(Requirement.INPUT_REQUIRED)
@Tags({"content", "compress", "decompress", "gzip", "bzip2", "lzma",
"xz-lzma2", "snappy", "snappy-hadoop", "snappy framed", "lz4-framed",
"deflate", "zstd", "brotli"})
@CapabilityDescription("Compresses or decompresses the contents of FlowFiles
using a user-specified compression algorithm and updates the mime.type "
- + "attribute as appropriate. This processor operates in a very memory
efficient way so very large objects well beyond the heap size "
- + "are generally fine to process")
+ + "attribute as appropriate. A common idiom is to precede CompressContent
with IdentifyMimeType and configure Mode='decompress' AND Compression
Format='use mime.type attribute'. "
+ + "When used in this manner, the MIME type is automatically detected and
the data is decompressed, if necessary. "
+ + "If decompression is unnecessary, the data is passed through to the
'success' relationship."
+ + " This processor operates in a very memory efficient way so very large
objects well beyond the heap size are generally fine to process.")
@ReadsAttribute(attribute = "mime.type", description = "If the Compression
Format is set to use mime.type attribute, this attribute is used to "
+ "determine the compression type. Otherwise, this attribute is ignored.")
@WritesAttribute(attribute = "mime.type", description = "If the Mode property
is set to compress, the appropriate MIME Type is set. If the Mode "
diff --git
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ConvertJSONToSQL.java
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ConvertJSONToSQL.java
index f07fcbfe9f..7af19faf00 100644
---
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ConvertJSONToSQL.java
+++
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ConvertJSONToSQL.java
@@ -16,27 +16,6 @@
*/
package org.apache.nifi.processors.standard;
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.nio.charset.StandardCharsets;
-import java.sql.Connection;
-import java.sql.DatabaseMetaData;
-import java.sql.ResultSet;
-import java.sql.ResultSetMetaData;
-import java.sql.SQLException;
-import java.sql.Types;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
-import java.util.concurrent.atomic.AtomicReference;
-
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
@@ -68,6 +47,27 @@ import org.apache.nifi.processor.io.InputStreamCallback;
import org.apache.nifi.processor.io.OutputStreamCallback;
import org.apache.nifi.processor.util.StandardValidators;
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.nio.charset.StandardCharsets;
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
+import java.util.concurrent.atomic.AtomicReference;
+
import static
org.apache.nifi.flowfile.attributes.FragmentAttributes.FRAGMENT_COUNT;
import static
org.apache.nifi.flowfile.attributes.FragmentAttributes.FRAGMENT_ID;
import static
org.apache.nifi.flowfile.attributes.FragmentAttributes.FRAGMENT_INDEX;
@@ -75,7 +75,7 @@ import static
org.apache.nifi.flowfile.attributes.FragmentAttributes.copyAttribu
@SideEffectFree
@SupportsBatching
-@SeeAlso(PutSQL.class)
+@SeeAlso({PutSQL.class, PutDatabaseRecord.class})
@InputRequirement(Requirement.INPUT_REQUIRED)
@Tags({"json", "sql", "database", "rdbms", "insert", "update", "delete",
"relational", "flat"})
@CapabilityDescription("Converts a JSON-formatted FlowFile into an UPDATE,
INSERT, or DELETE SQL statement. The incoming FlowFile is expected to be "
diff --git
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/EncodeContent.java
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/EncodeContent.java
index 869605b7d2..54874a2de2 100644
---
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/EncodeContent.java
+++
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/EncodeContent.java
@@ -16,16 +16,6 @@
*/
package org.apache.nifi.processors.standard;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
-
import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Base32InputStream;
import org.apache.commons.codec.binary.Base32OutputStream;
@@ -50,11 +40,21 @@ import
org.apache.nifi.processors.standard.util.ValidatingBase64InputStream;
import org.apache.nifi.stream.io.StreamUtils;
import org.apache.nifi.util.StopWatch;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+
@SideEffectFree
@SupportsBatching
@InputRequirement(Requirement.INPUT_REQUIRED)
-@Tags({"encode", "decode", "base64", "hex"})
-@CapabilityDescription("Encode or decode contents using configurable encoding
schemes")
+@Tags({"encode", "decode", "base64", "base32", "hex"})
+@CapabilityDescription("Encode or decode the contents of a FlowFile using
Base64, Base32, or hex encoding schemes")
public class EncodeContent extends AbstractProcessor {
public static final String ENCODE_MODE = "Encode";
diff --git
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ExtractText.java
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ExtractText.java
index 8e2dafd258..c006e934ff 100644
---
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ExtractText.java
+++
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ExtractText.java
@@ -16,25 +16,6 @@
*/
package org.apache.nifi.processors.standard;
-import static io.krakens.grok.api.GrokUtils.getNameGroups;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.atomic.AtomicReference;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
import org.apache.nifi.annotation.behavior.DynamicProperty;
import org.apache.nifi.annotation.behavior.InputRequirement;
import org.apache.nifi.annotation.behavior.InputRequirement.Requirement;
@@ -61,6 +42,25 @@ import org.apache.nifi.processor.io.InputStreamCallback;
import org.apache.nifi.processor.util.StandardValidators;
import org.apache.nifi.stream.io.StreamUtils;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import static io.krakens.grok.api.GrokUtils.getNameGroups;
+
@SideEffectFree
@SupportsBatching
@InputRequirement(Requirement.INPUT_REQUIRED)
@@ -111,7 +111,8 @@ public class ExtractText extends AbstractProcessor {
public static final PropertyDescriptor MAX_BUFFER_SIZE = new
PropertyDescriptor.Builder()
.name("Maximum Buffer Size")
- .description("Specifies the maximum amount of data to buffer (per
file) in order to apply the regular expressions. Files larger than the
specified maximum will not be fully evaluated.")
+ .description("Specifies the maximum amount of data to buffer (per
FlowFile) in order to apply the regular expressions. " +
+ "FlowFiles larger than the specified maximum will not be fully
evaluated.")
.required(true)
.addValidator(StandardValidators.DATA_SIZE_VALIDATOR)
.addValidator(StandardValidators.createDataSizeBoundsValidator(0,
Integer.MAX_VALUE))
@@ -120,7 +121,7 @@ public class ExtractText extends AbstractProcessor {
public static final PropertyDescriptor MAX_CAPTURE_GROUP_LENGTH = new
PropertyDescriptor.Builder()
.name("Maximum Capture Group Length")
- .description("Specifies the maximum number of characters a given
capture group value can have. Any characters beyond the max will be
truncated.")
+ .description("Specifies the maximum number of characters a given
capture group value can have. Any characters beyond the max will be truncated.")
.required(false)
.defaultValue("1024")
.addValidator(StandardValidators.POSITIVE_INTEGER_VALIDATOR)
diff --git
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PartitionRecord.java
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PartitionRecord.java
index 6fe54e7d48..ba6b9f8af4 100644
---
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PartitionRecord.java
+++
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PartitionRecord.java
@@ -69,12 +69,11 @@ import java.util.stream.Stream;
@SupportsBatching
@InputRequirement(Requirement.INPUT_REQUIRED)
-@CapabilityDescription("Receives Record-oriented data (i.e., data that can be
read by the configured Record Reader) and evaluates one or more RecordPaths
against the "
- + "each record in the incoming FlowFile. Each record is then grouped with
other \"like records\" and a FlowFile is created for each group of \"like
records.\" What it means for "
- + "two records to be \"like records\" is determined by user-defined
properties. The user is required to enter at least one user-defined property
whose value is a RecordPath. Two "
- + "records are considered alike if they have the same value for all
configured RecordPaths. Because we know that all records in a given output
FlowFile have the same value for the "
- + "fields that are specified by the RecordPath, an attribute is added for
each field. See Additional Details on the Usage page for more information and
examples.")
-@DynamicProperty(name="The name given to the dynamic property is the name of
the attribute that will be used to denote the value of the associted
RecordPath.",
+@CapabilityDescription("Splits, or partitions, record-oriented data based on
the configured fields in the data. One or more properties must be added. The
name of the property is the name " +
+ "of an attribute to add. The value of the property is a RecordPath to
evaluate against each Record. Two records will go to the same outbound FlowFile
only if they have the same value for each " +
+ "of the given RecordPaths. Because we know that all records in a given
output FlowFile have the same value for the fields that are specified by the
RecordPath, an attribute is added for each " +
+ "field. See Additional Details on the Usage page for more information and
examples.")
+@DynamicProperty(name="The name given to the dynamic property is the name of
the attribute that will be used to denote the value of the associated
RecordPath.",
value="A RecordPath that points to a field in the Record.",
description="Each dynamic property represents a RecordPath that will be
evaluated against each record in an incoming FlowFile. When the value of the
RecordPath is determined "
+ "for a Record, an attribute is added to the outgoing FlowFile. The
name of the attribute is the same as the name of this property. The value of
the attribute is the same as "
diff --git
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/UnpackContent.java
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/UnpackContent.java
index 6127308bf8..ede27cc904 100644
---
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/UnpackContent.java
+++
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/UnpackContent.java
@@ -16,26 +16,6 @@
*/
package org.apache.nifi.processors.standard;
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.nio.file.Path;
-import java.time.ZoneId;
-import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
-import java.util.concurrent.atomic.AtomicReference;
-import java.util.regex.Pattern;
-
import net.lingala.zip4j.io.inputstream.ZipInputStream;
import net.lingala.zip4j.model.LocalFileHeader;
import net.lingala.zip4j.model.enums.EncryptionMethod;
@@ -78,12 +58,32 @@ import org.apache.nifi.util.FlowFileUnpackagerV1;
import org.apache.nifi.util.FlowFileUnpackagerV2;
import org.apache.nifi.util.FlowFileUnpackagerV3;
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.nio.file.Path;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.regex.Pattern;
+
@SideEffectFree
@SupportsBatching
@InputRequirement(Requirement.INPUT_REQUIRED)
@Tags({"Unpack", "un-merge", "tar", "zip", "archive", "flowfile-stream",
"flowfile-stream-v3"})
@CapabilityDescription("Unpacks the content of FlowFiles that have been
packaged with one of several different Packaging Formats, emitting one to many "
- + "FlowFiles for each input FlowFile")
+ + "FlowFiles for each input FlowFile. Supported formats are TAR, ZIP,
and FlowFile Stream packages.")
@ReadsAttribute(attribute = "mime.type", description = "If the <Packaging
Format> property is set to use mime.type attribute, this attribute is used "
+ "to determine the FlowFile's MIME Type. In this case, if the
attribute is set to application/tar, the TAR Packaging Format will be used. If "
+ "the attribute is set to application/zip, the ZIP Packaging Format
will be used. If the attribute is set to application/flowfile-v3 or "