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

Change the length of a variable in IMPALA SQL Select statement through SAS

我正在连接到 impala 服务器以检索一些数据。 但是我想更改 impala 传递 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 语句中使用 length=50 检索 var1 的正确语句是什么?

您可以要求 IMPALA 将变量 CAST 为长度正确的变量。

... (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 个长度的字符串。您的解决方案可能是做汤姆和我建议的两件事,即:

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, though it looks like it still has the same issue ultimately (in that older versions of Impala don't support varchar/char). That document suggests upgrading to CDH 5.2 (which I think is a Cloudera implementation of Impala). I'm not sure if non-Cloudera versions support VARCHAR, though there are at least some mentions in the Impala change notes for version 3.4, specifically this issue,其中提到将其添加到 Kudu 表中。