Прочитать на английском

Поделиться через


Использование соединителя Apache Spark для SQL Server и AZURE SQL

Важно!

Надстройка "Кластеры больших данных Microsoft SQL Server 2019" будет прекращена. Поддержка кластеров больших данных SQL Server 2019 завершится 28 февраля 2025 г. Все существующие пользователи SQL Server 2019 с Software Assurance будут полностью поддерживаться на этой платформе, а программное обеспечение будет продолжать поддерживаться с помощью накопительных обновлений для SQL Server до этого времени. Для получения дополнительной информации см. запись блога об объявлении и параметры работы с большими данными на платформе Microsoft SQL Server.

Соединитель Apache Spark для SQL Server и SQL Azure — это высокопроизводительный соединитель, позволяющий использовать транзакционные данные в аналитике больших данных и сохранять результаты для нерегламентированных запросов или отчетов. Соединитель позволяет использовать любую базу данных SQL, локальную или в облаке в качестве источника входных данных или приемника выходных данных для заданий Spark. Соединитель использует API массовой записи SQL Server. Любые параметры групповой записи могут быть переданы как необязательные параметры пользователем и переданы as-is коннектором в базовый API. Дополнительные сведения об операциях массовой записи см. в статье Использование массового копирования с драйвером JDBC.

Соединитель включен по умолчанию в кластеры больших данных SQL Server.

Дополнительные сведения о соединителе см. в репозитории с открытым исходным кодом. Для примеров см. образцы.

Запись в новую таблицу SQL

Внимание!

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

При использовании режима overwrite , если параметр не используется truncate, при повторном создании таблицы индексы будут потеряны. Например, таблица columnstore становится кучей. Если вы хотите сохранить существующий индексирование, также укажите параметр truncate со значением true. Например так: .option("truncate",true)

server_name = "jdbc:sqlserver://{SERVER_ADDR}"
database_name = "database_name"
url = server_name + ";" + "databaseName=" + database_name + ";"

table_name = "table_name"
username = "username"
password = "password123!#" # Please specify password here

try:
  df.write \
    .format("com.microsoft.sqlserver.jdbc.spark") \
    .mode("overwrite") \
    .option("url", url) \
    .option("dbtable", table_name) \
    .option("user", username) \
    .option("password", password) \
    .save()
except ValueError as error :
    print("Connector write failed", error)

Добавление в таблицу SQL

try:
  df.write \
    .format("com.microsoft.sqlserver.jdbc.spark") \
    .mode("append") \
    .option("url", url) \
    .option("dbtable", table_name) \
    .option("user", username) \
    .option("password", password) \
    .save()
except ValueError as error :
    print("Connector write failed", error)

Указание уровня изоляции

Этот коннектор по умолчанию использует уровень изоляции READ_COMMITTED при выполнении массовой вставки в базу данных. Если вы хотите изменить уровень изоляции, используйте параметр mssqlIsolationLevel, как показано ниже.

    .option("mssqlIsolationLevel", "READ_UNCOMMITTED") \

Чтение из таблицы SQL

jdbcDF = spark.read \
        .format("com.microsoft.sqlserver.jdbc.spark") \
        .option("url", url) \
        .option("dbtable", table_name) \
        .option("user", username) \
        .option("password", password).load()

Режим без Active Directory

В режиме безопасности, не связанном с Active Directory, каждый пользователь имеет имя пользователя и пароль, которые необходимо указать в качестве параметров при создании экземпляра соединителя для выполнения операций чтения и/или записи.

Ниже приведен пример экземпляра соединителя для режима, отличного от Active Directory. Перед запуском скрипта замените ? на значение для вашей учетной записи.

# Note: '?' is a placeholder for a necessary user-specified value
connector_type = "com.microsoft.sqlserver.jdbc.spark" 

url = "jdbc:sqlserver://master-p-svc;databaseName=?;"
writer = df.write \ 
   .format(connector_type)\ 
   .mode("overwrite") 
   .option("url", url) \ 
   .option("user", ?) \ 
   .option("password",?) 
writer.save() 

Режим Active Directory

В режиме безопасности Active Directory после того, как пользователь создал файл keytab, ему необходимо предоставить principal и keytab в качестве параметров во время инстанцирования соединителя.

В этом режиме драйвер загружает файл keytab в соответствующие контейнеры исполнителя. Затем исполнители используют имя учётной записи и keytab для создания маркера, который используется для создания соединителя JDBC для чтения и записи.

Ниже приведен пример создания экземпляра соединителя для режима работы Active Directory. Перед запуском скрипта замените ? на значение вашей учетной записи.

# Note: '?' is a placeholder for a necessary user-specified value
connector_type = "com.microsoft.sqlserver.jdbc.spark"

url = "jdbc:sqlserver://master-p-svc;databaseName=?;integratedSecurity=true;authenticationScheme=JavaKerberos;" 
writer = df.write \ 
   .format(connector_type)\ 
   .mode("overwrite") 
   .option("url", url) \ 
   .option("principal", ?) \ 
   .option("keytab", ?)   

writer.save() 

Дальнейшие шаги

Дополнительные сведения о кластерах больших данных см. в статье "Развертывание SQL Server Кластеры больших данных в Kubernetes"

Есть ли отзывы или рекомендации по функциям для кластеров больших данных SQL Server? Оставьте нам отзыв в разделе "Отзывы о кластерах больших данных SQL Server".


Дополнительные ресурсы