hadoop - 从绝对文件路径的逗号分隔列表配置单元加载数据

标签 hadoop hbase hive partitioning oozie

引用以下配置单元命令:

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>     

在 coordinator.xml 中,假设有一组合格的 24 个 hdfs 位置作为我的输入。 如果我的配置单元查询是从所有这些位置将数据加载到表中,我想像这样使用它: 创建表表 1( col1 字符串 )位置(${input_files});

但是,这在配置单元中无法正常工作。 假设:input_files 解析为 hdfs://foo/bar/1,hdfs://foo/bar/2,hdfs://foo/bar/3 结果证明这是无效的 hive 中的位置。

我理解的实现这一点的唯一方法是,运行一个将 input_files 作为输入的 java 映射器,并输出一个运行

的动态配置单元脚本
`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.. 语句吗?

最佳答案

使用 java Action 节点来完成这个逻辑。您可以使用逗号拆分 input_files,并使用 hive jdbc 连接在所有输入位置的循环中执行 hive 命令。

关于hadoop - 从绝对文件路径的逗号分隔列表配置单元加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12349614/

相关文章:

hadoop - 在hadoop猫,|头不起作用

hbase - 在 HBase 中获取过滤的行

基于RowKey后缀的HBase Shell查询

hadoop - 如何将Hive连接到Tableau?

hadoop - 星火集群启动问题

hadoop - 为什么 NameNode HA 使用 JournalNode 而不是 Zookeeper 本身?

scala - 递归地向数据框添加行

hadoop - 错误: Can't get Master address from zookeeper; znode data == null value

sql - 从另一个表创建临时表,包括配置单元中的分区列

json - Apache Hive : Convert Map<string, string> 到 json 字符串?