bugfix> shell > 投稿

シェルスクリプトを使用して、ハイブクエリを実行したいです。 スクリプトシェルは次のようになります。

#!/bin/bash
DST_ARCHIVE_TABLE=as400_nat_pp09_siedta_raw_dev.natart_archive
SRC_TABLE_HIVE=as400_nat_pp09_siedta_raw_dev.natart_to_process 
current_date=$(date +%Y%m%d%H%M%S)
hive -e 'SET hive.exec.dynamic.partition = true; SET hive.exec.dynamic.partition.mode = nonstrict; insert into table ${DST_ARCHIVE_TABLE} partition (to_porcess_ts) select * from ${SRC_TABLE_HIVE} where to_porcess_ts < ${current_date} '

しかし、このエラーが発生しました:

FAILED: ParseException line 1:19 cannot recognize input near 'table' '$' '{' in table name

{ を削除しましたしかし、私はまだ同じエラーがあります

回答 2 件
  • こんにちは、以下のようにしてみてください:

    echo "SET hive.exec.dynamic.partition = true; SET hive.exec.dynamic.partition.mode = nonstrict; insert into table ${DST_ARCHIVE_TABLE} partition (to_porcess_ts) select * from ${SRC_TABLE_HIVE} where to_porcess_ts < ${current_date}" | hive -e
    
    

    または

    echo "SET hive.exec.dynamic.partition = true; SET hive.exec.dynamic.partition.mode = nonstrict; insert into table ${DST_ARCHIVE_TABLE} partition (to_porcess_ts) select * from ${SRC_TABLE_HIVE} where to_porcess_ts < ${current_date} - e" | hive
    
    

  • hiveconf を使用して以下のアプローチを試してください  (例を示します):

    1)Hiveクエリを.hqlファイルに移動します。パラメーターは hiveconf で示されます 。

    -- query.hql
    select * from ${hiveconf:MY_DB}.${hiveconf:MY_TABLE} limit 1
    
    

    2)シェルスクリプトを作成して、クエリのパラメーター値を設定し、実行します。

    -- query.sh
    #!/bin/bash
    hive -hiveconf MY_DB=default -hiveconf MY_TABLE=my_hive_table_name -f query.hql
    
    

    3)実行する

    ./query.sh
    
    

あなたの答え