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-opslagaccount voor tijdelijke fasering.

Belangrijk

De verouderde documentatie voor queryfederatie is verwijderd en zal waarschijnlijk niet meer worden bijgewerkt. De configuraties die in deze inhoud worden genoemd, worden niet officieel goedgekeurd of getest door Databricks. Als Lakehouse Federation uw brondatabase ondersteunt, raadt Databricks dat aan.

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.

Opmerking

COPY is alleen beschikbaar op Azure Data Lake Storage-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.

Opmerking

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 gedefinieerd in Unity Catalog worden niet ondersteund als tempDir locaties.

Databricks raadt u aan de veiligste verificatiestroom te gebruiken die beschikbaar is. De verificatiestroom die in dit voorbeeld wordt beschreven, heeft risico's die niet aanwezig zijn in andere stromen. U moet deze stroom alleen gebruiken wanneer andere veiligere stromen, zoals beheerde identiteiten, niet haalbaar zijn.

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 Storage-account

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)
DE DATABASE BULKOPERATIES BEHEEREN
INSERT
DE DATABASE BULKOPERATIES BEHEEREN
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.

Configureer de verbinding van Azure Databricks met Synapse via 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. Zie Verbinding maken met Azure Data Lake Storage en Blob Storagevoor meer informatie over hoe u referenties voor de service-principal kunt gebruiken om toegang te krijgen tot een Azure-opslagaccount. U moet de enableServicePrincipalAuth optie instellen op true in de verbindingsconfiguratie met als referentie Azure Databricks Synapse-connector opties om de connector te laten authenticeren met een service-principal.

U kunt eventueel een andere service-principal gebruiken voor de Azure Synapse Analytics-verbinding. In het volgende voorbeeld worden service-principal-referenties geconfigureerd voor de opslagaccount en optionele service-principal-referenties 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 de opslagmodi ErrorIfExists, Ignore, Append en Overwrite, waarbij de standaardmodus ErrorIfExists is. 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:

Maatstaf Verplicht Verstek Opmerkingen
dbTable Ja, tenzij query is opgegeven Geen standaard 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} gebruiken om toegang te krijgen tot een tabel in een gegeven 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 standaard De query om uit te lezen 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 standaard 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. Het doorgeven van beide resulteert in een fout.
password Nee. Geen standaard 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. Het doorgeven van beide resulteert in een fout.
url Ja Geen standaard Een JDBC-URL waarbij sqlserver is ingesteld als het subprotocol. Het wordt aanbevolen om de verbindingsreeks te gebruiken die wordt geleverd door Azure Portal. Het instellen van 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 de classpath bevinden. 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 standaard 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 locatie tempDir.
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 SNAPPYGZIP.
forwardSparkAzureStorageCredentials Nee. onwaar 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 enableServicePrincipalAuth ook instellen op true en de service principal 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. onwaar Als true, zal de bibliotheek IDENTITY = 'Managed Service Identity' en geen SECRET specificeren voor de database-scoped referenties die het creëert.
Bij het configureren van opslagverificatie moet u precies één van useAzureMSI en forwardSparkAzureStorageCredentials op trueinstellen. U kunt enableServicePrincipalAuth ook instellen op true en de service principal gebruiken voor zowel JDBC- als opslagverificatie.
enableServicePrincipalAuth Nee. onwaar Als true zal de bibliotheek de opgegeven service-principalreferenties gebruiken om verbinding te maken met het Azure-opslagaccount en Azure Synapse Analytics via JDBC.
Als forward_spark_azure_storage_credentials of useAzureMSI is ingesteld op true, krijgt die optie voorrang boven de service-principal bij 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 clausule van de CREATE TABLE SQL-instructie die wordt uitgegeven tegen 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 gebruiken om de tekenreekslengte in te stellen 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 standaard De kolomlengte van BinaryType kolommen bepalen. Deze parameter wordt vertaald als VARBINARY(maxbinlength).
identityInsert Nee. onwaar Het instellen van true schakelt de IDENTITY_INSERT-modus in, waarmee een door DataFrame opgegeven waarde in de identiteitskolom van de Azure Synapse-tabel wordt ingevoegd.
Zie Expliciet waarden invoegen in een identiteitskolom.
externalDataSource Nee. Geen standaard 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 CREATE EXTERNAL TABLE en MAXERRORS-documentatie in COPY.
inferTimestampNTZType Nee. onwaar 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.

Opmerking

  • 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 aan ze in 'camel case' op te geven voor de 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 tekstcasts

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.

Opmerking

De Azure Synapse-connector stuwt geen expressies voor het verwerken van tekenreeksen, datums of tijdstempels door.

De query pushdown 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 Lakeflow-taken of anderszins) instellen om alle submappen die ouder zijn dan een bepaalde drempelwaarde (bijvoorbeeld 2 dagen) recursief te verwijderen, waarbij wordt aangenomen dat er geen Spark-taken langer dan die drempelwaarde 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. Om de identificatie en handmatige verwijdering van deze objecten te vergemakkelijken, voorziet de Azure Synapse-connector de namen van alle tussenliggende tijdelijke objecten die zijn aangemaakt in het Azure Synapse-exemplaar van een prefix met een tag in de vorm: 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_%'