Query's uitvoeren op gegevens in Azure Synapse Analytics
U hebt toegang tot Azure Synapse vanuit Azure Databricks met behulp van de Azure Synapse-connector, die gebruikmaakt van de COPY
instructie in Azure Synapse om grote hoeveelheden gegevens efficiënt over te dragen tussen een Azure Databricks-cluster en een Azure Synapse-exemplaar met behulp van een Azure Data Lake Storage Gen2-opslagaccount voor tijdelijke fasering.
Belangrijk
De configuraties die in dit artikel worden beschreven, zijn experimenteel. Experimentele functies worden geleverd als zodanig en worden niet ondersteund door Databricks via technische ondersteuning van klanten. Als u volledige ondersteuning voor queryfederatie wilt krijgen, moet u in plaats daarvan Lakehouse Federation gebruiken, zodat uw Azure Databricks-gebruikers kunnen profiteren van de syntaxis van Unity Catalog en hulpprogramma's voor gegevensbeheer.
Azure Synapse Analytics is een clouddatawarehouse dat mpP (Massively Parallel Processing) gebruikt om snel complexe query's uit te voeren op petabytes aan gegevens.
Belangrijk
Deze connector is alleen bedoeld voor Synapse Dedicated Pool-exemplaren en is niet compatibel met andere Synapse-onderdelen.
Notitie
COPY
is alleen beschikbaar op Azure Data Lake Storage Gen2-exemplaren. Zie Verbinding maken tussen Azure Databricks en Azure Synapse met PolyBase (verouderd) als u meer informatie zoekt over het werken met Polybase.
Voorbeeldsyntaxis voor Synapse
U kunt query's uitvoeren op Synapse in Scala, Python, SQL en R. In de volgende codevoorbeelden worden opslagaccountsleutels gebruikt en worden de opslagreferenties van Azure Databricks doorgestuurd naar Synapse.
Notitie
Gebruik de verbindingsreeks van Azure Portal, waarmee SSL-versleuteling (Secure Sockets Layer) mogelijk is voor alle gegevens die worden verzonden tussen het Spark-stuurprogramma en het Azure Synapse-exemplaar via de JDBC-verbinding. Als u wilt controleren of ssl-versleuteling is ingeschakeld, kunt u zoeken encrypt=true
in de verbindingsreeks.
Belangrijk
Externe locaties die zijn gedefinieerd in Unity Catalog worden niet ondersteund als tempDir
locaties.
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>")
Hoe werkt verificatie tussen Azure Databricks en Synapse?
De Azure Synapse-connector maakt gebruik van drie typen netwerkverbindingen:
- Spark-stuurprogramma voor Azure Synapse
- Spark-cluster naar Azure-opslagaccount
- Azure Synapse naar Azure-opslagaccount
Toegang tot Azure Storage configureren
Zowel Azure Databricks als Synapse hebben bevoegde toegang nodig tot een Azure-opslagaccount dat moet worden gebruikt voor tijdelijke gegevensopslag.
Azure Synapse biedt geen ondersteuning voor het gebruik van SAS voor toegang tot opslagaccounts. U kunt de toegang voor beide services configureren door een van de volgende handelingen uit te voeren:
- Gebruik de accountsleutel en het geheim voor het opslagaccount en stel deze in op
forwardSparkAzureStorageCredentials
true
. Zie Spark-eigenschappen instellen om Azure-referenties te configureren voor toegang tot Azure Storage. - Gebruik Azure Data Lake Storage Gen2 met OAuth 2.0-verificatie en stel deze in op
enableServicePrincipalAuth
true
. Zie Verbinding configureren vanuit Azure Databricks met Synapse met OAuth 2.0 met een service-principal. - Configureer uw Azure Synapse-exemplaar om een Managed Service Identity te hebben en in te stellen op
useAzureMSI
true
.
Vereiste Azure Synapse-machtigingen
Omdat deze op de achtergrond wordt gebruikt COPY
, vereist de Azure Synapse-connector dat de gebruiker van de JDBC-verbinding gemachtigd is om de volgende opdrachten uit te voeren in het verbonden Azure Synapse-exemplaar:
Als de doeltabel niet bestaat in Azure Synapse, is de machtiging voor het uitvoeren van de volgende opdracht vereist naast de bovenstaande opdracht:
De volgende tabel bevat een overzicht van de machtigingen die vereist zijn voor schrijfbewerkingen met COPY
:
Machtigingen (invoegen in een bestaande tabel) | Machtigingen (invoegen in een nieuwe tabel) |
---|---|
DATABASE BULKBEWERKINGEN BEHEREN INSERT |
DATABASE BULKBEWERKINGEN BEHEREN INSERT CREATE TABLE ALTER ON SCHEMA :: dbo |
Netwerkconfiguraties
Als u een firewall in Azure Synapse configureert, moet u netwerkinstellingen configureren zodat Azure Databricks Azure Synapse kan bereiken. Zorg er eerst voor dat uw Azure Databricks-werkruimte wordt geïmplementeerd in uw eigen virtuele netwerk na Azure Databricks implementeren in uw virtuele Azure-netwerk (VNet-injectie). Vervolgens kunt u IP-firewallregels op Azure Synpase configureren om verbindingen van uw subnetten met uw Synapse-account toe te staan. Zie IP-firewallregels voor Azure Synapse Analytics.
Verbinding van Azure Databricks met Synapse configureren met OAuth 2.0 met een service-principal
U kunt zich verifiëren bij Azure Synapse Analytics met behulp van een service-principal met toegang tot het onderliggende opslagaccount. Voor meer informatie over het gebruik van service-principal inloggegevens om toegang te krijgen tot een Azure opslagaccount, zie Verbinding maken met Azure Data Lake Storage Gen2 en Blob Storage. U moet de enableServicePrincipalAuth
optie true
instellen op in de verbindingsconfiguratie waarnaar azure Databricks Synapse-connectoropties verwijzen om de connector in te schakelen voor verificatie met een service-principal.
U kunt eventueel een andere service-principal gebruiken voor de Azure Synapse Analytics-verbinding. In het volgende voorbeeld worden referenties voor de service-principal geconfigureerd voor het opslagaccount en optionele referenties voor de service-principal voor 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>")
Ondersteunde opslagmodi voor batchschrijfbewerkingen
De Azure Synapse-connector ondersteunt ErrorIfExists
, Ignore
en Append
Overwrite
slaat modi op met de standaardmodus.ErrorIfExists
Zie de Spark SQL-documentatie over save modes voor meer informatie over ondersteunde opslagmodi in Apache Spark.
Naslaginformatie over opties voor Azure Databricks Synapse-connector
De OPTIONS
opgegeven in Spark SQL bieden ondersteuning voor de volgende instellingen:
Parameter | Vereist | Standaardinstelling | Opmerkingen |
---|---|---|---|
dbTable |
Ja, tenzij query is opgegeven |
Geen standaardwaarde | De tabel waaruit u gegevens wilt maken of lezen in Azure Synapse. Deze parameter is vereist bij het opslaan van gegevens in Azure Synapse. U kunt ook {SCHEMA NAME}.{TABLE NAME} toegang krijgen tot een tabel in een bepaald schema. Als er geen schemanaam is opgegeven, wordt het standaardschema gebruikt dat is gekoppeld aan de JDBC-gebruiker.De eerder ondersteunde dbtable variant is afgeschaft en wordt genegeerd in toekomstige releases. Gebruik in plaats daarvan de naam van de kameelkast. |
query |
Ja, tenzij dbTable is opgegeven |
Geen standaardwaarde | De query waaruit moet worden gelezen in Azure Synapse. Voor tabellen waarnaar in de query wordt verwezen, kunt u ook een tabel in een bepaald schema openen {SCHEMA NAME}.{TABLE NAME} . Als er geen schemanaam is opgegeven, wordt het standaardschema gebruikt dat is gekoppeld aan de JDBC-gebruiker. |
user |
Nee | Geen standaardwaarde | De azure Synapse-gebruikersnaam. Moet samen met password de optie worden gebruikt. Kan alleen worden gebruikt als de gebruiker en het wachtwoord niet worden doorgegeven in de URL. Als u beide doorgeeft, treedt er een fout op. |
password |
Nee | Geen standaardwaarde | Het Azure Synapse-wachtwoord. Moet samen met user de optie worden gebruikt. Kan alleen worden gebruikt als de gebruiker en het wachtwoord niet worden doorgegeven in de URL. Als u beide doorgeeft, treedt er een fout op. |
url |
Ja | Geen standaardwaarde | Een JDBC-URL die sqlserver is ingesteld als het subprotocol. Het wordt aanbevolen om de verbindingsreeks te gebruiken die wordt geleverd door Azure Portal. Instellingencrypt=true wordt sterk aanbevolen, omdat hiermee SSL-versleuteling van de JDBC-verbinding wordt ingeschakeld. Als user deze password afzonderlijk worden ingesteld, hoeft u deze niet op te nemen in de URL. |
jdbcDriver |
Nee | Bepaald door het subprotocol van de JDBC-URL | De klassenaam van het JDBC-stuurprogramma dat moet worden gebruikt. Deze klasse moet zich in het klaspad bevindt. In de meeste gevallen hoeft u deze optie niet op te geven, omdat de juiste stuurprogrammaklassenaam automatisch moet worden bepaald door het subprotocol van de JDBC-URL. De eerder ondersteunde jdbc_driver variant is afgeschaft en wordt genegeerd in toekomstige releases. Gebruik in plaats daarvan de naam van de kameelkast. |
tempDir |
Ja | Geen standaardwaarde | Een abfss URI. U wordt aangeraden een toegewezen Blob Storage-container te gebruiken voor Azure Synapse.De eerder ondersteunde tempdir variant is afgeschaft en wordt genegeerd in toekomstige releases. Gebruik in plaats daarvan de naam van de kameelkast.U kunt geen externe locatie gebruiken die is gedefinieerd in Unity Catalog als een tempDir locatie. |
tempCompression |
Nee | SNAPPY |
Het compressie-algoritme dat moet worden gebruikt om tijdelijk te coderen/decoderen door zowel Spark als Azure Synapse. Momenteel ondersteunde waarden zijn: UNCOMPRESSED en SNAPPY GZIP . |
forwardSparkAzureStorageCredentials |
Nee | false | Als true de bibliotheek automatisch de toegangssleutelreferenties van het opslagaccount detecteert die Spark gebruikt om verbinding te maken met de Blob Storage-container en deze referenties doorstuurt naar Azure Synapse via JDBC. Deze referenties worden verzonden als onderdeel van de JDBC-query. Daarom is het raadzaam ssl-versleuteling van de JDBC-verbinding in te schakelen wanneer u deze optie gebruikt.Bij het configureren van opslagverificatie moet u precies één van useAzureMSI en forwardSparkAzureStorageCredentials op true instellen. U kunt ook de service-principal instellen enableServicePrincipalAuth true en gebruiken voor zowel JDBC- als opslagverificatie. De forwardSparkAzureStorageCredentials optie biedt geen ondersteuning voor verificatie voor opslag met behulp van een beheerde service-id of service-principal. Alleen toegangssleutel voor opslagaccounts wordt ondersteund.De eerder ondersteunde forward_spark_azure_storage_credentials variant is afgeschaft en wordt genegeerd in toekomstige releases. Gebruik in plaats daarvan de naam van de kameelkast. |
useAzureMSI |
Nee | false | Als true , de bibliotheek zal opgeven IDENTITY = 'Managed Service Identity' en nee SECRET voor de database scoped referenties die worden gemaakt.Bij het configureren van opslagverificatie moet u precies één van useAzureMSI en forwardSparkAzureStorageCredentials op true instellen. U kunt ook de service-principal instellen enableServicePrincipalAuth true en gebruiken voor zowel JDBC- als opslagverificatie. |
enableServicePrincipalAuth |
Nee | false | Als true de bibliotheek de opgegeven referenties van de service-principal gebruikt om verbinding te maken met het Azure-opslagaccount en Azure Synapse Analytics via JDBC.Als een van deze opties forward_spark_azure_storage_credentials is ingesteld of useAzureMSI is ingesteld true , heeft deze optie voorrang op service-principal in opslagverificatie. |
tableOptions |
Nee | CLUSTERED COLUMNSTORE INDEX , DISTRIBUTION = ROUND_ROBIN |
Een tekenreeks die wordt gebruikt om tabelopties op te geven bij het maken van de Azure Synapse-tabel die is ingesteld via dbTable . Deze tekenreeks wordt letterlijk doorgegeven aan de WITH component van de CREATE TABLE SQL-instructie die wordt uitgegeven voor Azure Synapse.De eerder ondersteunde table_options variant is afgeschaft en wordt genegeerd in toekomstige releases. Gebruik in plaats daarvan de naam van de kameelkast. |
preActions |
Nee | Geen standaardwaarde (lege tekenreeks) | Een ; gescheiden lijst met SQL-opdrachten die moeten worden uitgevoerd in Azure Synapse voordat u gegevens naar het Azure Synapse-exemplaar schrijft. Deze SQL-opdrachten moeten geldige opdrachten zijn die worden geaccepteerd door Azure Synapse.Als een van deze opdrachten mislukt, wordt deze behandeld als een fout en wordt de schrijfbewerking niet uitgevoerd. |
postActions |
Nee | Geen standaardwaarde (lege tekenreeks) | Een ; gescheiden lijst met SQL-opdrachten die moeten worden uitgevoerd in Azure Synapse nadat de connector gegevens naar het Azure Synapse-exemplaar heeft geschreven. Deze SQL-opdrachten moeten geldige opdrachten zijn die worden geaccepteerd door Azure Synapse.Als een van deze opdrachten mislukt, wordt deze behandeld als een fout en krijgt u een uitzondering nadat de gegevens naar het Azure Synapse-exemplaar zijn geschreven. |
maxStrLength |
Nee | 256 | StringType in Spark is toegewezen aan het NVARCHAR(maxStrLength) type in Azure Synapse. U kunt maxStrLength de tekenreekslengte instellen voor alle NVARCHAR(maxStrLength) typekolommen in de tabel met de naamdbTable in Azure Synapse.De eerder ondersteunde maxstrlength variant is afgeschaft en wordt genegeerd in toekomstige releases. Gebruik in plaats daarvan de naam van de kameelkast. |
applicationName |
Nee | Databricks-User-Query |
De tag van de verbinding voor elke query. Als deze niet is opgegeven of als de waarde een lege tekenreeks is, wordt de standaardwaarde van de tag toegevoegd aan de JDBC-URL. Met de standaardwaarde voorkomt u dat het azure DB-bewakingsprogramma valse SQL-injectiewaarschuwingen genereert voor query's. |
maxbinlength |
Nee | Geen standaardwaarde | De kolomlengte van BinaryType kolommen bepalen. Deze parameter wordt vertaald als VARBINARY(maxbinlength) . |
identityInsert |
Nee | false | Instelling voor true het inschakelen IDENTITY_INSERT van de modus, waarmee een door DataFrame opgegeven waarde wordt ingevoegd in de identiteitskolom van de Azure Synapse-tabel.Zie Expliciet waarden invoegen in een identiteitskolom. |
externalDataSource |
Nee | Geen standaardwaarde | Een vooraf ingerichte externe gegevensbron voor het lezen van gegevens uit Azure Synapse. Een externe gegevensbron kan alleen worden gebruikt met PolyBase en verwijdert de machtigingsvereiste CONTROL omdat de connector geen scoped referentie en een externe gegevensbron hoeft te maken om gegevens te laden. Zie Vereiste Azure Synapse-machtigingen voor PolyBase met de optie externe gegevensbron, bijvoorbeeld het gebruik en de lijst met machtigingen die zijn vereist voor het gebruik van een externe gegevensbron. |
maxErrors |
Nee | 0 | Het maximum aantal rijen dat kan worden geweigerd tijdens lees- en schrijfbewerkingen voordat de laadbewerking wordt geannuleerd. De geweigerde rijen worden genegeerd. Als twee van de tien records bijvoorbeeld fouten bevatten, worden er slechts acht records verwerkt. Zie REJECT_VALUE documentatie in de documentatie CREATE EXTERNAL TABLE en MAXERRORS in COPY. |
inferTimestampNTZType |
Nee | false | Als true , waarden van het type Azure Synapse TIMESTAMP worden geïnterpreteerd als TimestampNTZType (tijdstempel zonder tijdzone) tijdens leesbewerkingen. Anders worden alle tijdstempels geïnterpreteerd als TimestampType ongeacht het type in de onderliggende Azure Synapse-tabel. |
Notitie
tableOptions
,preActions
,postActions
enmaxStrLength
zijn alleen relevant bij het schrijven van gegevens van Azure Databricks naar een nieuwe tabel in Azure Synapse.- Hoewel alle namen van gegevensbronnen niet hoofdlettergevoelig zijn, raden we u aan ze op te geven in 'kameel geval' voor duidelijkheid.
Querypushdown naar Azure Synapse
De Azure Synapse-connector implementeert een set optimalisatieregels om de volgende operators naar Azure Synapse te pushen:
Filter
Project
Limit
De Project
en Filter
operators ondersteunen de volgende expressies:
- De meeste booleaanse logische operators
- Vergelijkingen
- Eenvoudige rekenkundige bewerkingen
- Numerieke en tekenreekscasts
Voor de Limit
operator wordt pushdown alleen ondersteund wanneer er geen volgorde is opgegeven. Voorbeeld:
SELECT TOP(10) * FROM table
, maar niet SELECT TOP(10) * FROM table ORDER BY col
.
Notitie
De Azure Synapse-connector pusht geen expressies die werken op tekenreeksen, datums of tijdstempels.
Querypushdown die is gebouwd met de Azure Synapse-connector, is standaard ingeschakeld. U kunt dit uitschakelen door deze in te stellen spark.databricks.sqldw.pushdown
op false
.
Tijdelijk gegevensbeheer
De Azure Synapse-connector verwijdert de tijdelijke bestanden die worden gemaakt in de Azure Storage-container niet . Databricks raadt u aan om periodiek tijdelijke bestanden te verwijderen onder de door de gebruiker opgegeven tempDir
locatie.
Ter bevordering van het opschonen van gegevens slaat de Azure Synapse-connector geen gegevensbestanden rechtstreeks onder tempDir
op, maar maakt in plaats daarvan een submap van het formulier: <tempDir>/<yyyy-MM-dd>/<HH-mm-ss-SSS>/<randomUUID>/
. U kunt periodieke taken (met behulp van de Functie Azure Databricks-taken of anderszins) instellen om recursief alle submappen te verwijderen die ouder zijn dan een bepaalde drempelwaarde (bijvoorbeeld 2 dagen), waarbij wordt aangenomen dat er geen Spark-taken langer dan die drempelwaarde kunnen worden uitgevoerd.
Een eenvoudiger alternatief is om de hele container periodiek te verwijderen en een nieuwe met dezelfde naam te maken. Hiervoor moet u een toegewezen container gebruiken voor de tijdelijke gegevens die worden geproduceerd door de Azure Synapse-connector en dat u een tijdvenster kunt vinden waarin u kunt garanderen dat er geen query's met betrekking tot de connector worden uitgevoerd.
Tijdelijk objectbeheer
De Azure Synapse-connector automatiseert gegevensoverdracht tussen een Azure Databricks-cluster en een Azure Synapse-exemplaar. Voor het lezen van gegevens uit een Azure Synapse-tabel of het schrijven van gegevens naar een Azure Synapse-tabel, maakt de Azure Synapse-connector tijdelijke objecten, waaronderDATABASE SCOPED CREDENTIAL
, EXTERNAL DATA SOURCE
en EXTERNAL FILE FORMAT
EXTERNAL TABLE
achter de schermen. Deze objecten bevinden zich alleen gedurende de duur van de bijbehorende Spark-taak en worden automatisch verwijderd.
Wanneer een cluster een query uitvoert met behulp van de Azure Synapse-connector, als het Spark-stuurprogrammaproces vastloopt of geforceerd opnieuw wordt opgestart, of als het cluster geforceerd wordt beëindigd of opnieuw wordt opgestart, worden tijdelijke objecten mogelijk niet verwijderd. De Azure Synapse-connector voorvoegt de namen van alle tussenliggende tijdelijke objecten die zijn gemaakt in het Azure Synapse-exemplaar met een tag van het formulier om het identificeren en handmatig verwijderen van deze objecten mogelijk te maken: tmp_databricks_<yyyy_MM_dd_HH_mm_ss_SSS>_<randomUUID>_<internalObject>
U wordt aangeraden regelmatig te zoeken naar gelekte objecten met behulp van query's zoals:
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_%'