HPL/SQL: невозможно использовать переменную (определенную в процедуре или функции) в запросе. Выдает ошибку "Недопустимый псевдоним таблицы или ссылка на столбец".

Когда я использую переменную в запросе внутри процедуры или функции, я получаю сообщение об ошибке invalid table alias or column reference. Переменная, определенная / переданная в командной строке скрипту, работает нормально. Мне нужно создать table_name на основе некоторых условий, прежде чем использовать его в запросе. Я не хочу использовать EXECUTE, а напрямую запрашивать курсоры.

Я использую: Apache Hive: 3.1.1 Hive JDBC: 2.3.4

  1. Я также пробовал после удаления цитат из '${table_name}'
  2. Я также пробовал после удаления {} из '${table_name}'
  3. Я также пробовал использовать table_name} - бросает стол table_name не обнаружена ошибка.
  4. Если я заменю запрос select col_1 from '${table_name}' с DECLARE statement STRING; SET statement = 'select col_1 from data_' || id; EXECUTE statement; оно работает.
  5. hplsql -d table_name=data_WmAoZrf67W7W7ksZK -f /<path-to-script>/script.hql работает, если в script.hql есть такой оператор, как select col_1 from table_name
  6. Мне известно об использовании переменных улья согласно этому документу (здесь: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+VariableSubstitution) или (здесь: Как установить переменные в сценариях HIVE). Но для этого требуется, чтобы переменная была определена вне сценария, что не соответствует моим требованиям.
  7. Я хочу использовать курсор, а не статический ответ (ответ 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)

Может кто-то мне помочь, пожалуйста?

0 ответов

Другие вопросы по тегам