Create a Postgresql table from Avro Schema in Nifi

后端 未结 1 687
故里飘歌
故里飘歌 2021-01-15 07:38

Using InferAvroSchema I got an Avro Schema of my file. I want to create a table in PostregSql using this Avro schema. Which processor I have to use.

I use : GetFile-

1条回答
  •  生来不讨喜
    2021-01-15 08:20

    I can suggest ExecuteGroovyScript processor in nifi v1.5+

    define new property SQL.mydb - you will be prompted to link its value to a database (DBCPConnectionPool)

    choose the database where you want to create a table

    and use this script (assume avro schema is in the flow file content)

    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
    

    0 讨论(0)
提交回复
热议问题