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');
  • 相关阅读:
    laravel md5+salt 密码
    sql语句 当前时间查找重复 时间戳转换
    Supesite 参数说明
    ajax
    PDO操作
    laravel paginate动态分页
    PHP iconv()函数转字符编码的问题(转)
    计算几何基础模板(2014.10.6一直沿用)
    hdu 4893
    2014 ACM/ICPC 鞍山赛区网络赛(清华命题)
  • 原文地址:https://www.cnblogs.com/lucas-zhao/p/12014374.html
Copyright © 2011-2022 走看看