Verbinding maken Azure Databricks en Azure Synapse met PolyBase (verouderd)

Belangrijk

Deze documentatie is buiten gebruik gesteld en wordt mogelijk niet bijgewerkt. De producten, services of technologieën die in deze inhoud worden genoemd, worden niet meer ondersteund. Zie Querygegevens in Azure Synapse Analytics.

Databricks raadt aan de standaardfunctionaliteit COPY te gebruiken met Azure Data Lake Storage Gen2 voor verbindingen met Azure Synapse. Dit artikel bevat verouderde documentatie over PolyBase en blobopslag.

Azure Synapse Analytics (voorheen SQL Data Warehouse) is een clouddatawarehouse dat gebruikmaakt van MPP (Massively Parallel Processing) om snel complexe query's uit te voeren op petabytes aan gegevens. Azure gebruiken als een belangrijk onderdeel van een big data-oplossing. Importeer big data in Azure met eenvoudige PolyBase T-SQL-query's of copy-instructies en gebruik vervolgens de kracht van MPP om krachtige analyses uit te voeren. Door te integreren en analyseren, wordt Data Warehouse de centrale bron voor het verkrijgen van zakelijke inzichten door uw bedrijf.

U hebt toegang tot Azure Synapse vanuit Azure Databricks met behulp van de Azure Synapse-connector, een gegevensbron-implementatie voor Apache Spark die gebruikmaakt van Azure Blob Storage en PolyBase of 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.

Zowel het Azure Databricks-cluster als het Azure Synapse-exemplaar heeft toegang tot een gemeenschappelijke Blob Storage-container om gegevens tussen deze twee systemen uit te wisselen. In Azure Databricks worden Apache Spark-taken geactiveerd door de Azure Synapse-connector om gegevens van en naar de Blob Storage-container te lezen en te schrijven. Aan de zijde van Azure Synapse worden bewerkingen voor het laden en lossen van gegevens die door PolyBase worden uitgevoerd, geactiveerd door de Azure Synapse-connector via JDBC. In Databricks Runtime 7.0 en hoger COPY wordt standaard gebruikt voor het laden van gegevens in Azure Synapse door de Azure Synapse-connector via JDBC.

Notitie

COPYis alleen beschikbaar op Azure Synapse Gen2-exemplaren, die betere prestaties bieden. Als uw database nog steeds Gebruikmaakt van Gen1-exemplaren, wordt u aangeraden de database te migreren naar Gen2.

De Azure Synapse-connector is geschikter voor ETL dan voor interactieve query's, omdat elke queryuitvoering grote hoeveelheden gegevens kan extraheren naar Blob Storage. Als u van plan bent om verschillende query's uit te voeren op dezelfde Azure Synapse-tabel, raden we u aan de geëxtraheerde gegevens op te slaan in een indeling zoals Parquet.

Vereisten

Een hoofdsleutel voor een Azure Synapse-database.

Verificatie

De Azure Synapse-connector maakt gebruik van drie typen netwerkverbindingen:

  • Spark-stuurprogramma voor Azure Synapse
  • Spark-stuurprogramma's en uitvoerders naar Een Azure-opslagaccount
  • Azure Synapse naar Azure Storage-account
                                 ┌─────────┐
      ┌─────────────────────────>│ STORAGE │<────────────────────────┐
      │   Storage acc key /      │ ACCOUNT │  Storage acc key /      │
      │   Managed Service ID /   └─────────┘  OAuth 2.0 /            │
      │                               │                              │
      │                               │                              │
      │                               │ Storage acc key /            │
      │                               │ OAuth 2.0 /                  │
      │                               │                              │
      v                               v                       ┌──────v────┐
┌──────────┐                      ┌──────────┐                │┌──────────┴┐
│ Synapse  │                      │  Spark   │                ││ Spark     │
│ Analytics│<────────────────────>│  Driver  │<───────────────>│ Executors │
└──────────┘  JDBC with           └──────────┘    Configured   └───────────┘
              username & password /                in Spark

In de volgende secties worden de verificatieconfiguratieopties van elke verbinding beschreven.

Spark-stuurprogramma voor Azure Synapse

Het Spark-stuurprogramma kan verbinding maken met Azure Synapse met behulp van JDBC met een gebruikersnaam en wachtwoord of OAuth 2.0 met een service-principal voor verificatie.

Gebruikersnaam en wachtwoord

U wordt aangeraden de verbindingsreeks van Azure Portal te gebruiken voor beide verificatietypen, waardoor SSL-versleuteling (Secure Sockets Layer) is ingeschakeld 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.

Als u wilt toestaan dat het Spark-stuurprogramma Azure Synapse bereikt, wordt u aangeraden Azure-services en -resources toegang te geven tot deze werkruimte in het deelvenster Netwerken onder Beveiliging van de Azure Synapse-werkruimte via Azure Portal. Met deze instelling kan communicatie vanuit alle Azure-IP-adressen en alle Azure-subnetten worden toegestaan, zodat Spark-stuurprogramma's het Azure Synapse-exemplaar kunnen bereiken.

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 verbindingsconfiguratieparametersom 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. Een voorbeeld waarmee service-principalreferenties worden 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>")

Spark-stuurprogramma's en uitvoerders naar Een Azure-opslagaccount

De Azure Storage-container fungeert als intermediair voor het opslaan van bulkgegevens bij het lezen van of schrijven naar Azure Synapse. Spark maakt verbinding met ADLS Gen2 of Blob Storage met behulp van het abfss stuurprogramma.

De volgende verificatieopties zijn beschikbaar:

In de onderstaande voorbeelden ziet u deze twee manieren met behulp van de toegangssleutelmethode voor het opslagaccount. Hetzelfde geldt voor de OAuth 2.0-configuratie.

Configuratie van notebooksessie (voorkeur)

Met deze methode wordt de toegangssleutel voor het account ingesteld in de sessieconfiguratie die is gekoppeld aan het notebook waarmee de opdracht wordt uitgevoerd. Deze configuratie heeft geen invloed op andere notebooks die aan hetzelfde cluster zijn gekoppeld. spark is het SparkSession object dat is opgegeven in het notebook.

spark.conf.set(
  "fs.azure.account.key.<your-storage-account-name>.dfs.core.windows.net",
  "<your-storage-account-access-key>")

Algemene Hadoop-configuratie

Met deze aanpak wordt de globale Hadoop-configuratie bijgewerkt die is gekoppeld aan het SparkContext object dat wordt gedeeld door alle notebooks.

Scala
sc.hadoopConfiguration.set(
  "fs.azure.account.key.<your-storage-account-name>.dfs.core.windows.net",
  "<your-storage-account-access-key>")
Python

hadoopConfiguration wordt niet weergegeven in alle versies van PySpark. Hoewel de volgende opdracht afhankelijk is van bepaalde interne Spark-functies, moet deze werken met alle PySpark-versies en is het onwaarschijnlijk dat deze in de toekomst wordt onderbroken of gewijzigd:

sc._jsc.hadoopConfiguration().set(
  "fs.azure.account.key.<your-storage-account-name>.dfs.core.windows.net",
  "<your-storage-account-access-key>")

Azure Synapse naar Azure-opslagaccount

Azure Synapse maakt ook verbinding met een opslagaccount tijdens het laden en lossen van tijdelijke gegevens.

Als u een accountsleutel en geheim voor het opslagaccount hebt ingesteld, kunt u instellen forwardSparkAzureStorageCredentialstrueop , in welk geval azure Synapse-connector automatisch de toegangssleutel voor het account detecteert die is ingesteld in de configuratie van de notebooksessie of de globale Hadoop-configuratie en de toegangssleutel voor het opslagaccount doorstuurt naar het verbonden Azure Synapse-exemplaar door een tijdelijke referentie in het bereik van een Azure-database te maken.

Als u ADLS Gen2 gebruikt met OAuth 2.0-verificatie of als uw Azure Synapse-exemplaar is geconfigureerd voor een Managed Service Identity (meestal in combinatie met een VNet + Service Endpoints-installatie), moet u deze instelling instellen useAzureMSItrueop. In dit geval wordt de connector opgegeven IDENTITY = 'Managed Service Identity' voor de referentie in het databasebereik en nee SECRET.

Streaming-ondersteuning

De Azure Synapse-connector biedt efficiënte en schaalbare structured streaming-schrijfondersteuning voor Azure Synapse die consistente gebruikerservaring biedt met batch-schrijfbewerkingen en polybase gebruikt of COPY voor grote gegevensoverdracht tussen een Azure Databricks-cluster en een Azure Synapse-exemplaar. Net als bij de batch-schrijfbewerkingen is streaming grotendeels ontworpen voor ETL, waardoor in sommige gevallen een hogere latentie wordt geboden die mogelijk niet geschikt is voor realtime gegevensverwerking.

Fouttolerantiesemantiek

Standaard biedt Azure Synapse Streaming een end-to-end garantie voor het schrijven van gegevens in een Azure Synapse-tabel door de voortgang van de query betrouwbaar bij te houden met behulp van een combinatie van controlepuntlocatie in DBFS, controlepunttabel in Azure Synapse en vergrendelingsmechanisme om ervoor te zorgen dat streaming alle soorten fouten, nieuwe pogingen en opnieuw opstarten van query's kan afhandelen. U kunt eventueel minder beperkende semantiek voor Azure Synapse Streaming selecteren door de optie in te falsestellen spark.databricks.sqldw.streaming.exactlyOnce.enabled op , in welk geval gegevensduplicatie kan optreden in het geval van onregelmatige verbindingsfouten met Azure Synapse of onverwachte query-beëindiging.

Gebruik (Batch)

U kunt deze connector gebruiken via de gegevensbron-API in Scala-, Python-, SQL- en R-notebooks.

Scala


// Otherwise, set up the Blob 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.
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


# Otherwise, set up the Blob 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.
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


-- Otherwise, set up the Blob 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.
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)

# Otherwise, set up the Blob 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>")

Gebruik (streaming)

U kunt gegevens schrijven met structured streaming in Scala- en Python-notebooks.

Scala

// Set up the Blob 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>")

// Prepare streaming source; this could be Kafka or a simple rate stream.
val df: DataFrame = spark.readStream
  .format("rate")
  .option("rowsPerSecond", "100000")
  .option("numPartitions", "16")
  .load()

// Apply some transformations to the data then use
// Structured Streaming API to continuously write the data to a table in Azure Synapse.
df.writeStream
  .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>")
  .option("checkpointLocation", "/tmp_checkpoint_location")
  .start()

Python

# Set up the Blob 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>")

# Prepare streaming source; this could be Kafka or a simple rate stream.
df = spark.readStream \
  .format("rate") \
  .option("rowsPerSecond", "100000") \
  .option("numPartitions", "16") \
  .load()

# Apply some transformations to the data then use
# Structured Streaming API to continuously write the data to a table in Azure Synapse.
df.writeStream \
  .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>") \
  .option("checkpointLocation", "/tmp_checkpoint_location") \
  .start()

Configuratie

In deze sectie wordt beschreven hoe u schrijfsemantiek configureert voor de connector, vereiste machtigingen en diverse configuratieparameters.

In deze sectie:

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.

Ondersteunde uitvoermodi voor streaming-schrijfbewerkingen

De Azure Synapse-connector ondersteunt Append en Complete uitvoermodi voor toevoeg- en aggregaties van records. Zie de handleiding Structured Streaming voor meer informatie over uitvoermodi en compatibiliteitsmatrix.

Semantiek schrijven

Notitie

COPY is beschikbaar in Databricks Runtime 7.0 en hoger.

Naast PolyBase ondersteunt de Azure Synapse-connector de COPY instructie. De COPY instructie biedt een handigere manier om gegevens in Azure Synapse te laden zonder dat u een externe tabel hoeft te maken, minder machtigingen nodig hebt om gegevens te laden en de prestaties van gegevensopname in Azure Synapse verbetert.

Standaard detecteert de connector automatisch de beste schrijf-semantiek (COPY wanneer deze is gericht op een Azure Synapse Gen2-exemplaar, anders PolyBase). U kunt ook de schrijfsemantiek opgeven met de volgende configuratie:

Scala

// Configure the write semantics for Azure Synapse connector in the notebook session conf.
spark.conf.set("spark.databricks.sqldw.writeSemantics", "<write-semantics>")

Python

# Configure the write semantics for Azure Synapse connector in the notebook session conf.
spark.conf.set("spark.databricks.sqldw.writeSemantics", "<write-semantics>")

SQL

-- Configure the write semantics for Azure Synapse connector in the notebook session conf.
SET spark.databricks.sqldw.writeSemantics=<write-semantics>;

R

# Load SparkR
library(SparkR)

# Configure the write semantics for Azure Synapse connector in the notebook session conf.
conf <- sparkR.callJMethod(sparkR.session(), "conf")
sparkR.callJMethod(conf, "set", "spark.databricks.sqldw.writeSemantics", "<write-semantics>")

waar <write-semantics> moet polybase u PolyBase gebruiken of copy de COPY instructie gebruiken.

Vereiste Azure Synapse-machtigingen voor PolyBase

Wanneer u PolyBase gebruikt, 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 vereiste voor de eerste opdracht verwacht de connector dat er al een databasehoofdsleutel bestaat voor het opgegeven Azure Synapse-exemplaar. Zo niet, dan kunt u een sleutel maken met behulp van de opdracht CREATE MASTER KEY .

Als u bovendien de Azure Synapse-tabelset wilt lezen via dbTable of tabellen waarnaar wordt verwezen query, moet de JDBC-gebruiker gemachtigd zijn voor toegang tot de benodigde Azure Synapse-tabellen. Als u gegevens wilt terugschrijven naar een Azure Synapse-tabelset dbTable, moet de JDBC-gebruiker gemachtigd zijn om naar deze Azure Synapse-tabel te schrijven.

De volgende tabel bevat een overzicht van de vereiste machtigingen voor alle bewerkingen met PolyBase:

Operation Machtigingen Machtigingen bij het gebruik van een externe gegevensbron
Batch-schrijfbewerking CONTROLE Batch-schrijfbewerkingen bekijken
Streaming-schrijfbewerking CONTROLE Streaming-schrijfbewerkingen bekijken
Read CONTROLE Zie Lezen

Vereiste Azure Synapse-machtigingen voor PolyBase met de optie externe gegevensbron

U kunt PolyBase gebruiken met een vooraf ingerichte externe gegevensbron. Zie de externalDataSource parameter in Parameters voor meer informatie.

Als u PolyBase wilt gebruiken met een vooraf ingerichte externe gegevensbron, 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 u een externe gegevensbron wilt maken, moet u eerst een referentie voor databasebereik maken. In de volgende koppelingen wordt beschreven hoe u een scoped referentie maakt voor service-principals en een externe gegevensbron voor een ABFS-locatie:

Notitie

De locatie van de externe gegevensbron moet verwijzen naar een container. De connector werkt niet als de locatie een map in een container is.

De volgende tabel bevat een overzicht van de machtigingen voor PolyBase-schrijfbewerkingen met de optie externe gegevensbron:

Operation Machtigingen (invoegen in een bestaande tabel) Machtigingen (invoegen in een nieuwe tabel)
Batch-schrijfbewerking DATABASE BULKBEWERKINGEN BEHEREN

INSERT

CREATE TABLE

EEN SCHEMA WIJZIGEN

EEN EXTERNE GEGEVENSBRON WIJZIGEN

EVENTUELE EXTERNE BESTANDSINDELINGEN WIJZIGEN
DATABASE BULKBEWERKINGEN BEHEREN

INSERT

CREATE TABLE

EEN SCHEMA WIJZIGEN

EEN EXTERNE GEGEVENSBRON WIJZIGEN

EVENTUELE EXTERNE BESTANDSINDELINGEN WIJZIGEN
Streaming-schrijfbewerking DATABASE BULKBEWERKINGEN BEHEREN

INSERT

CREATE TABLE

EEN SCHEMA WIJZIGEN

EEN EXTERNE GEGEVENSBRON WIJZIGEN

EVENTUELE EXTERNE BESTANDSINDELINGEN WIJZIGEN
DATABASE BULKBEWERKINGEN BEHEREN

INSERT

CREATE TABLE

EEN SCHEMA WIJZIGEN

EEN EXTERNE GEGEVENSBRON WIJZIGEN

EVENTUELE EXTERNE BESTANDSINDELINGEN WIJZIGEN

De volgende tabel bevat een overzicht van de machtigingen voor Leesbewerkingen van PolyBase met de optie externe gegevensbron:

Operation Machtigingen
Read CREATE TABLE

EEN SCHEMA WIJZIGEN

EEN EXTERNE GEGEVENSBRON WIJZIGEN

EVENTUELE EXTERNE BESTANDSINDELINGEN WIJZIGEN

U kunt deze connector gebruiken om te lezen via de gegevensbron-API in Scala-, Python-, SQL- en R-notebooks.

Scala
// Get some data from an Azure Synapse table.
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("externalDataSource", "<your-pre-provisioned-data-source>")
  .option("dbTable", "<your-table-name>")
  .load()
Python
# Get some data from an Azure Synapse table.
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("externalDataSource", "<your-pre-provisioned-data-source>") \
  .option("dbTable", "<your-table-name>") \
  .load()
SQL
-- Read data using SQL.
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>',
  externalDataSource '<your-pre-provisioned-data-source>'
);
R
# 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>"
   externalDataSource = "<your-pre-provisioned-data-source>")

Vereiste Azure Synapse-machtigingen voor de COPY instructie

Notitie

Beschikbaar in Databricks Runtime 7.0 en hoger.

Wanneer u de COPY instructie gebruikt, 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 voor batch- en streaming-schrijfbewerkingen met COPY:

Operation Machtigingen (invoegen in een bestaande tabel) Machtigingen (invoegen in een nieuwe tabel)
Batch-schrijfbewerking DATABASE BULKBEWERKINGEN BEHEREN

INSERT
DATABASE BULKBEWERKINGEN BEHEREN

INSERT

CREATE TABLE

ALTER ON SCHEMA :: dbo
Streaming-schrijfbewerking DATABASE BULKBEWERKINGEN BEHEREN

INSERT
DATABASE BULKBEWERKINGEN BEHEREN

INSERT

CREATE TABLE

ALTER ON SCHEMA :: dbo

Parameters

De parametertoewijzing of OPTIONS geleverd in Spark SQL ondersteunt 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.
tempFormat Nee PARQUET De indeling waarin tijdelijke bestanden moeten worden opgeslagen in het blobarchief bij het schrijven naar Azure Synapse. Standaard ingesteld op PARQUET; er zijn momenteel geen andere waarden toegestaan.
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 false Als truede bibliotheek automatisch de referenties 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.

Voor de huidige versie van de Azure Synapse-connector is (precies) een van forwardSparkAzureStorageCredentials, enableServicePrincipalAuthof useAzureMSI moet deze expliciet worden ingesteld trueop .

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.

Voor de huidige versie van de Azure Synapse-connector is (precies) een van forwardSparkAzureStorageCredentials, enableServicePrincipalAuthof useAzureMSI moet deze expliciet worden ingesteld trueop .
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.

Voor de huidige versie van de Azure Synapse-connector is (precies) een van forwardSparkAzureStorageCredentials, enableServicePrincipalAuthof useAzureMSI moet deze expliciet worden ingesteld trueop .
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.
checkpointLocation Ja Geen standaardwaarde Locatie op DBFS die door Structured Streaming wordt gebruikt om metagegevens en controlepuntgegevens te schrijven. Zie Herstellen van fouten met Controlepunten in de programmeerhandleiding voor gestructureerd streamen.
numStreamingTempDirsToKeep Nee 0 Geeft aan hoeveel (meest recente) tijdelijke mappen moeten worden bewaard voor periodieke opschoning van microbatches in streaming. Wanneer deze instelling is ingesteld 0, wordt het verwijderen van mappen onmiddellijk geactiveerd nadat de microbatch is doorgevoerd, anders wordt het aantal meest recente microbatches bewaard en wordt de rest van de mappen verwijderd. Gebruik -1 dit om periodiek opschonen uit te schakelen.
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 (PolyBase of COPY) 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.

Notitie

  • tableOptions, preActions, postActionsen maxStrLength zijn alleen relevant bij het schrijven van gegevens van Azure Databricks naar een nieuwe tabel in Azure Synapse.
  • externalDataSource is alleen relevant bij het lezen van gegevens uit Azure Synapse en het schrijven van gegevens van Azure Databricks naar een nieuwe tabel in Azure Synapse met PolyBase-semantiek. U moet geen andere typen opslagverificatie opgeven tijdens het gebruik externalDataSource , zoals forwardSparkAzureStorageCredentials of useAzureMSI.
  • checkpointLocation en numStreamingTempDirsToKeep zijn alleen relevant voor het streamen van schrijfbewerkingen 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 niet de tijdelijke bestanden die worden gemaakt in de Blob Storage-container. Daarom raden we 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 moeten daarna automatisch worden 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_%'

Beheer van streamingcontrolepuntentabellen

De Azure Synapse-connector verwijdert niet de streamingcontrolepunttabel die wordt gemaakt wanneer een nieuwe streamingquery wordt gestart. Dit gedrag is consistent met de checkpointLocation on DBFS. Daarom raden we u aan regelmatig controlepunttabellen te verwijderen op hetzelfde moment als het verwijderen van controlepuntlocaties in DBFS voor query's die in de toekomst niet meer worden uitgevoerd of waarop de locatie van het controlepunt al is verwijderd.

Standaard hebben alle controlepunttabellen de naam <prefix>_<query-id>, waarbij <prefix> een configureerbaar voorvoegsel met standaardwaarde databricks_streaming_checkpoint is en query_id een streamingquery-id is met _ verwijderde tekens. Als u alle controlepunttabellen voor verouderde of verwijderde streamingquery's wilt vinden, voert u de query uit:

SELECT * FROM sys.tables WHERE name LIKE 'databricks_streaming_checkpoint%'

U kunt het voorvoegsel configureren met de spark SQL-configuratieoptie spark.databricks.sqldw.streaming.exactlyOnce.checkpointTableNamePrefix.

Veelgestelde vragen

Er is een fout opgetreden tijdens het gebruik van de Azure Synapse-connector. Hoe kan ik zien of deze fout afkomstig is van Azure Synapse of Azure Databricks?

Om fouten op te sporen, wordt elke uitzondering die wordt gegenereerd door code die specifiek is voor de Azure Synapse-connector verpakt in een uitzondering die de SqlDWException eigenschap uitbreidt. Uitzonderingen maken ook het volgende onderscheid:

  • SqlDWConnectorException vertegenwoordigt een fout die is gegenereerd door de Azure Synapse-connector
  • SqlDWSideException vertegenwoordigt een fout die is gegenereerd door het verbonden Azure Synapse-exemplaar

Wat moet ik doen als mijn query is mislukt met de fout 'Geen toegangssleutel gevonden in de sessieconfee of de globale Hadoop-conf'?

Deze fout betekent dat Azure Synapse connector de toegangssleutel voor het opslagaccount niet kan vinden in de configuratie van de notebooksessie of globale Hadoop-configuratie voor het opslagaccount dat is opgegeven intempDir. Zie Gebruik (Batch) voor voorbeelden van het correct configureren van toegang tot het opslagaccount. Als er een Spark-tabel wordt gemaakt met behulp van de Azure Synapse-connector, moet u nog steeds de toegangsreferenties voor het opslagaccount opgeven om de Spark-tabel te kunnen lezen of schrijven.

Kan ik een Shared Access Signature (SAS) gebruiken voor toegang tot de Blob Storage-container die is opgegeven door tempDir?

Azure Synapse biedt geen ondersteuning voor het gebruik van SAS voor toegang tot Blob Storage. Daarom biedt de Azure Synapse-connector geen ondersteuning voor SAS voor toegang tot de Blob Storage-container die is opgegeven door tempDir.

Ik heb een Spark-tabel gemaakt met behulp van De Azure Synapse-connector met de dbTable optie, wat gegevens naar deze Spark-tabel geschreven en deze Spark-tabel vervolgens verwijderd. Wordt de tabel die aan de Azure Synapse-zijde is gemaakt, verwijderd?

Nee Azure Synapse wordt beschouwd als een externe gegevensbron. De Azure Synapse-tabel met de naam die is ingesteld dbTable , wordt niet verwijderd wanneer de Spark-tabel wordt verwijderd.

Waarom moet ik .option("dbTable", tableName).save() zeggen bij het schrijven van een DataFrame naar Azure Synapse, in plaats van alleen .saveAsTable(tableName)?

Dat komt omdat we het volgende onderscheid willen maken: .option("dbTable", tableName) verwijst naar de databasetabel (dat wil gezegd Azure Synapse), terwijl .saveAsTable(tableName) deze verwijst naar de Spark-tabel. U kunt zelfs de twee combineren: df.write. ... .option("dbTable", tableNameDW).saveAsTable(tableNameSpark) hiermee maakt u een tabel in Azure Synapse aangeroepen tableNameDW en een externe tabel in Spark tableNameSpark die wordt ondersteund door de Azure Synapse-tabel.

Waarschuwing

Let op het volgende verschil tussen .save() en .saveAsTable():

  • Voor df.write. ... .option("dbTable", tableNameDW).mode(writeMode).save(), writeMode werkt op de Azure Synapse-tabel, zoals verwacht.
  • Werkt voor df.write. ... .option("dbTable", tableNameDW).mode(writeMode).saveAsTable(tableNameSpark)de Spark-tabel, terwijltableNameDW deze op de achtergrond wordt overschreven als deze al bestaat in Azure Synapse. writeMode

Dit gedrag verschilt niet van schrijven naar een andere gegevensbron. Het is slechts een nadeel van de Spark DataFrameWriter-API.