Передавать данные между пулом 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)