Delen via


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:

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, Ignoreen AppendOverwrite 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. Instelling
encrypt=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: UNCOMPRESSEDen SNAPPY GZIP.
forwardSparkAzureStorageCredentials Nee false Als truede 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 trueinstellen. 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 trueinstellen. U kunt ook de service-principal instellen enableServicePrincipalAuth true en gebruiken voor zowel JDBC- als opslagverificatie.
enableServicePrincipalAuth Nee false Als truede 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 naam
dbTable 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, postActionsen maxStrLength 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 tempDirop, 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 SOURCEen EXTERNAL FILE FORMATEXTERNAL 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_%'