मैं सुझाव दे सकता हूं ExecuteGroovyScript
nifi v1.5+ में प्रोसेसर
नई संपत्ति परिभाषित करें SQL.mydb
- आपको इसके मान को डेटाबेस से लिंक करने के लिए प्रेरित किया जाएगा (DBCPConnectionPool
)
वह डेटाबेस चुनें जहां आप टेबल बनाना चाहते हैं
और इस स्क्रिप्ट का उपयोग करें (मान लें कि एवरो स्कीमा प्रवाह फ़ाइल सामग्री में है)
import groovy.json.JsonSlurper
def ff = session.get()
if(!ff)return
//parse avro schema from flow file content
def schema = ff.read().withReader("UTF-8"){ new JsonSlurper().parse(it) }
//define type mapping
def typeMap = [
"string" : "varchar(255)",
"long" : "numeric(10)",
[ "null", "string" ]: "varchar(255)",
[ "null", "long" ] : "numeric(10)",
]
assert schema.name && schema.name=~/^\w.*/
//build create table statement
def createTable = "create table ${schema.name} (" +
schema.fields.collect{ "\n ${it.name.padRight(39)} ${typeMap[it.type]}" }.join(',') +
"\n)"
//execute statement through the custom defined property
//SQL.mydb references http://docs.groovy-lang.org/2.4.10/html/api/groovy/sql/Sql.html object
SQL.mydb.execute(createTable as String) //important to cast to String
//transfer flow file to success
REL_SUCCESS << ff