Запрос данных в Azure Synapse Analytics
Вы можете получить доступ к Azure Synapse из Azure Databricks с помощью соединителя Azure Synapse, который использует COPY
инструкцию в Azure Synapse для эффективной передачи больших объемов данных между кластером Azure Databricks и экземпляром Azure Synapse с помощью учетной записи хранения Azure Data Lake Storage 2-го поколения для временного промежуточного хранения.
Внимание
Конфигурации, описанные в этой статье, являются экспериментальными. Экспериментальные функции предоставляются как есть и не поддерживаются Databricks через техническую поддержку клиентов. Чтобы получить полную поддержку федерации запросов, следует вместо этого использовать федерацию Lakehouse, которая позволяет пользователям Azure Databricks воспользоваться синтаксисом каталога Unity и средствами управления данными.
Azure Synapse Analytics — это облачное хранилище корпоративных данных, которое использует массовую параллельную обработку (MPP) для быстрого выполнения сложных запросов в петабайтах данных.
Внимание
Этот соединитель предназначен только для использования с экземплярами выделенного пула Synapse и несовместим с другими компонентами Synapse.
Примечание.
COPY
доступен только в Azure Data Lake Storage 2-го поколения экземплярах. Если вы ищете подробные сведения о работе с Polybase, см . статью "Подключение Azure Databricks и Azure Synapse с PolyBase (устаревшая версия)".
Пример синтаксиса для Synapse
Synapse можно запросить в Scala, Python, SQL и R. В следующих примерах кода используются ключи учетной записи хранения и перенаправлять учетные данные хранения из Azure Databricks в Synapse.
Примечание.
Используйте строка подключения, предоставляемые портал Azure, что обеспечивает шифрование протокола SSL для всех данных, отправленных между драйвером Spark и экземпляром Azure Synapse через подключение JDBC. Чтобы убедиться, что шифрование SSL включено, найдите подстроку encrypt=true
в строке подключения.
Внимание
Внешние расположения, определенные в каталоге Unity, не поддерживаются в качестве tempDir
расположений.
Scala
// Set up the storage account access key in the notebook session conf.
spark.conf.set(
"fs.azure.account.key.<your-storage-account-name>.dfs.core.windows.net",
"<your-storage-account-access-key>")
// Get some data from an Azure Synapse table. The following example applies to Databricks Runtime 11.3 LTS and above.
val df: DataFrame = spark.read
.format("sqldw")
.option("host", "hostname")
.option("port", "port") /* Optional - will use default port 1433 if not specified. */
.option("user", "username")
.option("password", "password")
.option("database", "database-name")
.option("dbtable", "schema-name.table-name") /* If schemaName not provided, default to "dbo". */
.option("tempDir", "abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>")
.option("forwardSparkAzureStorageCredentials", "true")
.load()
// Get some data from an Azure Synapse table. The following example applies to Databricks Runtime 10.4 LTS and below.
val df: DataFrame = spark.read
.format("com.databricks.spark.sqldw")
.option("url", "jdbc:sqlserver://<the-rest-of-the-connection-string>")
.option("tempDir", "abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>")
.option("forwardSparkAzureStorageCredentials", "true")
.option("dbTable", "<your-table-name>")
.load()
// Load data from an Azure Synapse query.
val df: DataFrame = spark.read
.format("com.databricks.spark.sqldw")
.option("url", "jdbc:sqlserver://<the-rest-of-the-connection-string>")
.option("tempDir", "abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>")
.option("forwardSparkAzureStorageCredentials", "true")
.option("query", "select x, count(*) as cnt from table group by x")
.load()
// Apply some transformations to the data, then use the
// Data Source API to write the data back to another table in Azure Synapse.
df.write
.format("com.databricks.spark.sqldw")
.option("url", "jdbc:sqlserver://<the-rest-of-the-connection-string>")
.option("forwardSparkAzureStorageCredentials", "true")
.option("dbTable", "<your-table-name>")
.option("tempDir", "abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>")
.save()
Python
# Set up the storage account access key in the notebook session conf.
spark.conf.set(
"fs.azure.account.key.<your-storage-account-name>.dfs.core.windows.net",
"<your-storage-account-access-key>")
# Get some data from an Azure Synapse table. The following example applies to Databricks Runtime 11.3 LTS and above.
df = spark.read
.format("sqldw")
.option("host", "hostname")
.option("port", "port") # Optional - will use default port 1433 if not specified.
.option("user", "username")
.option("password", "password")
.option("database", "database-name")
.option("dbtable", "schema-name.table-name") # If schemaName not provided, default to "dbo".
.option("tempDir", "abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>")
.option("forwardSparkAzureStorageCredentials", "true")
.load()
# Get some data from an Azure Synapse table. The following example applies to Databricks Runtime 10.4 LTS and below.
df = spark.read \
.format("com.databricks.spark.sqldw") \
.option("url", "jdbc:sqlserver://<the-rest-of-the-connection-string>") \
.option("tempDir", "abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>") \
.option("forwardSparkAzureStorageCredentials", "true") \
.option("dbTable", "<your-table-name>") \
.load()
# Load data from an Azure Synapse query.
df = spark.read \
.format("com.databricks.spark.sqldw") \
.option("url", "jdbc:sqlserver://<the-rest-of-the-connection-string>") \
.option("tempDir", "abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>") \
.option("forwardSparkAzureStorageCredentials", "true") \
.option("query", "select x, count(*) as cnt from table group by x") \
.load()
# Apply some transformations to the data, then use the
# Data Source API to write the data back to another table in Azure Synapse.
df.write \
.format("com.databricks.spark.sqldw") \
.option("url", "jdbc:sqlserver://<the-rest-of-the-connection-string>") \
.option("forwardSparkAzureStorageCredentials", "true") \
.option("dbTable", "<your-table-name>") \
.option("tempDir", "abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>") \
.save()
SQL
-- Set up the storage account access key in the notebook session conf.
SET fs.azure.account.key.<your-storage-account-name>.dfs.core.windows.net=<your-storage-account-access-key>;
-- Read data using SQL. The following example applies to Databricks Runtime 11.3 LTS and above.
CREATE TABLE example_table_in_spark_read
USING sqldw
OPTIONS (
host '<hostname>',
port '<port>' /* Optional - will use default port 1433 if not specified. */
user '<username>',
password '<password>',
database '<database-name>'
dbtable '<schema-name>.<table-name>', /* If schemaName not provided, default to "dbo". */
forwardSparkAzureStorageCredentials 'true',
tempDir 'abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>'
);
-- Read data using SQL. The following example applies to Databricks Runtime 10.4 LTS and below.
CREATE TABLE example_table_in_spark_read
USING com.databricks.spark.sqldw
OPTIONS (
url 'jdbc:sqlserver://<the-rest-of-the-connection-string>',
forwardSparkAzureStorageCredentials 'true',
dbtable '<your-table-name>',
tempDir 'abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>'
);
-- Write data using SQL.
-- Create a new table, throwing an error if a table with the same name already exists:
CREATE TABLE example_table_in_spark_write
USING com.databricks.spark.sqldw
OPTIONS (
url 'jdbc:sqlserver://<the-rest-of-the-connection-string>',
forwardSparkAzureStorageCredentials 'true',
dbTable '<your-table-name>',
tempDir 'abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>'
)
AS SELECT * FROM table_to_save_in_spark;
R
# Load SparkR
library(SparkR)
# Set up the storage account access key in the notebook session conf.
conf <- sparkR.callJMethod(sparkR.session(), "conf")
sparkR.callJMethod(conf, "set", "fs.azure.account.key.<your-storage-account-name>.dfs.core.windows.net", "<your-storage-account-access-key>")
# Get some data from an Azure Synapse table.
df <- read.df(
source = "com.databricks.spark.sqldw",
url = "jdbc:sqlserver://<the-rest-of-the-connection-string>",
forward_spark_azure_storage_credentials = "true",
dbTable = "<your-table-name>",
tempDir = "abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>")
# Load data from an Azure Synapse query.
df <- read.df(
source = "com.databricks.spark.sqldw",
url = "jdbc:sqlserver://<the-rest-of-the-connection-string>",
forward_spark_azure_storage_credentials = "true",
query = "select x, count(*) as cnt from table group by x",
tempDir = "abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>")
# Apply some transformations to the data, then use the
# Data Source API to write the data back to another table in Azure Synapse.
write.df(
df,
source = "com.databricks.spark.sqldw",
url = "jdbc:sqlserver://<the-rest-of-the-connection-string>",
forward_spark_azure_storage_credentials = "true",
dbTable = "<your-table-name>",
tempDir = "abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>")
Как работает проверка подлинности между Azure Databricks и Synapse?
Соединитель Azure Synapse использует три типа сетевых подключений:
- Драйвер Spark — к Azure Synapse
- Кластер Spark в учетную запись хранения Azure
- Azure Synapse — к учетной записи хранения Azure
Настройка доступа к хранилищу Azure
Azure Databricks и Synapse нуждаются в привилегированном доступе к учетной записи хранения Azure для временного хранения данных.
Azure Synapse не поддерживает использование SAS для доступа к учетной записи хранения. Вы можете настроить доступ для обеих служб, выполнив одно из следующих действий:
- Используйте ключ и секрет учетной записи для учетной записи хранения и задайте для
true
нее значениеforwardSparkAzureStorageCredentials
. Сведения о настройке учетных данных Azure для доступа к хранилищу Azure см. в разделе "Настройка свойств Spark". - Используйте Azure Data Lake Storage 2-го поколения с проверкой подлинности OAuth 2.0 и задайте для нее
true
значениеenableServicePrincipalAuth
. Сведения о настройке подключения из Azure Databricks к Synapse с помощью OAuth 2.0 с субъектом-службой. - Настройте экземпляр Azure Synapse, чтобы иметь управляемое удостоверение службы и задать для
true
него значениеuseAzureMSI
.
Обязательные разрешения Azure Synapse
Так как он используется COPY
в фоновом режиме, соединитель Azure Synapse требует, чтобы пользователь подключения JDBC был иметь разрешение на выполнение следующих команд в подключенном экземпляре Azure Synapse:
Если целевая таблица не существует в Azure Synapse, в дополнение к приведенной выше команде необходимо разрешение на выполнение следующей команды:
В следующей таблице приведены сведения о разрешениях, необходимых для записи:COPY
Разрешения (вставка в существующую таблицу) | Разрешения (вставка в новую таблицу) |
---|---|
ADMINISTER DATABASE BULK OPERATIONS INSERT |
ADMINISTER DATABASE BULK OPERATIONS INSERT CREATE TABLE ALTER ON SCHEMA :: dbo |
Конфигурации сети
Если вы настроите брандмауэр в Azure Synapse, необходимо настроить параметры сети, чтобы разрешить Azure Databricks достичь Azure Synapse. Сначала убедитесь, что рабочая область Azure Databricks развернута в собственной виртуальной сети после развертывания Azure Databricks в виртуальной сети Azure (внедрение виртуальной сети). Затем можно настроить правила брандмауэра IP-адресов в Azure Synpase, чтобы разрешить подключения из подсетей к учетной записи Synapse. См . правила брандмауэра IP-адресов Azure Synapse Analytics.
Настройка подключения из Azure Databricks к Synapse с помощью OAuth 2.0 с субъектом-службой
Вы можете проходить проверку подлинности в Azure Synapse Analytics с помощью субъекта-службы с доступом к базовой учетной записи хранения. Дополнительные сведения об использовании учетных данных субъекта-службы для доступа к учетной записи хранения Azure см. в разделе Доступ к Azure Data Lake Storage 2-го поколения и Хранилищу BLOB-объектов с помощью Azure Databricks. Чтобы включить проверку подлинности соединителя с помощью субъекта-службы, необходимо задать enableServicePrincipalAuth
параметр true
в конфигурации подключения Azure Databricks Synapse .
При необходимости для подключения к Azure Synapse Analytics можно использовать другой субъект-службу. В следующем примере настраивается учетные данные субъекта-службы для учетной записи хранения и необязательные учетные данные субъекта-службы для Synapse:
ini
; Defining the Service Principal credentials for the Azure storage account
fs.azure.account.auth.type OAuth
fs.azure.account.oauth.provider.type org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider
fs.azure.account.oauth2.client.id <application-id>
fs.azure.account.oauth2.client.secret <service-credential>
fs.azure.account.oauth2.client.endpoint https://login.microsoftonline.com/<directory-id>/oauth2/token
; Defining a separate set of service principal credentials for Azure Synapse Analytics (If not defined, the connector will use the Azure storage account credentials)
spark.databricks.sqldw.jdbc.service.principal.client.id <application-id>
spark.databricks.sqldw.jdbc.service.principal.client.secret <service-credential>
Scala
// Defining the Service Principal credentials for the Azure storage account
spark.conf.set("fs.azure.account.auth.type", "OAuth")
spark.conf.set("fs.azure.account.oauth.provider.type", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
spark.conf.set("fs.azure.account.oauth2.client.id", "<application-id>")
spark.conf.set("fs.azure.account.oauth2.client.secret", "<service-credential>")
spark.conf.set("fs.azure.account.oauth2.client.endpoint", "https://login.microsoftonline.com/<directory-id>/oauth2/token")
// Defining a separate set of service principal credentials for Azure Synapse Analytics (If not defined, the connector will use the Azure storage account credentials)
spark.conf.set("spark.databricks.sqldw.jdbc.service.principal.client.id", "<application-id>")
spark.conf.set("spark.databricks.sqldw.jdbc.service.principal.client.secret", "<service-credential>")
Python
# Defining the service principal credentials for the Azure storage account
spark.conf.set("fs.azure.account.auth.type", "OAuth")
spark.conf.set("fs.azure.account.oauth.provider.type", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
spark.conf.set("fs.azure.account.oauth2.client.id", "<application-id>")
spark.conf.set("fs.azure.account.oauth2.client.secret", "<service-credential>")
spark.conf.set("fs.azure.account.oauth2.client.endpoint", "https://login.microsoftonline.com/<directory-id>/oauth2/token")
# Defining a separate set of service principal credentials for Azure Synapse Analytics (If not defined, the connector will use the Azure storage account credentials)
spark.conf.set("spark.databricks.sqldw.jdbc.service.principal.client.id", "<application-id>")
spark.conf.set("spark.databricks.sqldw.jdbc.service.principal.client.secret", "<service-credential>")
R
# Load SparkR
library(SparkR)
conf <- sparkR.callJMethod(sparkR.session(), "conf")
# Defining the service principal credentials for the Azure storage account
sparkR.callJMethod(conf, "set", "fs.azure.account.auth.type", "OAuth")
sparkR.callJMethod(conf, "set", "fs.azure.account.oauth.provider.type", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
sparkR.callJMethod(conf, "set", "fs.azure.account.oauth2.client.id", "<application-id>")
sparkR.callJMethod(conf, "set", "fs.azure.account.oauth2.client.secret", "<service-credential>")
sparkR.callJMethod(conf, "set", "fs.azure.account.oauth2.client.endpoint", "https://login.microsoftonline.com/<directory-id>/oauth2/token")
# Defining a separate set of service principal credentials for Azure Synapse Analytics (If not defined, the connector will use the Azure storage account credentials)
sparkR.callJMethod(conf, "set", "spark.databricks.sqldw.jdbc.service.principal.client.id", "<application-id>")
sparkR.callJMethod(conf, "set", "spark.databricks.sqldw.jdbc.service.principal.client.secret", "<service-credential>")
Поддерживаемые режимы сохранения для пакетной записи
Соединитель Azure Synapse поддерживает режимы сохранения ErrorIfExists
, Ignore
, Append
и Overwrite
, по умолчанию используя режим ErrorIfExists
. Дополнительные сведения о поддерживаемых режимах сохранения в Apache Spark см. в статье документация Spark SQL по режимам сохранения.
Справочник по параметрам соединителя Azure Databricks Synapse
Предоставленные OPTIONS
в Spark SQL поддерживают следующие параметры:
Параметр | Обязательное поле | По умолчанию. | Примечания. |
---|---|---|---|
dbTable |
Да, если не указан параметр query |
Нет по умолчанию | Таблица для создания или чтения данных из Azure Synapse. Этот параметр является обязательным при сохранении (записи) данных обратно в Azure Synapse. Для доступа к таблице в определенной схеме также можно использовать {SCHEMA NAME}.{TABLE NAME} . Если имя схемы не указано, используется схема по умолчанию, связанная с пользователем JDBC.Ранее поддерживавшийся вариант dbtable является нерекомендуемым и в будущих выпусках будет игнорироваться. Вместо этого указывайте имя слитно с первой буквой в нижнем регистре (т. н. camel case). |
query |
Да, если не указан параметр dbTable |
Нет по умолчанию | Запрос для чтения данных в Azure Synapse. Для доступа к таблицам в определенной схеме, упоминаемым в запросе, также можно использовать {SCHEMA NAME}.{TABLE NAME} . Если имя схемы не указано, используется схема по умолчанию, связанная с пользователем JDBC. |
user |
No | Нет по умолчанию | Имя пользователя Azure Synapse. Используется в сочетании с параметром password . Можно использовать только в том случае, если имя пользователя и пароль не передаются в URL-адресе. Если эти данные передаются обоими способами, возникнет ошибка. |
password |
No | Нет по умолчанию | Пароль Azure Synapse. Используется в сочетании с параметром user . Можно использовать только в том случае, если имя пользователя и пароль не передаются в URL-адресе. Если эти данные передаются обоими способами, возникнет ошибка. |
url |
Да | Нет по умолчанию | URL-адрес JDBC, где в качестве подпротокола указан sqlserver . Рекомендуется использовать строку подключения с портала Azure. ПараметрНастоятельно рекомендуется использовать параметр encrypt=true , так как при этом включается SSL-шифрование подключения JDBC. Если параметры user и password заданы отдельно, их не нужно включать в URL-адрес. |
jdbcDriver |
No | Определяется подпротоколом URL-адреса JDBC. | Имя класса используемого драйвера JDBC. Этот класс должен находиться в подкаталоге классов. В большинстве случаев указывать этот параметр нет необходимости, так как имя класса соответствующего драйвера должно автоматически определяться подпротоколом в URL-адресе JDBC. Ранее поддерживавшийся вариант jdbc_driver является нерекомендуемым и в будущих выпусках будет игнорироваться. Вместо этого указывайте имя слитно с первой буквой в нижнем регистре (т. н. camel case). |
tempDir |
Да | Нет по умолчанию | Универсальный код ресурса (URI) abfss . Мы рекомендуем использовать для Azure Synapse выделенный контейнер хранилища BLOB-объектов.Ранее поддерживавшийся вариант tempdir является нерекомендуемым и в будущих выпусках будет игнорироваться. Вместо этого указывайте имя слитно с первой буквой в нижнем регистре (т. н. camel case).Нельзя использовать внешнее расположение, определенное в каталоге tempDir Unity в качестве расположения. |
tempCompression |
No | SNAPPY |
Алгоритм сжатия, используемый для кодирования и декодирования временных файлов как в Spark, так и в Azure Synapse. В настоящее время поддерживаются значения UNCOMPRESSED , SNAPPY и GZIP . |
forwardSparkAzureStorageCredentials |
No | false | Если true библиотека автоматически обнаруживает учетные данные ключа доступа учетной записи хранения, которые Spark использует для подключения к контейнеру хранилища BLOB-объектов и перенаправлять эти учетные данные в Azure Synapse через JDBC. Эти учетные данные отправляются в запросе JDBC. Поэтому при использовании этого параметра настоятельно рекомендуется включить для подключения JDBC шифрование SSL.При настройке проверки подлинности хранилища необходимо задать точно одно из useAzureMSI них и forwardSparkAzureStorageCredentials значение true . Кроме того, можно задать enableServicePrincipalAuth true и использовать субъект-службу для проверки подлинности JDBC и хранилища. Этот forwardSparkAzureStorageCredentials параметр не поддерживает проверку подлинности в хранилище с помощью управляемого удостоверения службы или субъекта-службы. Поддерживается только ключ доступа к учетной записи хранения.Ранее поддерживавшийся вариант forward_spark_azure_storage_credentials является нерекомендуемым и в будущих выпусках будет игнорироваться. Вместо этого указывайте имя слитно с первой буквой в нижнем регистре (т. н. camel case). |
useAzureMSI |
No | false | Если задано значение true , библиотека для создаваемых ею учетных данных с областью базы данных будет указывать IDENTITY = 'Managed Service Identity' без SECRET .При настройке проверки подлинности хранилища необходимо задать точно одно из useAzureMSI них и forwardSparkAzureStorageCredentials значение true . Кроме того, можно задать enableServicePrincipalAuth true и использовать субъект-службу для проверки подлинности JDBC и хранилища. |
enableServicePrincipalAuth |
No | false | Если задано значение true , библиотека будет использовать предоставленные учетные данные субъекта-службы для подключения к учетной записи хранения Azure и Azure Synapse Analytics через JDBC.forward_spark_azure_storage_credentials Если задано значение или useAzureMSI имеет true значение, этот параметр будет иметь приоритет над субъектом-службой в проверке подлинности хранилища. |
tableOptions |
No | CLUSTERED COLUMNSTORE INDEX , DISTRIBUTION = ROUND_ROBIN |
Строка, используемая для указания параметров таблицы при создании таблицы Azure Synapse, заданной с помощью dbTable . Эта строка передается в качестве литерала в предложении WITH инструкции SQL CREATE TABLE , которая направляется в Azure Synapse.Ранее поддерживавшийся вариант table_options является нерекомендуемым и в будущих выпусках будет игнорироваться. Вместо этого указывайте имя слитно с первой буквой в нижнем регистре (т. н. camel case). |
preActions |
No | Без значения по умолчанию (пустая строка) | Разделенный символом ; список команд SQL, которые должны быть выполнены в Azure Synapse перед записью данных в экземпляр Azure Synapse. Эти команды SQL должны быть допустимыми командами, которые принимает Azure Synapse.Если какая-либо из этих команд завершается ошибкой, она обрабатывается как ошибка, а операция записи не выполняется. |
postActions |
No | Без значения по умолчанию (пустая строка) | Разделенный символом ; список команд SQL, которые должны быть выполнены в Azure Synapse после того, как соединитель успешно запишет данные в экземпляр Azure Synapse. Эти команды SQL должны быть допустимыми командами, которые принимает Azure Synapse.Если какая-либо из этих команд завершается ошибкой, она обрабатывается как ошибка, и после успешной записи данных в экземпляр Azure Synapse возникает исключение. |
maxStrLength |
No | 256 | StringType в Spark сопоставляется с типом NVARCHAR(maxStrLength) в Azure Synapse. С помощью maxStrLength можно задать длину строки для всех столбцов типа NVARCHAR(maxStrLength) , которые находятся в таблице с именемdbTable в Azure Synapse.Ранее поддерживавшийся вариант maxstrlength является нерекомендуемым и в будущих выпусках будет игнорироваться. Вместо этого указывайте имя слитно с первой буквой в нижнем регистре (т. н. camel case). |
applicationName |
No | Databricks-User-Query |
Тег соединения для каждого запроса. Если значение не указано или является пустой строкой, в значение тега по умолчанию добавляется URL-адрес JDBC. Значение по умолчанию не позволяет средству мониторинга Azure DB инициировать ложные предупреждения об атаках путем внедрении кода SQL. |
maxbinlength |
No | Нет по умолчанию | Управление длиной для столбцов BinaryType . Этот параметр преобразуется в VARBINARY(maxbinlength) . |
identityInsert |
No | false | Если задано значение true , активируется режим IDENTITY_INSERT , в результате чего указанное в DataFrame значение вставляется в столбец IDENTITY таблицы Azure Synapse.См. раздел Вставка значений в столбец IDENTITY явным образом. |
externalDataSource |
No | Нет по умолчанию | Предварительно подготовленный внешний источник данных для чтения данных из Azure Synapse. Внешний источник данных можно использовать только с PolyBase и удаляет требование разрешения CONTROL, так как соединитель не должен создавать учетные данные с областью действия и внешний источник данных для загрузки данных. Пример использования и список разрешений, необходимых при использовании внешнего источника данных, см. в разделе Необходимые разрешения Azure Synapse для PolyBase с внешним источником данных. |
maxErrors |
No | 0 | Максимальное количество строк, которые могут быть отклонены во время операций чтения и записи перед отменой операции загрузки. Отклоненные строки будут игнорироваться. Например, если в двух из десяти записей есть ошибки, обрабатываются только восемь записей. Дополнительные сведения см. в документации по REJECT_VALUE в CREATE EXTERNAL TABLE и MAXERRORS в COPY. |
inferTimestampNTZType |
No | false | Если true значения типа Azure Synapse TIMESTAMP интерпретируются как TimestampNTZType (метка времени без часового пояса) во время чтения. В противном случае все метки времени интерпретируются независимо TimestampType от типа в базовой таблице Azure Synapse. |
Примечание.
- Параметры
tableOptions
,preActions
,postActions
иmaxStrLength
нужны только при записи данных из Azure Databricks в новую таблицу в Azure Synapse. - Хотя все имена параметров источника данных нечувствительны к регистру, для ясности рекомендуется указывать их слитно с первой буквой в нижнем регистре (т. н. camel case).
pushdown запроса в Azure Synapse
Соединитель Azure Synapse реализует набор правил оптимизации для отправки указанных ниже операторов в Azure Synapse.
Filter
Project
Limit
Операторы Project
и Filter
поддерживают следующие выражения:
- Большинство булевых логических операторов
- Сравнения
- Простые арифметические операции
- Приведение числовых или строковых типов
Для оператора Limit
pushdown поддерживается только в том случае, если порядок не указан. Например:
SELECT TOP(10) * FROM table
, но не SELECT TOP(10) * FROM table ORDER BY col
.
Примечание.
Соединитель Azure Synapse не передает выражения, работающие со строками, датами или отметками времени.
Передача pushdown запросов, созданных с помощью соединителя Azure Synapse, по умолчанию включена. Ее можно отключить, задав для параметра spark.databricks.sqldw.pushdown
значение false
.
Управление временными данными
Соединитель Azure Synapse не удаляет временные файлы, создаваемые в контейнере хранилища Azure. Databricks рекомендует периодически удалять временные файлы в указанном tempDir
пользователем расположении.
Чтобы упростить очистку данных, соединитель Azure Synapse не сохраняет файлы данных непосредственно в tempDir
, а создает подкаталог вида <tempDir>/<yyyy-MM-dd>/<HH-mm-ss-SSS>/<randomUUID>/
. Вы можете настроить периодические задания (с помощью функции заданий Azure Databricks или иным способом) для рекурсивного удаления всех подкаталогов, которые старше заданного порогового значения (например, 2 дней), в предположении, что задания Spark не могут выполняться дольше этого порогового значения.
Более простая альтернатива — периодическое удаление всего контейнера и создание нового с тем же именем. Для этого необходимо использовать выделенный контейнер для временных данных, создаваемых соединителем Azure Synapse, и найти интервал времени, в течение которого запросы с участием соединителя гарантированно не будут выполняться.
Управление временными объектами
Соединитель Azure Synapse автоматизирует обмен данными между кластером Azure Databricks и экземпляром Azure Synapse. Для чтения данных из таблицы или запроса Azure Synapse или записи данных в таблицу Azure Synapse соединитель Azure Synapse в фоновом режиме создает временные объекты, включая DATABASE SCOPED CREDENTIAL
, EXTERNAL DATA SOURCE
, EXTERNAL FILE FORMAT
и EXTERNAL TABLE
. Эти объекты живут только в течение соответствующего задания Spark и автоматически удаляются.
Если в кластере выполняется запрос с использованием соединителя Azure Synapse, то в случае, если процесс драйвера Spark завершается сбоем или принудительно перезапускается либо кластер принудительно завершается или перезапускается, временные объекты могут быть не удалены. Чтобы эти объекты было удобно идентифицировать и удалять вручную, соединитель Azure Synapse добавляет в начало имен всех промежуточных временных объектов, создаваемых в экземпляре Azure Synapse, тег в таком формате: tmp_databricks_<yyyy_MM_dd_HH_mm_ss_SSS>_<randomUUID>_<internalObject>
.
Рекомендуется периодически выполнять поиск оставшихся объектов с помощью следующих запросов:
SELECT * FROM sys.database_scoped_credentials WHERE name LIKE 'tmp_databricks_%'
SELECT * FROM sys.external_data_sources WHERE name LIKE 'tmp_databricks_%'
SELECT * FROM sys.external_file_formats WHERE name LIKE 'tmp_databricks_%'
SELECT * FROM sys.external_tables WHERE name LIKE 'tmp_databricks_%'