Data Lake Analytics - 如何选择/插入具有较少列的表?

时间:2018-01-09 16:54:53

标签: azure azure-data-lake

我有一个表,我想将查询结果输出到。

目标表的列数少于源表。

运行简单的insert select语句会导致以下错误:

  

E_CSC_USER_INSERTTOOMANYCOLUMNSSPECIFIESPARTITION:单个分区的源INSERT语句包含的项目多于目标的实际列。   描述:   源列的数量不得超过实际目标表列的数量。不应在源行集中提供虚拟列。   解析度:   将源的架构与实际(非虚拟)列匹配

我尝试使用一个视图将列限制为正确的集合作为中介,但这仍然会产生相同的错误。

如果我必须在两个表中始终使用相同的列,那么如何在数据湖分析中将数据从一个表移动到另一个表?

编辑:

样本DDL

创建表格:

CREATE TABLE dbo.log
(
    DateStamp DateTime,
    code string,
    ipAddresses string,
    method string,
    column4 string,
    column5 string,
    column6 string,
    url string,
    userAgent string,
    queryString string,
    cookie string,
    column11 string,
    column12 string,
    column13 string,
    column14 string,
    column15 string,
    column16 string,
    Query_a1 string,
    Query_c1 string,
    Query_c2 string,
    Query_a2 string,
    Query_z string,
    Query_l string,
    [Cookie_ID] string,

    INDEX clx_log
    CLUSTERED(Query_a,Query_l ASC)

)  
PARTITIONED BY (DateStamp)
DISTRIBUTED BY ROUND ROBIN;

要插入的表

CREATE TABLE dbo.[item_views]
(
    DateStamp DateTime,
    a string,
    c1 string,
    c2 string,
    l  string,
    Cookie_ID string,
    source string,
    INDEX clx_item_views
    CLUSTERED(c1, l ASC)
)
PARTITIONED BY (DateStamp)
DISTRIBUTED BY HASH (l);

插入导致异常的语句:

INSERT dbo.[item_views]
    (
      DateStamp,
    a ,
    c1,
    c2,
    l,
    Cookie_ID,
    source 
    )

PARTITION (@partition1)
SELECT 
           DateStamp,
            Query_a1,
            Query_c1,
            Query_c2,
            Query_l,
            [Cookie_Id],
            "abcd"
FROM dbo.log
 WHERE DateStamp.Date == "2017-01-01";

1 个答案:

答案 0 :(得分:1)

您的示例有点令人困惑,因为它不能编译,但错误基本上是说:如果您要插入分区表,则不必在列中包含分区列并插入列表,因为您指定了它使用png子句代替,例如:

res