HPL/SQL: невозможно использовать переменную (определенную в процедуре или функции) в запросе. Выдает ошибку "Недопустимый псевдоним таблицы или ссылка на столбец".
Когда я использую переменную в запросе внутри процедуры или функции, я получаю сообщение об ошибке 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)
Может кто-то мне помочь, пожалуйста?