次のハイブコマンドを参照してください:
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..