110

SET varname = valueHive QL に相当する SQL を探しています

私はこのようなことができることを知っています:

SET CURRENT_DATE = '2012-09-16';
SELECT * FROM foo WHERE day >= @CURRENT_DATE

しかし、その後、次のエラーが発生します。

ここでは文字「@」はサポートされていません

4

10 に答える 10

218

変数置換には、特別な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

envsystem${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 を含めることができますが、スクリプトの残りの部分で使用するために変数の一部を「ローカルに」設定します。

于 2012-09-18T22:03:29.833 に答える
7

次のようにドル記号括弧を使用してみましたか:

SELECT * 
FROM foo 
WHERE day >= '${CURRENT_DATE}';
于 2012-09-17T18:41:11.473 に答える
-7

別のクエリの出力を変数に保存し、後でコードで同じものを使用できます。

set var=select count(*) from My_table;
${hiveconf:var};
于 2016-05-07T00:01:34.320 に答える