簡體   English   中英

PolyBase創建外部表查詢Hadoop,列數不匹配

[英]PolyBase create an external table to query Hadoop, column count mismatch

我們已經運行了一個 polybase 服務來查詢我們的 hadoop 集群。 這是我們hadoop端的文件結構:

/warehouse/tablespace/managed/hive/xxxxxxx/dxxxxxx/created_month=2019-11/base_0000083/bucket_00001 的結構文件版本:0.12 和 ORC_135 行:51107 壓縮:ZLIB 壓縮大小:262144 id:int, xxx xxx xxx

這邊有16個字段

另一方面,我創建了一個文件格式如下:

    CREATE EXTERNAL FILE FORMAT [OrcFileFormat] WITH (
    FORMAT_TYPE = ORC,
     DATA_COMPRESSION = N'org.apache.hadoop.io.compress.DefaultCodec')
   

和外部表如下:

    CREATE EXTERNAL TABLE [dbo].[test]
    (
        id:int,
    xxx
    xxx
    xxx
    )
    WITH (DATA_SOURCE = [hadoop_test],
    LOCATION = N'//warehouse/tablespace/managed/hive/xxxxxxx/dxxxxxx/created_month=2019- 
     11/base_0000083/bucket_00001'
    ,FILE_FORMAT = [OrcFileFormat]
    ,REJECT_TYPE = VALUE,
    REJECT_VALUE = 500)
   

使用精確復制的字段,對數據類型的唯一更改是字符串到 varchar 和時間戳到日期時間。 表創建成功; 但是,當執行以下查詢時:

     SELECT TOP (1000) *
      FROM [dbo].test

拋出此錯誤:

無法針對鏈接服務器“(null)”的 OLE DB 提供程序“MSOLEDBSQL”執行查詢“遠程查詢”。 由於內部錯誤,外部文件訪問失敗:'File //warehouse/tablespace/managed/hive/xxxxxxx/dxxxxxx/created_month=2019-11/base_0000083/bucket_00001:HdfsBridge::CreateRecordReader - 創建記錄讀取器時遇到意外錯誤:HadoopExecutionException:列數不匹配。 源文件有 6 列,外部表定義有 16 列。

有人可以幫我嗎?

它在 ORC 創建為事務表時發生。 在這種情況下,ORC 文件包含一些其他信息,如操作等。如果您打開您的 ORC 文件,它將如下所示:

(operation, originalTransaction, bucket, rowId, currentTransaction, (ActualData))

其中 ActualData 是您已存儲在文件中的實際數據。 因此,如您所見,您的實際列數似乎有 6 列。 正如微軟在這里所說的 Polybase 限制,您將無法讀取 ORC 事務文件。

這不是答案,而是故障排除的一個步驟。 嘗試使用虛擬字段(即 dummy int)創建外部表,然后運行查詢。 當由於列不匹配而失敗時,它會告訴您找到了哪些字段及其排序規則。 這可以幫助您進一步排除故障。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM