【问题标题】:How to load data from SAS to Teradata where multiple excel files are imported in SAS with the Same column name如何将数据从 SAS 加载到 Teradata,其中在 SAS 中导入了具有相同列名的多个 excel 文件
【发布时间】:2019-03-20 01:06:41
【问题描述】:

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

【问题讨论】:

    标签: excel sas teradata


    【解决方案1】:

    如果您已经在 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:看起来您的两个数据集都不相同(即数据类型不同)。您可以采取以下步骤

    1. 您可以更改 Teradata 表的 DDL 并插入,也可以。

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

    3. 创建表而不是插入(可以使用 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; 
    

    【讨论】:

    • 谢谢!但是,现在我收到了很多与数据类型不匹配相关的错误:错误:尝试插入的列数少于在 INSERT 表名之后指定的列数。错误:SELECT 子句上的值 2 与 INSERT 表名之后列出的相应列的数据类型不匹配。错误:SELECT 子句上的值 4 与 INSERT 表名后面列出的相应列的数据类型不匹配。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    相关资源
    最近更新 更多