Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Служба Azure Synapse Analytics позволяет различным вычислительным системам рабочих областей использовать базы данных и таблицы совместно с пулами Apache Spark и бессерверным пулом SQL.
После того как задание Spark создаст базу данных, в ней можно с помощью Spark создать таблицы с форматом хранения Parquet, Delta или CSV. Имена таблиц будут преобразованы в нижний регистр, и их нужно будет запрашивать с использованием нижнего регистра. Эти таблицы немедленно становятся доступными для выполнения запросов через любой пул Spark в рабочей области Azure Synapse. Их также можно использовать из любого задания Spark при наличии соответствующих разрешений.
Таблицы, создаваемые и управляемые в Spark, а также внешние таблицы Spark доступны как внешние таблицы с тем же именем в соответствующей синхронизированной базе данных в бессерверном пуле SQL. Подробности об синхронизации таблицы можно найти в разделе Exposing a Spark table in SQL (Обеспечение доступа к таблице Spark в SQL).
Так как таблицы синхронизируются с бессерверным пулом SQL асинхронно, они появляются с некоторой задержкой.
Управление созданной в Spark таблицей
Используйте Spark для управления созданными в Spark базами данных. Например, создайте базу данных с помощью задания бессерверного пула Apache Spark и создайте таблицы в базе данных из Spark.
Объекты в синхронизированных базах данных не могут быть изменены из бессерверного пула SQL.
Опубликовать таблицу Spark через SQL
Общие таблицы Spark
Spark предоставляет два типа таблиц, которые Azure Synapse автоматически делает доступными в SQL.
Управляемые таблицы
Spark предоставляет множество форматов для хранения данных в управляемых таблицах, в том числе TEXT, CSV, JSON, JDBC, PARQUET, ORC, HIVE, DELTA и LIBSVM. Обычно эти файлы размещаются в каталоге
warehouse, где хранятся данные управляемой таблицы.Внешние таблицы
Spark также предлагает возможности для создания внешних таблиц на основе существующих данных: вы можете указать параметр
LOCATIONили использовать формат Hive. Такие внешние таблицы могут иметь разные форматы данных, включая Parquet.
В настоящее время Azure Synapse предоставляет в совместное использование для подсистем SQL только те управляемые и внешние таблицы Spark, данные в которых хранятся в формате Parquet, DELTA или CSV. Таблицы, поддерживаемые другими форматами, не синхронизируются автоматически. Такие таблицы можно синхронизировать вручную в виде внешней таблицы в вашей базе данных SQL, если SQL-система поддерживает используемый формат таблицы.
Примечание.
В настоящее время в бессерверном пуле SQL полностью поддерживаются только форматы Parquet и CSV. Таблицы Spark Delta также доступны в бессерверном пуле SQL, однако эта функция доступна в виде общедоступной предварительной версии. Внешние таблицы, созданные в Spark, недоступны в выделенных базах данных пула SQL.
Совместное использование таблиц Spark
Управляемые и внешние таблицы Spark предоставляются в ядре SQL для совместного использования как внешние таблицы со следующими свойствами:
- источником данных внешней таблицы SQL считается тот источник данных, который представляет папку с этой таблицей Spark;
- для внешней таблицы SQL используется формат файлов Parquet, Delta или CSV;
- для учетных данных внешней таблицы SQL используется сквозная аутентификация.
Так как все имена таблиц Spark являются допустимыми именами таблиц в SQL, а все имена столбцов Spark являются допустимыми именами столбцов в SQL, для внешней таблицы SQL сохраняются все имена таблиц и столбцов Spark.
Типы данных в таблицах Spark отличаются от типов данных в подсистемах Synapse SQL. В следующей таблице отображено сопоставление типов данных таблицы Spark с типами SQL.
| Тип данных Spark | Тип данных SQL | Комментарии |
|---|---|---|
LongType, long, bigint |
bigint |
Spark: LongType представляет собой 8-байтовые целые числа со знаком. SQL: см. типы данных int, bigint, smallint и tinyint. |
BooleanType, boolean |
bit (Parquet), varchar(6) (CSV) |
Spark: логический. SQL: см. [/sql/t-sql/data-types/bit-transact-sql]. |
DecimalType, decimal, dec, numeric |
decimal |
Spark: DecimalType представляет десятичные числа произвольной точности со знаком. Поддерживается внутренне с использованием java.math.BigDecimal. BigDecimal состоит из немасштабированного значения целого числа произвольной точности и 32-разрядного масштаба целого числа. SQL: числа с фиксированной точностью и масштабом. При использовании максимальной точности числа могут принимать значения в диапазоне от -10^38+1 до 10^38-1. Синонимами для decimal по стандарту ISO являются dec и dec(p, s). Тип numeric функционально эквивалентен типу decimal. См. десятичное и числовое. |
IntegerType, Integer, int |
int |
SparkIntegerType представляет 4-байтовые целые числа со знаком. SQL: см. типы данных int, bigint, smallint и tinyint. |
ByteType, Byte, tinyint |
smallint |
Spark: ByteType представляет целые числа со знаком размером 1 байт [-128 до 127], а ShortType представляет целые числа размером 2 байта [-32768 до 32767]. SQL: Tinyint представляет собой беззнаковое целое число размером 1 байт в диапазоне [0, 255], a smallint - знаковое целое число размером 2 байта в диапазоне [-32768, 32767]. См. типы данных int, bigint, smallint и tinyint. |
ShortType, Short, smallint |
smallint |
То же, что выше. |
DoubleType, Double |
float |
Spark: DoubleType представляет числа с плавающей точкой двойной точности размером 8 байт. SQL: см. типы данных float и real. |
FloatType, float, real |
real |
Spark: FloatType представляет 4-байтовые числа одинарной точности с плавающей запятой. SQL: см. типы данных float и real. |
DateType, date |
date |
Spark: DateType представляет значения, содержащие значения полей года, месяца и дня без часового пояса. SQL: см. date. |
TimestampType, timestamp |
datetime2 |
Spark: TimestampType представляет значения, содержащие значения полей "год", "месяц", "день", "час", "минута" и "секунда", с локальным часовым поясом для сеанса. Значение метки времени представляет собой абсолютную точку во времени. SQL: см. datetime2. |
char |
char |
|
StringType, String, varchar |
Varchar(n) |
Spark: StringType представляет значения строки символов.
VarcharType(n) — это вариант StringType с ограничением по длине. Если длина входной строки превышает ограничение по длине, запись данных завершится ошибкой. Этот тип может использоваться только в схеме таблицы, а не в функциях или операторах. CharType(n) — это вариант VarcharType(n) с фиксированной длиной. При чтении столбца типа CharType (n) всегда возвращаются строковые значения длиной n. Сравнение столбцов типа CharType(n) будет заполнять более короткий столбец до длины более длинного. SQL. Если в Spark указана длина, n в varchar (n) будет соответствовать этой длине. Если это секционированный столбец, n может быть максимально 2048. В противном случае будет задано varchar(max). См. типы данных char и varchar. Используйте его с параметрами сортировки Latin1_General_100_BIN2_UTF8. |
BinaryType, binary |
varbinary(n) |
SQL. Если в Spark указана длина, n в Varbinary(n) будет соответствовать этой длине. Если это секционированный столбец, n может быть максимально 2048. В противном случае будет задано Varbinary(max). См. типы данных binary и varbinary. |
array, map, struct |
varchar(max) |
SQL: сериализуется в JSON с учетом правил сортировки Latin1_General_100_BIN2_UTF8. См. раздел данные JSON. |
Примечание.
Сортировка на уровне базы данных - Latin1_General_100_CI_AS_SC_UTF8.
Модель безопасности
Базы данных Spark и таблицы и их синхронизированные представления в подсистеме SQL будут защищены на базовом уровне хранилища. Так как в настоящее время у них нет разрешений на сами объекты, объекты можно увидеть в обозревателе объектов.
Субъект безопасности, который создает управляемую таблицу, становится ее владельцем и получает все права на такую таблицу, а также на ее базовые папки и файлы. Кроме того, владелец базы данных автоматически становится совладельцем таблицы.
Если вы создадите внешнюю таблицу Spark или SQL со сквозной аутентификацией, данные будут защищаться только на уровнях папок и файлов. При любом запросе к внешней таблице такого типа идентификатор безопасности отправителя запроса передается в файловую систему, которая проверяет наличие прав доступа.
Дополнительные сведения о настройке разрешений для папок и файлов общей базы данных в Azure Synapse Analytics см. в этой статье.
Примеры
Создание управляемой таблицы в Spark и обращение к ней из бессерверного пула SQL
В этом сценарии существует база данных Spark с именем mytestdb. См. раздел Создание базы данных Spark и подключение к ней с помощью бессерверного пула SQL.
Создайте управляемую таблицу Spark с помощью SparkSQL, выполнив следующую команду:
CREATE TABLE mytestdb.myparquettable(id int, name string, birthdate date) USING Parquet
Эта команда создает таблицу myparquettable в базе данных mytestdb. Имена таблиц будут преобразованы в нижний регистр. После короткой задержки вы увидите таблицу в бессерверном пуле SQL. Например, выполните следующую инструкцию из бессерверного пула SQL.
USE mytestdb;
SELECT * FROM sys.tables;
Убедитесь, что myparquettable есть в результатах.
Примечание.
Если таблица использует формат хранения, отличный от Delta, Parquet или CSV, она не будет синхронизирована.
Теперь вставьте в таблицу некоторые значения из Spark, например выполнив следующие инструкции Spark на языке C# в записной книжке C#:
using Microsoft.Spark.Sql.Types;
var data = new List<GenericRow>();
data.Add(new GenericRow(new object[] { 1, "Alice", new Date(2010, 1, 1)}));
data.Add(new GenericRow(new object[] { 2, "Bob", new Date(1990, 1, 1)}));
var schema = new StructType
(new List<StructField>()
{
new StructField("id", new IntegerType()),
new StructField("name", new StringType()),
new StructField("birthdate", new DateType())
}
);
var df = spark.CreateDataFrame(data, schema);
df.Write().Mode(SaveMode.Append).InsertInto("mytestdb.myparquettable");
Теперь вы можете считывать данные из бессерверного пула SQL следующим образом:
SELECT * FROM mytestdb.myparquettable WHERE name = 'Alice';
Вы должны получить следующий ряд в качестве результата:
id | name | birthdate
---+-------+-----------
1 | Alice | 2010-01-01
Создание внешней таблицы в Spark и обращение к ней из бессерверного пула SQL
В этом примере мы создадим внешнюю таблицу Spark по файлам данных Parquet, созданным в предыдущем примере для управляемой таблицы.
Например, запустите SparkSQL:
CREATE TABLE mytestdb.myexternalparquettable
USING Parquet
LOCATION "abfss://<storage-name>.dfs.core.windows.net/<fs>/synapse/workspaces/<synapse_ws>/warehouse/mytestdb.db/myparquettable/"
Замените заполнитель <storage-name> именем учетной записи хранения ADLS 2-го поколения, <fs> на имя используемой файловой системы и заполнитель <synapse_ws> с именем рабочей области Azure Synapse, которую вы используете для выполнения этого примера.
Приведенный выше пример создает таблицу myextneralparquettable в базе данных mytestdb. После короткой задержки вы увидите таблицу в бессерверном пуле SQL. Например, выполните следующую инструкцию из бессерверного пула SQL.
USE mytestdb;
SELECT * FROM sys.tables;
Убедитесь, что myexternalparquettable есть в результатах.
Теперь вы можете считывать данные из бессерверного пула SQL следующим образом:
SELECT * FROM mytestdb.dbo.myexternalparquettable WHERE name = 'Alice';
Вы должны получить следующий ряд в качестве результата:
id | name | birthdate
---+-------+-----------
1 | Alice | 2010-01-01
Следующие шаги
- Узнайте больше об общих метаданнах Azure Synapse Analytics.
- Узнайте больше об общей базе метаданных Azure Synapse Analytics.