【发布时间】:2019-03-20 01:06:41
【问题描述】:
我有 10 个列名相同的 Excel 文件需要插入 Teradata。我在 Teradata 中创建了一个包含所有列详细信息的表,并将数据导入 SAS 。现在,我应该如何从 SAS 推送到 Teradata?我需要proc sql。
【问题讨论】:
我有 10 个列名相同的 Excel 文件需要插入 Teradata。我在 Teradata 中创建了一个包含所有列详细信息的表,并将数据导入 SAS 。现在,我应该如何从 SAS 推送到 Teradata?我需要proc sql。
【问题讨论】:
如果您已经在 Teradata 中创建了表,一种方法是使用 proc append 或通过 libname 使用 proc sql。 Fastload 进行批量加载。下面是一个例子
libname teralib teradata server=server user=userid pwd=password ;
libname saslib '/u/mystuff/sastuff/hello';
proc append base= teralib.staging_customer_ref(fastload =yes)
base = saslib.cust_ref;
run;
或在 Proc sql 中使用插入语句
proc sql;
insert into teralib.staging_customer_ref
(FastLoad=YES)
select * from saslib.cust_ref;
quit;
请查看下面的论文,其中讨论了将数据从 SAS 移动到 Teradata 的各种选项 http://support.sas.com/resources/papers/EffectivelyMovingSASDataintoTeradata.pdf
编辑:只需完整阅读您的问题,如果您想在插入语句中匹配名称(适用于位置),您可能需要创建一个宏变量并在插入语句中使用,并且在这种情况下,proc append 是最好的,因为 proc根据列名追加
proc sql noprint;
select name into :cols separated by ','
from Dictionary.columns
where upcase(libname) = upcase('teralib')
and upcase(memname) = upcase('staging_customer_ref');
proc sql;
insert into teralib.staging_customer_ref (FastLoad=YES)
select &cols from saslib.cust_ref;
Edit2:看起来您的两个数据集都不相同(即数据类型不同)。您可以采取以下步骤
您可以更改 Teradata 表的 DDL 并插入,也可以。
do proc append with force 选项,以便在数据不匹配时有空值(不推荐)。
创建表而不是插入(可以使用 datastep 或 proc append 完成)dbcreate_table_opts 选项用于为 Teradata 表创建适当的主索引。
第 1 点更可取。
proc sql;
create table teralib.staging_customer_ref
(FastLoad=YES dbcreate_table_opts= 'primaryindex(cust_number)') as
select * from saslib.cust_ref;
quit;
【讨论】: