【发布时间】:2021-06-30 04:27:58
【问题描述】:
我正在尝试创建一些临时表来获取最近的分区,然后内部连接回主表以过滤掉旧分区。为此,我更喜欢使用临时表而不是大量嵌套子查询。我正在使用 SAS 等工具通过 pass-through proc sql 连接到数据库并查询数据。
例子:
proc sql;
CONNECT TO ODBC (USER=XXXXX PASSWORD="XXXXX" DSN="XXXXX");
CREATE TABLE max_partition as SELECT * FROM CONNECTION TO ODBC
(
CREATE TEMPORARY TABLE tmp1 as select MAX(partitiondate) as latestpartitiondate, id FROM tbl1 GROUP BY id;
select * from tmp1
);
quit;
如果我不包含分号,我会通过“选择”得到关于缺少 EOF 的错误,如果我使用分号,我会收到一个错误(如上例所示)。
CLI prepare error: [Hortonworks][Hardy] (80) Syntax or semantic analysis error thrown in server while executing query. Error message
from server: Error while compiling statement: FAILED: ParseException line 1:148 cannot recognize input near 'id' ';' ')'
我正在尝试在各种工具中使用临时表,例如 SAS 中的 Proc sql 以及 Python 中的 pyodbc。我仍然收到相同的错误。我只是希望能够为该特定 ID 生成一个最大分区表,然后在单个 pass through 语句中完全从该临时表中进行选择。
【问题讨论】:
-
您是否正确触发 SQL?这似乎是一个语法错误。似乎它不喜欢列
id。触发时可以用反引号将 id 列括起来吗? -
你能展示你完整的 SQL Pass through 代码吗?
-
删除了 python 标签,因为这似乎与 python 无关。如果您重新添加 python 标签,请同时添加您的 Python 代码。
-
去掉括号,它们没有用处:
CREATE TEMPORARY TABLE tmp1 as select MAX(partitiondate) as latestpartitiondate, id FROM tbl1 GROUP BY id; -
@Reeza 更新帖子。