HPL / SQL: невозможно использовать переменную (определенную в процедуре или функции) в запросе. Выдает ошибку `Неверный псевдоним таблицы или ссылка на столбец` - PullRequest
0 голосов
/ 22 октября 2019

Когда я использую переменную в запросе внутри процедуры или функции, я получаю ошибку 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)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...