Я использую внешние таблицы для загрузки данных из CSV, хранящихся в BLOB-объекте, в таблицу в хранилище данных SQL Azure.CSV использует разделитель строк (двойные кавычки), пустые строки представлены в виде 2 двойных кавычек ("").
Я хочу, чтобы пустые столбцы в таблице обрабатывались как NULL.Формат внешнего файла, который я использую, настроен с помощью USE_TYPE_DEFAULT = FALSE, но, похоже, это не работает, поскольку пустые столбцы импортируются как пустые строки.И это имеет тенденцию происходить только тогда, когда столбцы являются строками, числовые столбцы правильно преобразуются в NULL.
Я также импортирую другой файл CSV, в котором отсутствует разделитель строк, использующий другой формат внешнего файла, и те, которые пустыстолбцы импортируются как NULL.Так что, похоже, это как-то связано с опцией STRING_DELIMITER.
CSV:
col1;col2;col3;col4;col5;col6
"a";"b";"c";"1";"2";"3"
"d";"";"f";"4";"";"6"
Код формата внешнего файла:
CREATE EXTERNAL FILE FORMAT eff_string_del
WITH (
FORMAT_TYPE = DELIMITEDTEXT
,FORMAT_OPTIONS(
FIELD_TERMINATOR = ';'
,STRING_DELIMITER = '0x22'
,FIRST_ROW = 2
,USE_TYPE_DEFAULT = False)
)
Код таблицы с использованием формата внешнего файла:
CREATE EXTERNAL TABLE dbo.test (
col1 varchar(1) null
,col2 varchar(1) null
,col3 varchar(1) null
,col4 int null
,col5 int null
,col6 int null
)
WITH (
DATA_SOURCE = [EDS]
,LOCATION = N'test.csv'
,FILE_FORMAT = eff_string_del
,REJECT_TYPE = VALUE
,REJECT_VALUE = 0
)
Результат при запросе внешней таблицы:
SELECT *
FROM [dbo].[test]
col1 col2 col3 col4 col5 col6
---- ---- ---- ----------- ----------- -----------
a b c 1 2 3
d f 4 NULL 6
Может кто-нибудь помочь мне объяснить, что происходит или что я делаю не так?