Запись кадра данных в sql-server 2017 дает исключение: столбец FirstName имеет тип данных, который не может участвовать в индексе columnstore - PullRequest
0 голосов
/ 23 апреля 2019

В блоках данных я пытаюсь записать фрейм данных в хранилище данных sql, используя JDBC-коннектор.Я не использую контейнер BLOB-объектов как промежуточное место во время чтения и записи.Таким образом, существует прямая связь между драйвером и sql-сервером.Код, который я использую:

table = 'SampleTableV2'

df1 = spark.createDataFrame([(1, 'Bilal', 'Shafqat'),
                             (2, 'Ali', 'Azam'),
                             (3, 'Hamdan', 'Sultan'),
                             (4, 'Faizan', 'Pathan'),
                             (5, 'Tehseen', 'Virk'),
                             (6, 'Shahzad', 'Badar')
                            ], mySchema)


# Insert the rows into the Azure SQL table
df1.write \
    .option('user', user) \
    .option('password', pswd) \
    .mode('append') \
    .jdbc('jdbc:sqlserver://' + sqlserver + ':' + port + ';database=' + database, table)

Так что, если я сначала создаю таблицу на sql-сервере с помощью студии управления или консоли, а затем запускаю эту команду в записной книжке блоков данных, то эти данные добавляются в таблицу.Но если я пытаюсь использовать 'перезаписать' или если у меня уже нет таблицы в sql-сервере, и эта команда пытается создать и вставить, то это дает исключение, чем столбец 'FirstName' не может быть использован в качестве индекса columnstore.Я также заметил, что это обычно происходит для строковых столбцов, а не для столбцов типа int.Я также попытался настроить значение tableOptions, но не смог.

.option("tableOptions","heap,distribution=HASH([Id])")

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

...