Передавать данные между пулом SQL и Spark в Azure Synapse Analytics
В этом разделе вы узнаете, как использовать идентификатор Microsoft Entra для передачи данных в пул Apache Spark и выделенный пул SQL, подключенный к рабочей области, созданной для учетной записи Azure Synapse Analytics. Если вы используете записную книжку из окружения Synapse Studio, связанного с ресурсом рабочей области, не требуется использовать операторы импорта. Операторы импорта требуются только в том случае, если вы не используете интегрированную записную книжку.
Необходимо настроить константы и SqlAnalyticsConnector, как показано ниже:
#scala
import com.microsoft.spark.sqlanalytics.utils.Constants
import org.apache.spark.sql.SqlAnalyticsConnector._
Для чтения данных из выделенного пула SQL необходимо использовать API чтения. API чтения работает с внутренними таблицами (управляемыми таблицами) и внешними таблицами в выделенном пуле SQL.
API чтения с помощью идентификатора Microsoft Entra выглядит следующим образом:
#scala
val df = spark.read.sqlanalytics("<DBName>.<Schema>.<TableName>")
Он принимает следующие параметры:
- DBName: имя базы данных.
- Схема: определение схемы, например dbo.
- TableName: имя таблицы, из которой требуется считывать данные.
Для записи данных в выделенный пул SQL необходимо использовать API записи. API записи создает таблицу в выделенном пуле SQL. Затем он вызывает Polybase для загрузки данных в созданную таблицу. Следует помнить, что таблица не может существовать в выделенном пуле SQL. В противном случае отображается сообщение об ошибке: "Объект с именем... уже существует".
API записи с помощью идентификатора Microsoft Entra выглядит следующим образом:
df.write.sqlanalytics("<DBName>.<Schema>.<TableName>", <TableType>)
Он принимает следующие параметры:
- DBName: имя базы данных.
- Схема: определение схемы, например dbo.
- TableName: имя таблицы, из которой требуется считывать данные.
-
TableType: спецификация типа таблицы, которая может иметь два значения.
- Constants.INTERNAL. Управляемая таблица в выделенном пуле SQL.
- Constants.EXTERNAL. Внешняя таблица в выделенном пуле SQL.
Параметр TableType в API записи содержит ряд дополнительных параметров, которые следует учитывать, как указано выше.
Пример таблицы, управляемой пулом SQL, имеет следующий вид:
df.write.sqlanalytics("<DBName>.<Schema>.<TableName>", Constants.INTERNAL)
Чтобы использовать внешнюю таблицу пула SQL, в пуле должен существовать объект EXTERNAL DATA SOURCE и EXTERNAL FILE FORMAT, как показано в следующих примерах:
--For an external table, you need to pre-create the data source and file format in dedicated SQL pool using SQL queries:
CREATE EXTERNAL DATA SOURCE <DataSourceName>
WITH
( LOCATION = 'abfss://...' ,
TYPE = HADOOP
) ;
CREATE EXTERNAL FILE FORMAT <FileFormatName>
WITH (
FORMAT_TYPE = PARQUET,
DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'
);
При использовании сквозной проверки подлинности Microsoft Entra из учетной записи хранения не требуется создать объект EXTERNAL CREDENTIAL. Единственное, что необходимо учитывать: необходимо быть членом роли "Участник данных BLOB-объекта хранилища" в учетной записи хранения. Следующим шагом является использование команды df.write в Scala вместе с командами DATA_SOURCE, FILE_FORMAT и sqlanalytics, как и при записи данных во внутреннюю таблицу.
Ниже приведен пример.
df.write.
option(Constants.DATA_SOURCE, <DataSourceName>).
option(Constants.FILE_FORMAT, <FileFormatName>).
sqlanalytics("<DBName>.<Schema>.<TableName>", Constants.EXTERNAL)