package com.thinkbiganalytics.nifi.v2.ingest;
/*-
* #%L
* thinkbig-nifi-core-processors
* %%
* Copyright (C) 2017 ThinkBig Analytics
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
import com.thinkbiganalytics.nifi.v2.common.CommonProperties;
import com.thinkbiganalytics.nifi.v2.thrift.ThriftService;
import org.apache.nifi.components.PropertyDescriptor;
import org.apache.nifi.processor.Relationship;
import org.apache.nifi.processor.util.StandardValidators;
/**
* Properties shared by ingest components
*/
public interface IngestProperties extends CommonProperties {
/**
* Common Controller services
**/
PropertyDescriptor THRIFT_SERVICE = new PropertyDescriptor.Builder()
.name("Database Connection Pooling Service")
.description("The Controller Service that is used to obtain connection to database")
.required(true)
.identifiesControllerService(ThriftService.class)
.build();
// ---------------------------
// Common component properties
// ---------------------------
/**
* Source table schema name
*/
PropertyDescriptor SOURCE_SCHEMA = new PropertyDescriptor.Builder()
.name("Source schema")
.description("Name of the schema or database for the source table")
.required(true)
.defaultValue("${metadata.category.systemName}")
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
.expressionLanguageSupported(true)
.build();
/**
* Source table name
*/
PropertyDescriptor SOURCE_TABLE = new PropertyDescriptor.Builder()
.name("Source table")
.description("Name of the source table")
.required(true)
.defaultValue("${metadata.systemFeedName}_valid")
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
.expressionLanguageSupported(true)
.build();
/**
* Target table schema name
*/
PropertyDescriptor TARGET_SCHEMA = new PropertyDescriptor.Builder()
.name("Target schema")
.description("Name of the schema or database for the target table")
.required(true)
.defaultValue("${metadata.category.systemName}")
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
.expressionLanguageSupported(true)
.build();
/**
* Target table name
*/
PropertyDescriptor TARGET_TABLE = new PropertyDescriptor.Builder()
.name("Target table")
.description("Name of the target table")
.required(true)
.defaultValue("${metadata.systemFeedName}")
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
.expressionLanguageSupported(true)
.build();
PropertyDescriptor FEED_PARTITION = new PropertyDescriptor.Builder()
.name("Feed partition value")
.description("Feed timestamp that identifies the current feed partition")
.required(true)
.defaultValue("${feedts}")
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
.expressionLanguageSupported(true)
.build();
PropertyDescriptor PARTITION_SPECIFICATION = new PropertyDescriptor.Builder()
.name("Partition Specification")
.description("Partition specification in format: field|type|formula\nfield|type|formula")
.defaultValue("${metadata.table.partitionSpecs}")
.required(false)
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
.expressionLanguageSupported(true)
.build();
PropertyDescriptor FIELD_SPECIFICATION = new PropertyDescriptor.Builder()
.name("Field specification")
.description("Pipe-delim and newline for each field: column name|data type|comment|primary_key?|created_dt?|modified_dt?")
.required(true)
.defaultValue("${metadata.table.fieldStructure}")
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
.expressionLanguageSupported(true)
.build();
/**
* Field structure of the feed table
*/
PropertyDescriptor FEED_FIELD_SPECIFICATION = new PropertyDescriptor.Builder()
.name("Feed Field specification")
.description("Pipe-delim and newline for each field: column name|data type|comment")
.defaultValue("${metadata.table.feedFieldStructure}")
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
.expressionLanguageSupported(true)
.build();
PropertyDescriptor FEED_FORMAT_SPECS = new PropertyDescriptor.Builder()
.name("Feed Table Storage Format")
.description(
"Provide format and delimiter specification. This is the full clause starting with the INPUTFORMAT such as: INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' ")
.required(true)
.defaultValue("${metadata.table.feedFormat}")
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
.expressionLanguageSupported(true)
.build();
PropertyDescriptor TARGET_FORMAT_SPECS = new PropertyDescriptor.Builder()
.name("Target Table Format")
.description(
"Provide storage format specification for the target tables")
.required(true)
.defaultValue("${metadata.table.targetFormat}")
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
.expressionLanguageSupported(true)
.build();
PropertyDescriptor TARGET_TBLPROPERTIES = new PropertyDescriptor.Builder()
.name("Target Table Properties")
.description("TblProperties clause generally specificying the compression option")
.defaultValue("${metadata.table.targetTblProperties}")
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
.expressionLanguageSupported(true)
.build();
PropertyDescriptor PARTITION_SPECS = new PropertyDescriptor.Builder()
.name("Partition specification")
.description("Provide list of partition columns column-delimited")
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
.defaultValue("${metadata.table.partitionStructure}")
.expressionLanguageSupported(true)
.build();
// Standard Relationships
Relationship REL_SUCCESS = new Relationship.Builder()
.name("success")
.description("Successfully relationship.")
.build();
Relationship REL_FAILURE = new Relationship.Builder()
.name("failure")
.description("SQL query execution failed. Incoming FlowFile will be penalized and routed to this relationship")
.build();
}