Внешняя таблица хранилища данных SQL со строковыми полями

#sql-server #external-tables #azure-synapse #polybase

#sql-сервер #внешние таблицы #azure-synapse #polybase

Вопрос:

Я не могу найти способ создать внешнюю таблицу в хранилище данных SQL Azure (Synapse SQL Pool) с помощью Polybase, где некоторые поля содержат встроенные запятые.

Для файла csv с 4 столбцами, как показано ниже:

 myresourcename, 
myresourcelocation, 
"""resourceVersion"": ""windows"",""deployedBy"": ""john"",""project_name"": ""test_project""",
"{  ""ResourceType"": ""Network"",  ""programName"": ""v1""}" 
  

Пробовал со следующими инструкциями Create External Table .

 CREATE EXTERNAL FILE FORMAT my_format
WITH (  
    FORMAT_TYPE = DELIMITEDTEXT,
    FORMAT_OPTIONS(
        FIELD_TERMINATOR=',',
        STRING_DELIMITER='"',
        First_Row = 2
    )    
); 
  
 CREATE EXTERNAL TABLE my_external_table
(
resourceName VARCHAR,
resourceLocation    VARCHAR,
resourceTags    VARCHAR,
resourceDetails VARCHAR
)  
WITH (
    LOCATION = 'my/location/',
    DATA_SOURCE = my_source,  
    FILE_FORMAT = my_format
)
  

Но запрос этой таблицы выдает следующую ошибку:

 Failed to execute query. Error: HdfsBridge::recordReaderFillBuffer - Unexpected error encountered filling record reader buffer: HadoopExecutionException: Too many columns in the line.
  

Любая помощь будет оценена.

Комментарии:

1. Вам нужно форматировать текст с разделителями? Я предпочитаю использовать parquet.snappy, поскольку сжатие лучше, а проблем с качеством данных практически не существует. В противном случае я считаю эти данные мусором и устанавливаю порог отклонения от 0 до 50 или что-то в этом роде

Ответ №1:

В настоящее время это не поддерживается в polybase, необходимо соответствующим образом изменить входные данные, чтобы заставить их работать.