如何解决通过SAS更改IMPALA SQL Select语句中变量的长度
我正在连接到 impala 服务器以检索一些数据。 但是我想在impala pass-through sql语句中改变变量的长度,否则它会检索长度为32767的未优化的变量。
这就是我在 SAS 中的做法:
proc sql;
connect to impala (dsn="somedsn");
create table want as
select *
from connection to impala
(select var1 length=50
from &disc_table.);
disconnect from impala;
quit;
但是,由于IMPALA没有相同的sql语句结构,所以不起作用。
在 IMPALA sql 语句中使用 var1
检索 length=50
的正确语句是什么?
解决方法
您可以要求 IMPALA 将变量转换为具有正确长度的变量。
... (select cast(var1 as varchar(50)) as var1 from &disc_table.) ...
,
一种选择是更改 SAS 端 select
中的长度:
proc sql;
connect to impala (dsn="somedsn");
create table want as
select var1 length=50
from connection to impala
(select var1
from &disc_table.);
disconnect from impala;
quit;
您也可以在连接步骤中使用 DBMAX_TEXT
选项,尽管我对 Impala 的选项并不特别熟悉。
鉴于下面的评论,问题似乎在于 Impala 不支持 CHAR/VARCHAR,因此您会得到 32767 个长度的字符串。您的解决方案可能是同时执行 Tom 和我建议的操作,即:
proc sql;
connect to impala (dsn="somedsn");
create table want as
select var1 length=50
from connection to impala
(select cast(var1 as varchar(50)) as var1
from &disc_table.);
disconnect from impala;
quit;
这可能意味着传输回的数据更少,并且列更小;或者您可以在此处添加 DBMAX_TEXT;或者你也可以像 kb article suggests 那样做,另外在 ODBC 连接选项中添加一个限制。
另一种选择是使用 SAS DS2,尽管它看起来最终仍然存在相同的问题(因为旧版本的 Impala 不支持 varchar/char)。该文档建议升级到 CDH 5.2(我认为这是 Impala 的 Cloudera 实现)。我不确定非 Cloudera 版本是否支持 VARCHAR,尽管在 3.4 版的 Impala change notes 中至少有一些提及,特别是 this issue,其中提到将其添加到 Kudu 表中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。