Nifi从ExecuteSQL输出中提取内容

Nifi从ExecuteSQL输出中提取内容,sql,oracle,apache-nifi,vertica,Sql,Oracle,Apache Nifi,Vertica,我试图从Oracle获取DDL,然后将DDL转换为适合Vertica数据库的语法。我的ExecuteSQL处理器SQL查询是: select dbms_metadata.get_ddl('TABLE','${table_name}','${owner}') as t_ddl from dual 我得到以下AVRO格式的输出: Objavro.schemaú{"type":"record","name":"NiFi_ExecuteSQL_Record","namespace":"any.data

我试图从Oracle获取DDL,然后将DDL转换为适合Vertica数据库的语法。我的ExecuteSQL处理器SQL查询是:

select dbms_metadata.get_ddl('TABLE','${table_name}','${owner}') as t_ddl from dual
我得到以下AVRO格式的输出:

Objavro.schemaú{"type":"record","name":"NiFi_ExecuteSQL_Record","namespace":"any.data","fields":[{"name":"T_DDL","type":["null","string"]}]}avro.codecnull­¶½``¼�÷KGÙ‡LÞoCäÞ
  CREATE TABLE "VDBA"."CUSTOMERS" 
   (    "CUSTOMER_ID" NUMBER(10,0) NOT NULL ENABLE, 
    "CUSTOMER_NAME" VARCHAR2(50) NOT NULL ENABLE, 
    "CITY" VARCHAR2(50), 
    "ITEMS_CNT" NUMBER(5,0), 
    "TSTAMP" TIMESTAMP (6) DEFAULT CURRENT_TIMESTAMP NOT NULL ENABLE
   ) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS" ­¶½``¼�÷KGÙ‡LÞoC
从这个输出中,我只需要以下文本:

CREATE TABLE VDBA.CUSTOMERS 
   (CUSTOMER_ID NUMBER(10,0) NOT NULL, 
    CUSTOMER_NAME VARCHAR2(50) NOT NULL, 
    CITY VARCHAR2(50), 
    ITEMS_CNT NUMBER(5,0), 
    TSTAMP TIMESTAMP (6) DEFAULT CURRENT_TIMESTAMP NOT NULL
   )
我无法理解下一步如何进行。文本处理器在这里工作吗?请给我一些前进的建议

谢谢和问候,
Bishal

尝试使用
ConvertAvroToJSON
处理器,然后从那里操作或提取JSON。

从NiFi 1.8.0开始,您可以使用ExecuteSQLRecord而不是ExecuteSQL,之后就不需要转换处理器了。然后,您可以使用CSVRecordSetWriter(配置为不输出标题或引号字符串)或带有文本
${T_DDL}
的FreeFormTextRecordSetWriter来输出包含DDL语句的单个字段的内容。

谢谢!我达到了预期的效果。在
ConvertAvroToJSON
之后,我应用了一些
ReplaceText
来获取所需的单词,然后是
ExtractText
来将sql存储在属性中,最后是
ExecuteSQL
来使用属性并创建表。非常感谢!!我会尽量缩短流量。