Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Du kan komma åt Azure Synapse från Azure Databricks med hjälp av Azure Synapse-anslutningsappen, som använder COPY-instruktionen i Azure Synapse för att överföra stora mängder data effektivt mellan ett Azure Databricks-kluster och en Azure Synapse-instans med hjälp av ett Azure Data Lake Storage-lagringskonto för tillfällig mellanlagring.
Viktigt!
Dokumentationen för den gamla frågefederationen har dragits tillbaka och kanske inte kommer att uppdateras. De konfigurationer som nämns i det här innehållet stöds inte officiellt eller testas inte av Databricks. Om Lakehouse Federation stöder källdatabasen rekommenderar Databricks att du använder den i stället.
Azure Synapse Analytics är ett molnbaserat informationslager för företag som använder MPP (massively parallel processing) för att snabbt köra komplexa frågor över petabyte med data.
Viktigt!
Den här anslutningsappen är endast till för användning med Synapse Dedicated Pool-instanser och är inte kompatibel med andra Synapse-komponenter.
Anmärkning
              COPY är endast tillgängligt på Azure Data Lake Storage-instanser. Information om hur du arbetar med Polybase finns i Ansluta Azure Databricks och Azure Synapse med PolyBase (äldre).
Exempelsyntax för Synapse
Du kan fråga Synapse i Scala, Python, SQL och R. Följande kodexempel använder lagringskontonycklar och vidarebefordrar autentiseringsuppgifterna för lagring från Azure Databricks till Synapse.
Anmärkning
Använd anslutningssträng som tillhandahålls av Azure Portal, som möjliggör SSL-kryptering (Secure Sockets Layer) för alla data som skickas mellan Spark-drivrutinen och Azure Synapse-instansen via JDBC-anslutningen. Om du vill kontrollera att SSL-krypteringen är aktiverad kan du söka efter encrypt=true i anslutningssträng.
Viktigt!
              Externa platser som definieras i Unity Catalog stöds inte som tempDir platser.
Databricks rekommenderar att du använder det säkraste tillgängliga autentiseringsflödet. Autentiseringsflödet som beskrivs i det här exemplet medför risker som inte finns i andra flöden. Du bör bara använda det här flödet när andra säkrare flöden, till exempel hanterade identiteter, inte är livskraftiga.
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>")
Hur fungerar autentisering mellan Azure Databricks och Synapse?
Azure Synapse-anslutningsappen använder tre typer av nätverksanslutningar:
- Spark-drivrutin för Azure Synapse
- Spark-kluster till Azure Storage-konto
- Azure Synapse till Azure Storage-konto
Konfigurera åtkomst till Azure Storage
Både Azure Databricks och Synapse behöver privilegierad åtkomst till ett Azure Storage-konto som ska användas för tillfällig datalagring.
Azure Synapse stöder inte användning av SAS för åtkomst till lagringskonton. Du kan konfigurera åtkomst för båda tjänsterna genom att göra något av följande:
- Använd kontonyckeln och hemligheten för lagringskontot och ange forwardSparkAzureStorageCredentialstilltrue. Se Ange Spark-egenskaper för att konfigurera Azure-autentiseringsuppgifter för åtkomst till Azure Storage.
- Använd Azure Data Lake Storage med OAuth 2.0-autentisering och ange enableServicePrincipalAuthtilltrue. Se Konfigurera anslutning från Azure Databricks till Synapse med OAuth 2.0 med tjänstens huvudnamn.
- Konfigurera din Azure Synapse-instans så att den har en hanterad tjänstidentitet och ange useAzureMSItilltrue.
Nödvändiga Azure Synapse-behörigheter
Eftersom COPY används i bakgrunden kräver Azure Synapse-anslutningen att användaren av JDBC-anslutningen har behörighet att köra följande kommandon i den anslutna Azure Synapse-instansen:
Om måltabellen inte finns i Azure Synapse krävs behörighet att köra följande kommando utöver kommandot ovan:
I följande tabell sammanfattas de behörigheter som krävs för skrivningar med COPY:
| Behörigheter (infoga i en befintlig tabell) | Behörigheter (infoga i en ny tabell) | 
|---|---|
| ADMINISTRERA MASSOPERATIONER FÖR DATABAS INSERT | ADMINISTRERA MASSOPERATIONER FÖR DATABAS INSERT CREATE TABLE ALTERERA PÅ SCHEMA :: dbo | 
Nätverkskonfigurationer
Om du konfigurerar en brandvägg i Azure Synapse måste du konfigurera nätverksinställningar så att Azure Databricks kan nå Azure Synapse. Kontrollera först att din Azure Databricks-arbetsyta distribueras i ditt eget virtuella nätverk efter Distribuera Azure Databricks i ditt virtuella Azure-nätverk (VNet-inmatning). Du kan sedan konfigurera IP-brandväggsregler i Azure Synpase för att tillåta anslutningar från dina undernät till ditt Synapse-konto. Se Azure Synapse Analytics IP-brandväggsregler.
Konfigurera anslutning från Azure Databricks till Synapse med OAuth 2.0 med tjänstens huvudnamn
Du kan autentisera dig mot Azure Synapse Analytics med hjälp av ett tjänstehuvudnamn med åtkomst till det underliggande lagringskontot. För mer information om hur du använder serviceanvändaruppgifter för att få åtkomst till ett Azure Storage-konto, se Ansluta till Azure Data Lake Storage och Blob Storage. Du måste ange enableServicePrincipalAuth alternativet till true i anslutningskonfigurationen Azure Databricks Synapse-anslutningsalternativreferensen för att göra det möjligt för anslutningen att autentisera med ett tjänstehuvudnamn.
Du kan också använda ett annat huvudnamn för tjänsten för Azure Synapse Analytics-anslutningen. I följande exempel konfigureras autentiseringsuppgifter för tjänsthuvudnamn för lagringskontot och valfria autentiseringsuppgifter för tjänsthuvudnamn för 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>")
Sparlägen som stöds för batchskrivningar
Azure Synapse-anslutningsappen stöder ErrorIfExists, Ignore, Append, och Overwrite spara-lägen där standardläget är ErrorIfExists. Mer information om de sparlägen som stöds i Apache Spark finns i Spark SQL-dokumentationen om spara lägen.
Referens för anslutningsalternativ i Azure Databricks Synapse
De OPTIONS som anges i Spark SQL har stöd för följande inställningar:
| Parameter | Krävs | Förinställning | Noteringar | 
|---|---|---|---|
| dbTable | Ja, såvida inte queryhar angetts | Ingen standardinställning | Tabellen som ska skapas eller läsas från i Azure Synapse. Den här parametern krävs när du sparar data tillbaka till Azure Synapse. Du kan också använda {SCHEMA NAME}.{TABLE NAME}för att komma åt en tabell i ett visst schema. Om schemanamnet inte anges används standardschemat som är associerat med JDBC-användaren.Den tidigare stödda varianten dbtableär inaktuell och kommer att ignoreras i framtida versioner. Använd namnet "camelCase" i stället. | 
| query | Ja, såvida inte dbTablehar angetts | Ingen standardinställning | Förfrågan som ska läsas i Azure Synapse. För tabeller som refereras i frågan kan du också använda {SCHEMA NAME}.{TABLE NAME}för att komma åt en tabell i ett visst schema. Om schemanamnet inte anges används standardschemat som är associerat med JDBC-användaren. | 
| user | Nej | Ingen standardinställning | Användarnamnet för Azure Synapse. Måste användas tillsammans med passwordalternativet . Kan bara användas om användaren och lösenordet inte skickas i URL:en. Om du skickar båda resulterar det i ett fel. | 
| password | Nej | Ingen standardinställning | Azure Synapse-lösenordet. Måste användas tillsammans med useralternativet . Kan bara användas om användaren och lösenordet inte skickas i URL:en. Om du skickar båda resulterar det i ett fel. | 
| url | Ja | Ingen standardinställning | En JDBC-URL med sqlserverinställd som underprotokol. Vi rekommenderar att du använder anslutningssträng som tillhandahålls av Azure Portal. Vi rekommenderar att du ställer inencrypt=trueeftersom det aktiverar SSL-kryptering av JDBC-anslutningen. Omuserochpasswordanges separat behöver du inte inkludera dem i URL:en. | 
| jdbcDriver | Nej | Bestäms av JDBC-URL:ens underprotokol | Klassnamnet på den JDBC-drivrutin som ska användas. Den här klassen måste finnas på klassökvägen. I de flesta fall bör det inte vara nödvändigt att ange det här alternativet, eftersom lämpligt drivrutinsklassnamn automatiskt bör fastställas av JDBC-URL:ens underprotokol. Den tidigare stödda varianten jdbc_driverär inaktuell och kommer att ignoreras i framtida versioner. Använd namnet "camelCase" i stället. | 
| tempDir | Ja | Ingen standardinställning | En abfssURI. Vi rekommenderar att du använder en dedikerad Blob Storage-container för Azure Synapse.Den tidigare stödda varianten tempdirär inaktuell och kommer att ignoreras i framtida versioner. Använd namnet "camelCase" i stället.Du kan inte använda en extern plats som definierats i Unity Catalog som en tempDirplats. | 
| tempCompression | Nej | SNAPPY | Komprimeringsalgoritmen som ska användas för att koda/avkoda temporärt av både Spark och Azure Synapse. För närvarande stöds värden: UNCOMPRESSED,SNAPPYochGZIP. | 
| forwardSparkAzureStorageCredentials | Nej | falskt | Om trueidentifierar biblioteket automatiskt autentiseringsuppgifterna för lagringskontots åtkomstnyckel som Spark använder för att ansluta till Blob Storage-containern och vidarebefordrar dessa autentiseringsuppgifter till Azure Synapse via JDBC. Dessa autentiseringsuppgifter skickas som en del av JDBC-frågan. Därför rekommenderar vi starkt att du aktiverar SSL-kryptering för JDBC-anslutningen när du använder det här alternativet.När du konfigurerar lagringsautentisering måste du ange exakt en av useAzureMSIochforwardSparkAzureStorageCredentialstilltrue. Du kan också ställa inenableServicePrincipalAuthtilltrueoch använda tjänstens huvudnamn för både JDBC och lagringsautentisering. AlternativetforwardSparkAzureStorageCredentialsstöder inte autentisering till lagring med antingen en hanterad tjänstidentitet eller tjänstens huvudnamn. Endast åtkomstnyckel för lagringskonto stöds.Den tidigare stödda varianten forward_spark_azure_storage_credentialsär inaktuell och kommer att ignoreras i framtida versioner. Använd namnet "camelCase" i stället. | 
| useAzureMSI | Nej | falskt | Om trueanger biblioteketIDENTITY = 'Managed Service Identity'och ingenSECRETför de databasens autentiseringsuppgifter som skapas.När du konfigurerar lagringsautentisering måste du ange exakt en av useAzureMSIochforwardSparkAzureStorageCredentialstilltrue. Du kan också ställa inenableServicePrincipalAuthtilltrueoch använda tjänstens huvudnamn för både JDBC och lagringsautentisering. | 
| enableServicePrincipalAuth | Nej | falskt | Om true, kommer biblioteket att använda de angivna Service Principal-autentiseringsuppgifterna för att ansluta till Azure Storage-kontot och Azure Synapse Analytics via JDBC.Om antingen forward_spark_azure_storage_credentialselleruseAzureMSIär inställt påtrue, skulle det alternativet ha företräde framför tjänstens huvudnamn i lagringsautentisering. | 
| tableOptions | Nej | CLUSTERED COLUMNSTORE INDEX,DISTRIBUTION = ROUND_ROBIN | En sträng som används för att ange tabellalternativ när du skapar Azure Synapse-tabellen som anges via dbTable. Den här strängen skickas bokstavligen tillWITH-klausulen iCREATE TABLE-SQL-instruktionen som utfärdas mot Azure Synapse.Den tidigare stödda varianten table_optionsär inaktuell och kommer att ignoreras i framtida versioner. Använd namnet "camelCase" i stället. | 
| preActions | Nej | Inget standardvärde (tom sträng) | En ;avgränsad lista över SQL-kommandon som ska köras i Azure Synapse innan data skrivs till Azure Synapse-instansen. Dessa SQL-kommandon måste vara giltiga kommandon som accepteras av Azure Synapse.Om något av dessa kommandon misslyckas behandlas det som ett fel och skrivåtgärden körs inte. | 
| postActions | Nej | Inget standardvärde (tom sträng) | En ;avgränsad lista över SQL-kommandon som ska köras i Azure Synapse efter att anslutningsappen har skrivit data till Azure Synapse-instansen. Dessa SQL-kommandon måste vara giltiga kommandon som accepteras av Azure Synapse.Om något av dessa kommandon misslyckas behandlas det som ett fel och du får ett undantag när data har skrivits till Azure Synapse-instansen. | 
| maxStrLength | Nej | 256 | StringTypei Spark mappas tillNVARCHAR(maxStrLength)typen i Azure Synapse. Du kan användamaxStrLengthför att ange stränglängden för allaNVARCHAR(maxStrLength)typkolumner som finns i tabellen med namnetdbTablei Azure Synapse.Den tidigare stödda varianten maxstrlengthär inaktuell och kommer att ignoreras i framtida versioner. Använd namnet "camelCase" i stället. | 
| applicationName | Nej | Databricks-User-Query | Taggen för anslutningen för varje fråga. Om det inte anges eller om värdet är en tom sträng läggs standardvärdet för taggen till JDBC-URL:en. Standardvärdet hindrar Azure DB-övervakningsverktyget från att skapa falska SQL-inmatningsaviseringar mot frågor. | 
| maxbinlength | Nej | Ingen standardinställning | Kontrollera längden på BinaryTypekolumner. Den här parametern översätts somVARBINARY(maxbinlength). | 
| identityInsert | Nej | falskt | Att ställa in trueaktiverarIDENTITY_INSERT-läge, vilket infogar ett värde som tillhandahålls av DataFrame i Azure Synapse-tabellens identitetskolumn.Se Exempel på infogning av värden i en identitetskolumn. | 
| externalDataSource | Nej | Ingen standardinställning | En fördefinierad extern datakälla för att läsa data från Azure Synapse. En extern datakälla kan bara användas med PolyBase och tar bort behörighetskravet CONTROL eftersom anslutningsappen inte behöver skapa en begränsad autentiseringsuppgift och en extern datakälla för att läsa in data. Till exempel användning och listan över behörigheter som krävs när du använder en extern datakälla finns i Nödvändiga Azure Synapse-behörigheter för PolyBase med alternativet extern datakälla. | 
| maxErrors | Nej | 0 | Det maximala antalet rader som kan avvisas under läsningar och skrivningar innan inläsningen avbryts. De avvisade raderna ignoreras. Om två av tio poster till exempel har fel bearbetas endast åtta poster. Se REJECT_VALUE-dokumentationen i CREATE EXTERNAL TABLE och MAXERRORS-dokumentationen i COPY. | 
| inferTimestampNTZType | Nej | falskt | Om truetolkas värden av typen Azure SynapseTIMESTAMPsomTimestampNTZType(tidsstämpel utan tidszon) under läsningar. Annars tolkas alla tidsstämplar somTimestampTypeoavsett typ i den underliggande Azure Synapse-tabellen. | 
Anmärkning
- 
              tableOptions,preActions,postActionsochmaxStrLengthär endast relevanta när du skriver data från Azure Databricks till en ny tabell i Azure Synapse.
- Även om alla alternativnamn för datakällor är skiftlägesokänsliga rekommenderar vi att du anger dem i "camel case" för tydlighet.
Skicka frågor till Azure Synapse
Azure Synapse-kopplaren implementerar en uppsättning optimeringsregler för att flytta ner följande operatorer till Azure Synapse.
- Filter
- Project
- Limit
Operatorerna Project och Filter stöder följande uttryck:
- De flesta booleska logikoperatorer
- Jämförelser
- Grundläggande aritmetiska åtgärder
- Omvandlingar av numeriska och strängvärden
För operatorn Limit stöds pushdown endast när ingen ordning har angetts. Till exempel:
              SELECT TOP(10) * FROM table, men inte SELECT TOP(10) * FROM table ORDER BY col.
Anmärkning
Azure Synapse-anslutningen skickar inte ner uttryck som opererar på strängar, datum eller tidsstämplar.
Query pushdown byggd med Azure Synapse-kopplingen är aktiverad som standard. Du kan inaktivera det genom att ange spark.databricks.sqldw.pushdown till false.
Tillfällig datahantering
Azure Synapse-anslutningsappen tar inte bort de temporära filer som skapas i Azure Storage-containern. Databricks rekommenderar att du regelbundet tar bort temporära filer under den angivna tempDir platsen.
För att underlätta datarensning lagrar Azure Synapse-anslutningsappen inte datafiler direkt under tempDir, utan skapar i stället en underkatalog för formuläret: <tempDir>/<yyyy-MM-dd>/<HH-mm-ss-SSS>/<randomUUID>/. Du kan konfigurera periodiska jobb (med hjälp av funktionen Lakeflow-jobb eller på annat sätt) för att rekursivt ta bort alla underkataloger som är äldre än ett visst tröskelvärde (till exempel 2 dagar), med antagandet att det inte kan finnas Spark-jobb som körs längre än det tröskelvärdet.
Ett enklare alternativ är att regelbundet släppa hela containern och skapa en ny med samma namn. Detta kräver att du använder en dedikerad container för tillfälliga data som produceras av Azure Synapse-anslutningsappen och att du kan hitta ett tidsfönster där du kan garantera att inga frågor som rör anslutningsappen körs.
Tillfällig objekthantering
Azure Synapse-anslutningsappen automatiserar dataöverföring mellan ett Azure Databricks-kluster och en Azure Synapse-instans. För att läsa data från en Azure Synapse-tabell eller fråga eller skriva data till en Azure Synapse-tabell skapar Azure Synapse-anslutningsappen tillfälliga objekt, inklusive DATABASE SCOPED CREDENTIAL, EXTERNAL DATA SOURCEEXTERNAL FILE FORMAToch EXTERNAL TABLE bakom kulisserna. Dessa objekt lever endast under hela varaktigheten för motsvarande Spark-jobb och tas bort automatiskt.
När ett kluster kör en fråga med hjälp av Azure Synapse-anslutningsappen, om Spark-drivrutinsprocessen kraschar eller startas om kraftfullt, eller om klustret avslutas eller startas om, kanske inte temporära objekt tas bort. För att underlätta identifiering och manuell borttagning av dessa objekt prefixar Azure Synapse-anslutningsappen namnen på alla mellanliggande temporära objekt som skapats i Azure Synapse-instansen med en tagg i formuläret: tmp_databricks_<yyyy_MM_dd_HH_mm_ss_SSS>_<randomUUID>_<internalObject>.
Vi rekommenderar att du regelbundet letar efter läckta objekt med hjälp av frågor som följande:
- 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_%'