我正在尝试使用QueryDatabaseTable
和PutHiveQl
处理器将数据从MySql导入到Hive ,但是会发生错误.
我有一些问题:
puthiveql
?以下是有关您的问题的一些信息:
输入到PutHiveQL的流文件在发送到Hive后输出(或者如果发送失败),则输出格式(和内容)与输入格式/内容相同.
应该事先创建输出表,但是您可以首先向PutHiveQL发送"CREATE TABLE IF NOT 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语句更有效).
归档时间: |
|
查看次数: |
5181 次 |
最近记录: |