gpt4 book ai didi

hive - 使用 Hiveql 循环

转载 作者:行者123 更新时间:2023-12-04 14:10:34 24 4
gpt4 key购买 nike

我正在尝试合并 2 个数据集,比如 A 和 B。数据集 A 有一个变量“Flag”,它采用 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

但它抛出错误。

cannot recognize input near 'for' 'flag' 'in'



谁能告诉我我哪里出错了。

谢谢!

最佳答案

  • 您应该将循环逻辑添加到 shell 脚本中。

  • 文件名:loop_data.sh
    for flag in 1 2;
    do
    hive -hivevar flag=$flag -f new_data.hql
    done

    并执行脚本,如:
    sh loop_data.sh
  • 在您的 new_data.hql 脚本中,您正在创建表。由于您应该将 DDL 和 DML 拆分为 2 个单独的脚本。赞

  • 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}

    并更新您的 shell 脚本,例如:

    文件名: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

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

    关于hive - 使用 Hiveql 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35625826/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com