Bạn cần sử dụng hiveconf đặc biệt để thay thế biến. ví dụ
hive> set CURRENT_DATE='2012-09-16';
hive> select * from foo where day >= '${hiveconf:CURRENT_DATE}'
tương tự, bạn có thể chuyển dòng lệnh:
% hive -hiveconf CURRENT_DATE='2012-09-16' -f test.hql
Lưu ý rằng có các biến env và hệ thống , vì vậy bạn có thể tham khảo${env:USER}
ví dụ.
Để xem tất cả các biến có sẵn, từ dòng lệnh, hãy chạy
% hive -e 'set;'
hoặc từ dấu nhắc tổ ong, chạy
hive> set;
Cập nhật:
Tôi cũng đã bắt đầu sử dụng các biến hivevar , đưa chúng vào các đoạn mã hql mà tôi có thể đưa vào từ hive CLI bằng source
lệnh (hoặc chuyển tùy chọn dưới dạng -i từ dòng lệnh). Lợi ích ở đây là biến sau đó có thể được sử dụng có hoặc không có tiền tố hivevar và cho phép một cái gì đó tương tự như sử dụng toàn cầu và cục bộ.
Vì vậy, giả sử có một số setup.hql đặt biến tên bảng:
set hivevar:tablename=mytable;
sau đó, tôi có thể đưa vào tổ ong:
hive> source /path/to/setup.hql;
và sử dụng trong truy vấn:
hive> select * from ${tablename}
hoặc là
hive> select * from ${hivevar:tablename}
Tôi cũng có thể đặt tên bảng "cục bộ", tên này sẽ ảnh hưởng đến việc sử dụng $ {tablename}, nhưng không ảnh hưởng đến $ {hivevar: tablename}
hive> set tablename=newtable;
hive> select * from ${tablename} -- uses 'newtable'
vs
hive> select * from ${hivevar:tablename} -- still uses the original 'mytable'
Có lẽ không có ý nghĩa quá nhiều từ CLI, nhưng có thể có hql trong tệp sử dụng nguồn , nhưng hãy đặt một số biến "cục bộ" để sử dụng trong phần còn lại của tập lệnh.