通过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 表中。
我正在连接到 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 表中。