2

次のハイブコマンドを参照してください:

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 ロケーションの限定セットがあると仮定します。そして、私のハイブクエリがこれらすべての場所からテーブルにデータをロードするようなものである場合、次のように使用したいと思います。

しかし、それはハイブでは正しく機能しません。仮定: input_files は、hdfs://foo/bar/1,hdfs://foo/bar/2,hdfs://foo/bar/3これがハイブ内の有効な場所ではないことを解決します。

これを達成するために私が理解している唯一の方法は、実行する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..

4

1 に答える 1