我正在尝试使用QueryDatabaseTable
和PutHiveQl
处理器将数据从MySql导入到Hive,但是会发生错误。
我有一些问题:
puthiveql
的输出格式是什么?答案 0 :(得分:5)
以下是您的问题的一些信息:
输入到PutHiveQL的流文件在发送到Hive(或发送失败)后输出,因此输出格式(和内容)与输入格式/内容相同。
应该事先创建输出表,但是你可以发送一个"创建表,如果不是EXISTS"语句首先,它将为您创建表。
我不知道现有模板,但基本方法可能如下:
QueryDatabaseTable - > ConvertAvroToJSON - > SplitJson - > EvaluateJsonPath - > UpdateAttribute(可选) - > ReplaceText - > PutHiveQL
QueryDatabaseTable将对MySQL表进行增量提取。
ConvertAvroToJSON会将记录转换为您可以使用的格式 操纵(目前没有多个处理Avro的处理器)
SplitJson将为每个记录/行创建一个流文件
EvaluateJsonPath可以从记录中提取值并将其放入 流文件属性
UpdateAttribute可以添加包含类型信息的属性。 这是可选的,如果您使用预准备语句,则使用此选项 PutHiveQL
ReplaceText构建一个HiveQL语句(例如INSERT) 参数(如果您需要预准备语句)或硬编码值 来自属性
PutHiveQL执行语句以将记录输入Hive
在NiFi 1.0中,将会有一个ConvertAvroToORC处理器,这是一种将数据导入Hive(以及从Hive查询)的更有效方法。这种方法是将QueryDatabaseTable的结果转换为ORC文件,然后将其置于HDFS中(使用PutHDFS),并生成部分Hive DDL语句以便为您创建表(使用Avro记录中的类型信息)。您将该语句(填写目标位置后)传递给PutHiveQL,您可以立即开始查询您的表。
还有一个PutHiveStreaming处理器的计划,它将Avro记录作为输入,因此该流程只是QueryDatabaseTable - > PutHiveStreaming,它将记录直接插入Hive(并且比多个INSERT语句更有效)。