微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过SAS更改IMPALA SQL Select语句中变量的长度

如何解决通过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 举报,一经查实,本站将立刻删除。