zoukankan      html  css  js  c++  java
  • Load HDFS数据到Hive出现Shell错误

    写shell脚本 从HDFS导数到Hive,报错如下:

    mismatched input '<EOF>' expecting DATA near 'load' in load statement

    shell代码如下:

    #!/bin/bash
    
    do_date=$1
    APP=gmall
    hive=/opt/module/hive/bin/hive
    
    sql="
    load data inpath '/origin_data/$APP/db/user_info/$do_date' OVERWRITE into table $APP.ods_user_info partition(dt='$do_date');
    "
    $hive -e $sql

    出错的原因是最后一个$sql需要加双引号"",否则后面无法将$sql解析成的值(/origin_data/gmall/db/user_info/2019-12-08 OVERWRITE into table gmall.ods_user_info partition(dt='2019-12-08'))识别为字符串

    改为$hive -e "$sql"。

    注意shell中单引号和双引号的区别:!!!

    单引号:输出时会将引号内的内容原样输出。

    双引号:会先把变量、命令、转义字符解析出结果,即使双引号里有单引号引起来的变量,也会把变量解析成值,然后再输出最终内容。

    例如:

    #!/bin/bash
    do_date=$1
    APP=gmall
    hive=/opt/module/hive/bin/hive
    sql
    ="load data inpath '/origin_data/$APP/db/user_info/$do_date' OVERWRITE into table $APP.ods_user_info partition(dt='$do_date');"
    echo '/origin_data/$APP/db/user_info/$do_date' echo "$sql"
    root@hadoop102 bin]# ods_order_info.sh 2019-12-08

    输出结果:

    /origin_data/$APP/db/user_info/$do_date
    
    load data inpath '/origin_data/gmall/db/user_info/2019-12-08' OVERWRITE into table gmall.ods_user_info partition(dt='2019-12-08');
  • 相关阅读:
    HYSBZ 3813 奇数国
    HYSBZ 4419 发微博
    HYSBZ 1079 着色方案
    HYSBZ 3506 排序机械臂
    HYSBZ 3224 Tyvj 1728 普通平衡树
    Unity 3D,地形属性
    nginx 的naginx 种包含include关键字
    Redis 出现NOAUTH Authentication required解决方案
    mysql 8.0出现 Public Key Retrieval is not allowed
    修改jar包里的源码时候需要注意的问题
  • 原文地址:https://www.cnblogs.com/lucas-zhao/p/12014374.html
Copyright © 2011-2022 走看看