Anda perlu menggunakan hiveconf khusus untuk substitusi variabel. misalnya
hive> set CURRENT_DATE='2012-09-16';
hive> select * from foo where day >= '${hiveconf:CURRENT_DATE}'
Demikian pula, Anda dapat meneruskan baris perintah:
% hive -hiveconf CURRENT_DATE='2012-09-16' -f test.hql
Perhatikan bahwa ada env dan variabel sistem juga, jadi Anda bisa mereferensikan ${env:USER}
misalnya.
Untuk melihat semua variabel yang tersedia, dari baris perintah, jalankan
% hive -e 'set;'
atau dari prompt sarang, lari
hive> set;
Pembaruan:
Saya sudah mulai menggunakan variabel hivevar juga, menempatkannya ke dalam cuplikan hql yang dapat saya sertakan dari sarang CLI menggunakan source
perintah (atau berikan opsi -i dari baris perintah). Manfaatnya di sini adalah bahwa variabel kemudian dapat digunakan dengan atau tanpa awalan sarang, dan memungkinkan sesuatu yang mirip dengan penggunaan global vs lokal.
Jadi, asumsikan memiliki beberapa setup.hql yang menetapkan variabel tablename:
set hivevar:tablename=mytable;
kemudian, saya bisa membawa ke sarang:
hive> source /path/to/setup.hql;
dan gunakan dalam kueri:
hive> select * from ${tablename}
atau
hive> select * from ${hivevar:tablename}
Saya juga bisa menyetel tablename "lokal", yang akan memengaruhi penggunaan $ {tablename}, tetapi tidak untuk $ {hivevar: tablename}
hive> set tablename=newtable;
hive> select * from ${tablename} -- uses 'newtable'
vs.
hive> select * from ${hivevar:tablename} -- still uses the original 'mytable'
Mungkin tidak terlalu berarti dari CLI, tetapi dapat memiliki hql dalam file yang menggunakan source , tetapi mengatur beberapa variabel "secara lokal" untuk digunakan dalam skrip lainnya.