Когда я использую переменную в запросе внутри процедуры или функции, я получаю ошибку invalid table alias or column reference
. Переменная, определенная / переданная в командной строке скрипту, работает нормально. Мне нужно построить table_name на основе некоторых условий, прежде чем использовать его в запросе. Я не хочу использовать EXECUTE, но запрашиваю напрямую, чтобы получить курсоры.
Я использую: Apache Hive: 3.1.1 Hive JDBC: 2.3.4
- Я также пытался послеудаление кавычек из
'${table_name}'
- Я также пытался после удаления {} из
'${table_name}'
- Я также пытался использовать
table_name}
- выдает таблицу table_name
ошибка не найдена. - Если я заменим запрос
select col_1 from '${table_name}'
на DECLARE statement STRING; SET statement = 'select col_1 from data_' || id; EXECUTE statement;
, это сработает. hplsql -d table_name=data_WmAoZrf67W7W7ksZK -f /<path-to-script>/script.hql
сработает, если в script.hql есть оператор типа select col_1 from table_name
- Я знаю об использованиивариации в соответствии с этим документом (здесь: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+VariableSubstitution) или (здесь: Как установить переменные в сценариях HIVE ). Но для этого необходимо определить переменную вне сценария, что не соответствует моим требованиям.
- Я хочу использовать курсор, а не статический ответ (ответ EXECUTE).
-- Define a procedure which runs a query using variable "table_name" defined in it.
CREATE PROCEDURE test(IN id STRING)
BEGIN
DECLARE table_name STRING;
SET table_name = 'data_' || id;
PRINT ' table name is : ' || table_name;
-- Run the query using variable
select col_1 from '${table_name}';
-- this works : Build the query to using variable and execute
-- SET statement = 'select col_1 from data_' || id;
-- EXECUTE statement;
END
-- Call the function
test('WmAoZrf67W7W7ksZK');
PRINT '-- Done --';
Я ожидаю, что вывод набора результатов, содержащего столбец "col_1" в виде таблицы "data_WmAoZrf67W7W7ksZK", существует.
Я получаю следующую ошибку
Open connection: jdbc:hive2://localhost:9852/default (1.31 sec)
Starting query
Unhandled exception in HPL/SQL
org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: SemanticException [Error 10004]: Line 1:7 Invalid table alias or column reference 'col_1': (possible column names are: )
at org.apache.hive.jdbc.Utils.verifySuccess(Utils.java:300)
at org.apache.hive.jdbc.Utils.verifySuccessWithInfo(Utils.java:286)
at org.apache.hive.jdbc.HiveStatement.runAsyncOnServer(HiveStatement.java:324)
at org.apache.hive.jdbc.HiveStatement.execute(HiveStatement.java:265)
Может кто-нибудь помочь мне, пожалуйста?