使用Hiveql进行循环

使用Hiveql进行循环,hive,hiveql,Hive,Hiveql,我试图合并2个数据集,比如A和B。数据集A有一个变量“Flag”,它接受2个值。我没有将这两个数据合并在一起,而是尝试根据“flag”变量合并两个数据集 合并代码如下所示: create table new_data as select a.*,b.y from A as a left join B as b on a.x=b.x for flag in 1 2; do hive -hivevar flag=$flag -f new_data.hql done 因为我是通过CLI运行配置

我试图合并2个数据集,比如A和B。数据集A有一个变量“Flag”,它接受2个值。我没有将这两个数据合并在一起,而是尝试根据“flag”变量合并两个数据集

合并代码如下所示:

create table new_data as
select a.*,b.y
from A as a left join B as b
on a.x=b.x
for flag in 1 2;
do
  hive -hivevar flag=$flag -f new_data.hql
done
因为我是通过CLI运行配置单元代码,所以我通过以下命令调用它

hive -f new_data.hql
我调用代码的循环部分是基于“Flag”变量合并数据,如下所示:

create table new_data as
select a.*,b.y
from A as a left join B as b
on a.x=b.x
for flag in 1 2;
do
  hive -hivevar flag=$flag -f new_data.hql
done
我将上述代码放在另一个“.hql”文件asn中调用它:

hive -f loop_data.hql
但这是一个错误

无法识别“”中“”标志“”的“”附近的输入

谁能告诉我哪里出错了

谢谢

  • 您应该将循环逻辑添加到shell脚本中
  • 文件名:loop_data.sh

    for flag in 1 2;
    do
      hive -hivevar flag=$flag -f new_data.hql
    done
    
    # 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_data.sh
    
  • 在新的_data.hql脚本中,您正在创建表。因为您应该在两个单独的脚本中拆分DDL和DML。像
  • DDL:创建新数据。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;
    
    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}
    
    DML:插入新数据。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;
    
    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}
    
    并更新shell脚本,如下所示:

    sh loop_data.sh
    
    文件名:loop\u new\u data.sh

    for flag in 1 2;
    do
      hive -hivevar flag=$flag -f new_data.hql
    done
    
    # 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
    

    如果需要更多信息,请告诉我。

    循环代码不是配置单元查询/脚本。配置单元-f只能运行配置单元查询。在shell脚本中使用循环。@KSNidhin:非常感谢您的评论。我正在通过putty运行配置单元代码。你能解释一下shell脚本是什么意思吗?我在技术上有点新手。flag变量有2个值1和2,对吗?这是配置单元查询中的筛选条件,对吗?@KSNidhin:你说得对。标志有2个变量,它是筛选条件。其思想是按标志分解数据并合并每个分区的数据。然后,您可以在配置单元查询中添加筛选条件,并在查询本身中进行合并,然后单独使用配置单元-f运行查询。感谢Ambish的回复!我怎么能在蜂箱里用呢shell@sahildesai请详细说明您的问题。上面的解决方案是针对命令行的,但我在hive Shell上使用hive查询。尽管@Beta的问题已经解决,但该主题仍然没有答案:如何在hive中循环?不是从壳里而是直接在蜂箱里?