NiFi可以根据流文件内容生成创建表语句[s]
1.使用 ConvertAvroToORC 处理器创建 ORC 表:
如果要将 avro 数据转换为 ORC 格式,然后存储到 HDFS 中,则 ConvertAvroToORC 处理器将hive.ddl
属性添加到流文件中。
PutHDFS 处理器将absolute.hdfs.path
属性添加到流文件。
我们可以使用这个hive.ddl、absolute.hdfs.path属性并在 HDFS 目录的顶部动态创建 orc 表。
流动:
Pull data from source(ExecuteSQL...etc)
-> ConvertAvroToORC //add Hive DbName,TableName in HiveTableName property value-->
-> PutHDFS //store the orc file into HDFS location -->
-> ReplaceText //Replace the flowfile content with ${hive.ddl} Location '${absolute.hdfs.path}'-->
-> PutHiveQL //execute the create table statement
请参阅此链接以获取更多详细信息,请参阅上述流程。
2.使用 ExtractAvroMetaData 处理器创建 Avro 表:
流动:
ExecuteSQL (success)|-> PutHDFS //store data into HDFS
(success)|-> ExtractAvroMetadata //configure Metadata Keys as avro.schema
-> ReplaceText //replace flowfile content with avro.schema
-> PutHDFS //store the avsc file into schema directory
-> ReplaceText //create avro table on top of schema directory
-> PutHiveQL //execute the hive.ddl
示例AVRO创建表语句:
CREATE TABLE as_avro
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
STORED as INPUTFORMAT
'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
TBLPROPERTIES (
'avro.schema.url'='/path/to/the/schema/test_serializer.avsc');
我们将在上述流程中使用 ReplaceText 处理器更改模式 url 的路径。
使用ExecuteSQL处理器的另一种方法从源(如果源系统允许)从(sys.tables/INFORMATION_SCHEMA.COLUMNS ..etc )获取所有创建表语句(或)列信息,然后将脚本写入然后将它们存储在 Hive 中.map the data types
hive appropriate types
desired format
编辑:
要在流文件内容上运行grep
命令,我们需要使用ExecuteStreamCommand处理器
电调配置:
然后将output stream
关系提供给 ExtractText 处理器
ET 配置:
添加新属性为
内容
(?s)(.*)
然后content attribute
添加到流文件中,您可以使用该属性并准备创建表语句。