SET varname = value
Hive QL に相当する SQL を探しています
私はこのようなことができることを知っています:
SET CURRENT_DATE = '2012-09-16';
SELECT * FROM foo WHERE day >= @CURRENT_DATE
しかし、その後、次のエラーが発生します。
ここでは文字「@」はサポートされていません
変数置換には、特別なhiveconfを使用する必要があります。例えば
hive> set CURRENT_DATE='2012-09-16';
hive> select * from foo where day >= ${hiveconf:CURRENT_DATE}
同様に、コマンドラインで渡すことができます:
% hive -hiveconf CURRENT_DATE='2012-09-16' -f test.hql
envとsystem${env:USER}
変数もあるので、たとえば参照できることに注意してください。
使用可能なすべての変数を表示するには、コマンド ラインから次のコマンドを実行します。
% hive -e 'set;'
またはハイブプロンプトから実行します
hive> set;
更新: hivevar変数の
使用も開始し、 hive CLI からsource
コマンド (またはコマンド ラインから -i オプションとして渡す)を使用して含めることができる hql スニペットにそれらを配置しました。ここでの利点は、変数を hivevar プレフィックスの有無にかかわらず使用でき、グローバルとローカルの使用に似たものを許可することです。
したがって、tablename 変数を設定するsetup.hqlがあるとします。
set hivevar:tablename=mytable;
次に、ハイブに持ち込むことができます:
hive> source /path/to/setup.hql;
クエリで使用します。
hive> select * from ${tablename}
また
hive> select * from ${hivevar:tablename}
「ローカル」テーブル名を設定することもできます。これは ${tablename} の使用に影響しますが、${hivevar:tablename} には影響しません。
hive> set tablename=newtable;
hive> select * from ${tablename} -- uses 'newtable'
対
hive> select * from ${hivevar:tablename} -- still uses the original 'mytable'
おそらくCLIからはあまり意味がありませんが、sourceを使用するファイルに hql を含めることができますが、スクリプトの残りの部分で使用するために変数の一部を「ローカルに」設定します。
次のようにドル記号と括弧を使用してみましたか:
SELECT *
FROM foo
WHERE day >= '${CURRENT_DATE}';
別のクエリの出力を変数に保存し、後でコードで同じものを使用できます。
set var=select count(*) from My_table;
${hiveconf:var};