参考以下配置单元命令:
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
我可以用逗号分隔的绝对文件路径列表吗?
LOAD DATA INPATH 'hdfs://foo/bar1,hdfs://foo/bar2' INTO TABLE foo1
我正在寻找的实际用例:
使用
时<datasets>
<dataset name="input1">
<uri-template>hdfs://foo/bar/a</uri-template>
</dataset>
</datasets>
<input-events>
<data-in name="coordInput1" dataset="input1">
<start-instance>${coord:current(-23)}</start-instance>
<end-instance>${coord:current(0)}</end-instance>
</data-in>
</input-events>
<action>
<workflow>
...
<configuration>
<property>
<name>input_files</name>
<value>${coord:dataIn('coordInput1')}</value>
</property>
</configuration>
</workflow>
</action>
在co-ordinator.xml中的,假设有一组合格的24个hdfs位置作为我的输入。 如果我的hive查询是某种将数据加载到所有这些位置的表中,我想使用它像: CREATE TABLE table1( col1 STRING )LOCATION($ {input_files});
但是,这在蜂巢中不起作用。
假设:input_files解析为hdfs://foo/bar/1,hdfs://foo/bar/2,hdfs://foo/bar/3
这不会成为hive中的有效位置。
我理解实现这一点的唯一方法是,运行一个java mapper,它将input_files
作为输入并输出一个运行的动态配置单元脚本
`LOAD DATA INPATH 'hdfs://foo/bar/1' INTO TABLE foo1`
`LOAD DATA INPATH 'hdfs://foo/bar/2' INTO TABLE foo1`
分开。
所以,最后,我的问题是,当我能够解析我感兴趣的整个数据集时,我可以将其用作${coord:dataIn('coordInput1')}
,我不能利用它来实现这一目标,避免个别LOAD DATA..
或ALTER TABLE ADD PARTITIONS..
个人陈述?
答案 0 :(得分:0)
使用java动作节点执行此逻辑。您可以使用逗号拆分input_files并使用hive jdbc连接在所有输入位置的循环中执行hive命令。