gpt4 book ai didi

sql-server - Polybase 中不允许出现字符串中的字符串分隔符?

转载 作者:行者123 更新时间:2023-12-04 08:11:35 25 4
gpt4 key购买 nike

我正在使用存储在 Azure Data Lake Storage 中的 CSV 创建一个外部表,并使用 SQL Server 中的 Polybase 填充该表。
但是,我遇到了这个问题并认为这可能是由于在某一特定列中字符串中存在双引号,并且字符串分隔符已指定为 "在 Polybase (STRING_DELIMITER = '"') .

HdfsBridge::recordReaderFillBuffer - Unexpected error encountered filling record reader buffer: HadoopExecutionException: Could not find a delimiter after string delimiter
例子:
enter image description here
我在这方面做了相当广泛的研究,发现这个问题已经存在多年,但尚未看到任何解决方案。
任何帮助将不胜感激。

最佳答案

我认为解决这个问题的最简单方法是使用 .csv 创建,而不是使用逗号分隔符并去掉字符串分隔符。使用您知道不会出现在文件中的分隔符。我在我的例子中使用了一个管道,一旦它被导入到数据库中,我就会清理这个字符串。
一个简单的例子:

IF EXISTS ( SELECT * FROM sys.external_tables WHERE name = 'delimiterWorking' )
DROP EXTERNAL TABLE delimiterWorking
GO

IF EXISTS ( SELECT * FROM sys.tables WHERE name = 'cleanedData' )
DROP TABLE cleanedData
GO



IF EXISTS ( SELECT * FROM sys.external_file_formats WHERE name = 'ff_delimiterWorking' )
DROP EXTERNAL FILE FORMAT ff_delimiterWorking
GO

CREATE EXTERNAL FILE FORMAT ff_delimiterWorking
WITH (
FORMAT_TYPE = DELIMITEDTEXT,
FORMAT_OPTIONS (
FIELD_TERMINATOR = '|',
--STRING_DELIMITER = '"',
FIRST_ROW = 2,
ENCODING = 'UTF8'
)
);
GO


CREATE EXTERNAL TABLE delimiterWorking (
id INT NOT NULL,
body VARCHAR(8000) NULL
)
WITH (
LOCATION = 'yourLake/someFolder/delimiterTest6.txt',
DATA_SOURCE = ds_azureDataLakeStore,
FILE_FORMAT = ff_delimiterWorking,
REJECT_TYPE = VALUE,
REJECT_VALUE = 0
);
GO


SELECT *
FROM delimiterWorking
GO



-- Fix up the data
CREATE TABLE cleanedData
WITH (
CLUSTERED COLUMNSTORE INDEX,
DISTRIBUTION = ROUND_ROBIN
)
AS
SELECT
id,
body AS originalCol,
SUBSTRING ( body, 2, LEN(body) - 2 ) cleanBody
FROM delimiterWorking
GO



SELECT *
FROM cleanedData
我的结果:
My results

关于sql-server - Polybase 中不允许出现字符串中的字符串分隔符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65923518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com