如何将数据从SAS加载到Teradata,其中多个excel文件以相同的列名导入SAS

如何将数据从SAS加载到Teradata,其中多个excel文件以相同的列名导入SAS,excel,sas,teradata,Excel,Sas,Teradata,我有10个相同列名的excel文件需要插入到Teradata中。我在Teradata中创建了一个包含所有列详细信息的表,并将数据导入SAS。现在,我应该如何从SAS推送到Teradata?我需要procsql来处理这个问题 若您已经在Teradata中创建了表,一种方法是使用proc append或使用libname的proc sql。Fastload进行批量装载。下面是一个例子 libname teralib teradata server=server user=userid pwd=pa

我有10个相同列名的excel文件需要插入到Teradata中。我在Teradata中创建了一个包含所有列详细信息的表,并将数据导入SAS。现在,我应该如何从SAS推送到Teradata?我需要procsql来处理这个问题

若您已经在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中使用insert语句

    proc sql;
    insert into teralib.staging_customer_ref
    (FastLoad=YES)
   select * from saslib.cust_ref;
   quit;   
请阅读下面的文章,其中讨论了将数据从SAS移动到Teradata的各种选项

编辑:只需完整地阅读您的问题,如果您想在insert语句中匹配名称(在position上工作),您可能需要在insert statemnt中使用宏变量,并且可能proc append在这种情况下是最好的,因为proc append基于列的名称

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并执行insert,也可以这样做

  • do proc append with force选项,以便在数据不匹配时具有空值(不推荐)

  • create table而不是insert(可以使用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; 
    

    谢谢但是,现在我遇到了很多与数据类型不匹配相关的错误:错误:尝试在插入表名之后插入比指定的列更少的列。错误:SELECT子句上的值2与INSERT表名称后列出的相应列的数据类型不匹配。错误:SELECT子句上的值4与INSERT表名称后列出的相应列的数据类型不匹配。