2つのデータセット、たとえばAとBをマージしようとしています。データセットAには、2つの値を取る変数「フラグ」があります。両方のデータを一緒にマージするのではなく、「フラグ」変数に基づいて2つのデータセットをマージしようとしました。
マージするコードは次のとおりです。
create table new_data as
select a.*,b.y
from A as a left join B as b
on a.x=b.x
私はCLIを介してHiveコードを実行しているので、次のコマンドを使用してこれを呼び出しています
Hive -f new_data.hql
「Flag」変数に基づいてデータをマージするために呼び出しているコードのループ部分は次のとおりです。
for flag in 1 2;
do
Hive -hivevar flag=$flag -f new_data.hql
done
上記のコードを別の「.hql」ファイルに入れて呼び出します。
Hive -f loop_data.hql
しかし、それはエラーを投げています。
「for」「flag」「in」の近くの入力を認識できません
誰が私が間違っているのか教えてください。
ありがとう!
ファイル名:loop_data.sh
for flag in 1 2;
do
Hive -hivevar flag=$flag -f new_data.hql
done
次のようにスクリプトを実行します。
sh loop_data.sh
DDL:create_new_data.hql
create table new_data as
select
a.*,
b.y
from
A as a left join
B as b on
a.x = b.x
where
1 = 0;
DML:insert_new_data.hql
insert into new_data
select
a.*,
b.y
from
A as a left join
B as b on
a.x = b.x
where
flag = ${hiveconf:flag}
次のようにシェルスクリプトを更新します。
ファイル名:loop_new_data.sh
# Create table
Hive -f create_new_data.hql
# Insert data
for flag in 1 2;
do
Hive -hiveconf flag=$flag -f insert_new_data.hql
done
そしてそれを次のように実行します:
sh loop_new_data.sh
詳細が必要な場合はお知らせください。