PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Créer une table Postgresql à partir d'Avro Schema dans Nifi

Je peux suggérer ExecuteGroovyScript processeur dans nifi v1.5+

définir la nouvelle propriété SQL.mydb - vous serez invité à lier sa valeur à une base de données (DBCPConnectionPool )

choisissez la base de données où vous voulez créer une table

et utilisez ce script (en supposant que le schéma avro se trouve dans le contenu du fichier de flux)

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