ADLS Gen2 上的 Polybase - 作为源的 CSV 文件因 'HdfsBridge::recordReaderFillBuffer' 错误而失败

Polybase on ADLS Gen2 - CSV file as source failing with 'HdfsBridge::recordReaderFillBuffer' error

这是我第一次使用 Polybase,我正在尝试从 ADLS Gen2 将示例 CSV 文件(第一条记录为 header)加载到 Synapse。 我之前已经创建了一个万能钥匙,所以我没有再次创建它。我实现的其余步骤如下:

-- Step 1

CREATE DATABASE SCOPED CREDENTIAL access_cred
WITH
    IDENTITY = 'my_name',
    SECRET = '12345678910****==';

-- Step 2

CREATE EXTERNAL DATA SOURCE CreditCards
WITH
(
    TYPE = HADOOP,
    LOCATION = 'abfss://container01@freesandbox.dfs.core.windows.net',
    CREDENTIAL = access_cred
);

-- Step 3

CREATE EXTERNAL FILE FORMAT CC_FileFormat
WITH
(
    FORMAT_TYPE = DELIMITEDTEXT,
    FORMAT_OPTIONS
    (
        FIELD_TERMINATOR = ',',
        FIRST_ROW = 2,
        USE_TYPE_DEFAULT = FALSE
    )
);

--Step 4

CREATE SCHEMA ext;
CREATE SCHEMA cc;

--Step 5: Create External Table

CREATE EXTERNAL TABLE ext.creditcards (
    Card_Type_Full_Name varchar(50),
    Issuing_Bank varchar(50),
    Card_Number varchar(50),
    Card_Holder_Name varchar(50),
    CVV_CVV2 varchar(50),
    Issue_Date varchar(50),
    Expiry_Date varchar(50),
    Billing_Date varchar(50),
    Card_PIN varchar(50),
    Credit_Limit varchar(50)
)
WITH (LOCATION='/CreditCards/', --I've a folder 'CreditCards' inside which the 'Creditcards.csv` file sits
    DATA_SOURCE = CreditCards,  
    FILE_FORMAT = CC_FileFormat,
    REJECT_TYPE = VALUE,
    REJECT_VALUE = 0
);


--Step 6

CREATE TABLE cc.creditcards
WITH
(
    DISTRIBUTION = REPLICATE,
    CLUSTERED COLUMNSTORE INDEX
)
AS
SELECT * FROM ext.creditcards
OPTION (LABEL = 'CTAS : Load cc.creditcards');

我不知道我做错了什么。我尝试通过互联网浏览多个帖子,但没有任何内容真正解决我面临的问题。尝试执行 SELECT * from <external_table> 时出现以下错误。 (这也是我在第 6 步中遇到的错误,因为我使用 CTAS 命令加载我的最终 table。)

Msg 107090, Level 16, State 1, Line 74
HdfsBridge::recordReaderFillBuffer - Unexpected error encountered filling record reader buffer: MalformedInputException: Input length = 1

我不明白还缺少什么。我也授予了容器级别的访问权限。 有人可以帮我解决这个问题吗?

已解决:原来,这个错误是由于文件编码引起的。我放在 ADLS G2 上的源平面文件是 ANSI 格式的,我只需将其转换为 UTF8 格式即可重新上传。之后就完美运行了。

在 Microsoft 论坛的 post 中找到此提示:https://social.msdn.microsoft.com/Forums/sqlserver/en-US/6a431c73-4575-4729-b7b5-9767e2a16c0e/external-table-error?forum=AzureSQLDataWarehouse

将 ANSI 平面文件转换为 UTF8(使用记事本):https://superuser.com/a/911373