Программно определить размер столбцов SQL - PullRequest
0 голосов
/ 29 мая 2019

Я работаю над заданием ETL в Azure Databricks. Когда я пишу в базу данных Azure, столбцы nvarchar создаются как nvarchar (max).

Я делаю следующее для записи кадра данных в SQL:

df.write \
    .format("jdbc") \
    .option("url", _get_dw_jdbc_url()) \
    .option("forwardSparkAzureStorageCredentials", "true") \
    .option("dbTable", table_name) \
    .option("tempDir", _get_temp_connection_string()) \
    .option("maxStrLength", 255)\
    .mode(mode) \
    .save()

Я надеялся, что maxStrLength волшебным образом решит проблему, но это не так.

Есть какие-нибудь решения по этому вопросу? Могу ли я определить схему для таблицы SQL до записи в базу данных?

1 Ответ

0 голосов
/ 29 мая 2019

Используйте pyodbc, чтобы создать таблицу, прежде чем делать запись выше. Это будет означать, что ваш режим должен быть добавлен (вы не показали его во фрагменте).

Длина не может быть определена до тех пор, пока не будут прочитаны полные данные о сборе, поэтому Spark не может рассчитать их на лету, поскольку начинает запись (обычно / в идеале) до окончания чтения.

...