Соединитель Spark для хранилища данных Microsoft Fabric Synapse
Соединитель Spark для хранилища данных Synapse позволяет разработчикам Spark и специалистам по обработке и анализу данных получать доступ к данным из хранилища и конечной точки аналитики SQL в озерном доме. Соединитель предлагает следующие возможности:
- Вы можете работать с данными из конечной точки хранилища или аналитики SQL в одной рабочей области или в нескольких рабочих областях.
- Конечная точка аналитики SQL в Lakehouse автоматически обнаруживается в зависимости от контекста рабочей области.
- Соединитель имеет упрощенный API Spark, абстрагирует базовую сложность и работает только с одной строкой кода.
- При доступе к таблице или представлению соединитель поддерживает модели безопасности, определенные на уровне ядра SQL. К этим моделям относятся безопасность на уровне объектов (OLS), безопасность на уровне строк (RLS) и безопасность на уровне столбцов (CLS).
- Соединитель предварительно установлен в среде выполнения Fabric, что устраняет необходимость отдельной установки.
Примечание.
Соединитель в настоящее время находится в предварительной версии. Дополнительные сведения см . в текущих ограничениях далее в этой статье.
Проверка подлинности
Проверка подлинности Microsoft Entra — это интегрированный подход к проверке подлинности. Пользователи войдите в рабочую область Microsoft Fabric и их учетные данные автоматически передаются в обработчик SQL для проверки подлинности и авторизации. Учетные данные автоматически сопоставляются, и пользователи не требуются для предоставления определенных параметров конфигурации.
Разрешения
Чтобы подключиться к подсистеме SQL, пользователям требуется по крайней мере разрешение на чтение (аналогично разрешение CONNECT в SQL Server) на конечной точке хранилища или аналитики SQL (уровень элемента). Пользователям также требуются подробные разрешения на уровень объекта для чтения данных из определенных таблиц или представлений. Дополнительные сведения см. в статье "Безопасность хранения данных" в Microsoft Fabric.
Шаблоны кода и примеры
Использование сигнатуры метода
Следующая команда показывает сигнатуру synapsesql
метода для запроса на чтение. Для доступа к таблицам или представлениям из хранилища и конечной точки аналитики SQL в лейкхаусе требуется три части tableName
. Обновите аргумент со следующими именами на основе вашего сценария:
- Часть 1. Имя склада или озера.
- Часть 2. Имя схемы.
- Часть 3. Имя таблицы или представления.
synapsesql(tableName:String="<Part 1.Part 2.Part 3>") => org.apache.spark.sql.DataFrame
Помимо чтения из таблицы или представления напрямую, этот соединитель также позволяет указать настраиваемый или сквозной запрос, который передается подсистеме SQL и результат возвращается обратно в Spark.
spark.read.option(Constants.DatabaseName, "<warehouse/lakeshouse name>").synapsesql("<T-SQL Query>") => org.apache.spark.sql.DataFrame
Хотя этот соединитель автоматически обнаруживает конечную точку для указанного хранилища или озера, если вы хотите явно указать ее, это можно сделать.
//For warehouse
spark.conf.set("spark.datawarehouse.<warehouse name>.sqlendpoint", "<sql endpoint,port>")
//For lakehouse
spark.conf.set("spark.lakehouse.<lakeshouse name>.sqlendpoint", "<sql endpoint,port>")
//Read from table
spark.read.synapsesql("<warehouse/lakeshouse name>.<schema name>.<table or view name>")
Чтение данных в одной рабочей области
Внимание
Выполните следующие инструкции импорта в начале записной книжки или перед началом использования соединителя:
Для Scala
import com.microsoft.spark.fabric.tds.implicits.read.FabricSparkTDSImplicits._
import com.microsoft.spark.fabric.Constants
Для PySpark (Python)
import com.microsoft.spark.fabric
from com.microsoft.spark.fabric.Constants import Constants
Следующий код является примером для чтения данных из таблицы или представления в кадре данных Spark:
df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>")
Следующий код является примером для чтения данных из таблицы или представления в кадре данных Spark с ограничением количества строк 10:
df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>").limit(10)
Следующий код является примером для чтения данных из таблицы или представления в кадре данных Spark после применения фильтра:
df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>").filter("column name == 'value'")
Следующий код является примером для чтения данных из таблицы или представления в кадре данных Spark только для выбранных столбцов:
df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>").select("column A", "Column B")
Чтение данных в рабочих областях
Чтобы получить доступ к данным из хранилища данных или lakehouse в рабочих областях, можно указать идентификатор рабочей области, где существует хранилище данных или lakehouse, а затем идентификатор элемента хранилища данных или lakehouse. Эта строка содержит пример чтения данных из таблицы или представления в кадре данных Spark из хранилища данных или lakehouse с указанным идентификатором рабочей области и идентификатором хранилища данных lakehouse/ data:
# For lakehouse
df = spark.read.option(Constants.WorkspaceId, "<workspace id>").synapsesql("<lakehouse name>.<schema name>.<table or view name>")
df = spark.read.option(Constants.WorkspaceId, "<workspace id>").option(Constants.LakehouseId, "<lakehouse item id>").synapsesql("<lakehouse name>.<schema name>.<table or view name>")
# For data warehouse
df = spark.read.option(Constants.WorkspaceId, "<workspace id>").synapsesql("<warehouse name>.<schema name>.<table or view name>")
df = spark.read.option(Constants.WorkspaceId, "<workspace id>").option(Constants.DatawarehouseId, "<data warehouse item id>").synapsesql("<warehouse name>.<schema name>.<table or view name>")
Примечание.
При запуске записной книжки соединитель по умолчанию ищет указанное хранилище данных или lakehouse в рабочей области lakehouse, подключенной к записной книжке. Чтобы ссылаться на хранилище данных или lakehouse из другой рабочей области, укажите идентификатор рабочей области и идентификатор элемента озера или хранилища данных, как описано выше.
Создание таблицы Lakehouse на основе данных из хранилища
Эти строки кода предоставляют пример для чтения данных из таблицы или представления в кадре данных Spark и его использования для создания таблицы lakehouse:
df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>")
df.write.format("delta").saveAsTable("<Lakehouse table name>")
Устранение неполадок
По завершении фрагмент ответа чтения отображается в выходных данных ячейки. Сбой в текущей ячейке также отменяет последующие выполнения ячеек записной книжки. Подробные сведения об ошибке доступны в журналах приложений Spark.
Текущие ограничения
В настоящее время соединитель:
- Поддерживает извлечение данных из хранилищ Fabric и конечных точек аналитики SQL для элементов lakehouse.
- Структура DW теперь поддерживает, однако этот соединитель не работает
Time Travel
для запроса с синтаксисом перемещения по времени. - Сохраняет подпись использования, например ту, которая поставляется с Apache Spark для Azure Synapse Analytics для согласованности. Однако он не совместим с подключением и работой с выделенным пулом SQL в Azure Synapse Analytics.
- Имена столбцов со специальными символами будут обрабатываться путем добавления escape-символа перед отправкой запроса на основе имени таблицы или представления 3 части. В случае чтения на основе пользовательского или сквозного запроса пользователи должны экранировать имена столбцов, которые будут содержать специальные символы.