Megosztás a következőn keresztül:


Adatlekérdezés az Azure Synapse Analyticsben

Az Azure Synapse-hez az Azure Synapse-összekötővel férhet hozzá, amely az COPY Azure Synapse-ban található utasítást használja nagy mennyiségű adat hatékony átviteléhez egy Azure Databricks-fürt és egy Azure Synapse-példány között egy Azure Data Lake Storage Gen2-tárfiók használatával az átmeneti tároláshoz.

Fontos

A cikkben ismertetett konfigurációk kísérleti jellegűek. A kísérleti funkciókat a Databricks jelenleg is biztosítja, és a Databricks nem támogatja az ügyfél technikai támogatásával. A lekérdezések összevonásának teljes körű támogatásához inkább a Lakehouse Federationt kell használnia, amely lehetővé teszi az Azure Databricks-felhasználók számára, hogy kihasználhassák a Unity Catalog szintaxisát és adatszabályozási eszközeit.

Az Azure Synapse Analytics egy felhőalapú nagyvállalati adattárház, amely nagymértékben párhuzamos feldolgozást (MPP) használva gyorsan futtat összetett lekérdezéseket petabájtnyi adat között.

Fontos

Ez az összekötő csak dedikált Synapse-készletpéldányokhoz használható, és nem kompatibilis más Synapse-összetevőkkel.

Feljegyzés

COPY csak az Azure Data Lake Storage Gen2-példányokon érhető el. Ha a Polybase használatával kapcsolatos részletekre kíváncsi, olvassa el az Azure Databricks és az Azure Synapse csatlakoztatása a PolyBase-hez (örökölt) című témakört.

A Synapse példaszintaxisa

A Synapse lekérdezése a Scalában, a Pythonban, az SQL-ben és az R-ben is elvégezhető. Az alábbi példakódok tárfiókkulcsokat használnak, és továbbítják a tárolási hitelesítő adatokat az Azure Databricksből a Synapse-ba.

Feljegyzés

Használja az Azure Portal által biztosított kapcsolati sztring, amely lehetővé teszi a Secure Sockets Layer (SSL) titkosítást a Spark-illesztőprogram és az Azure Synapse-példány között a JDBC-kapcsolaton keresztül küldött összes adathoz. Az SSL-titkosítás engedélyezésének ellenőrzéséhez keressen encrypt=true rá a kapcsolati sztring.

Fontos

A Unity Katalógusban definiált külső helyek nem támogatottak helyként tempDir .

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>")

Hogyan működik az Azure Databricks és a Synapse közötti hitelesítés?

Az Azure Synapse-összekötő három típusú hálózati kapcsolatot használ:

  • Spark-illesztő–Azure Synapse
  • Spark-fürt az Azure Storage-fiókba
  • Azure Synapse–Azure Storage-fiók

Az Azure Storage-hoz való hozzáférés konfigurálása

Az Azure Databricksnek és a Synapse-nek is kiemelt hozzáférésre van szüksége egy Azure Storage-fiókhoz, amelyet ideiglenes adattároláshoz kell használni.

Az Azure Synapse nem támogatja az SAS használatát a tárfiók-hozzáféréshez. Mindkét szolgáltatáshoz az alábbi műveletek egyikével konfigurálhatja a hozzáférést:

Szükséges Azure Synapse-engedélyek

Mivel a háttérben használja COPY , az Azure Synapse-összekötő használatához a JDBC-kapcsolat felhasználójának engedélyt kell adnia a következő parancsok futtatására a csatlakoztatott Azure Synapse-példányban:

Ha a céltábla nem létezik az Azure Synapse-ban, a fenti parancson kívül a következő parancs futtatásához is engedélyre van szükség:

Az alábbi táblázat az íráshoz szükséges engedélyeket foglalja össze a következővel COPY:

Engedélyek (beszúrás meglévő táblába) Engedélyek (beszúrás új táblába)
ADATBÁZIS TÖMEGES MŰVELETEINEK ADMINISZTRÁLÁSA

INSERT
ADATBÁZIS TÖMEGES MŰVELETEINEK ADMINISZTRÁLÁSA

INSERT

CREATE TABLE

ALTER ON SCHEMA :: dbo

Hálózati konfigurációk

Ha tűzfalat konfigurál az Azure Synapse-en, hálózati beállításokat kell konfigurálnia, hogy az Azure Databricks elérhesse az Azure Synapse-t. Először győződjön meg arról, hogy az Azure Databricks-munkaterület a saját virtuális hálózatában van üzembe helyezve az Azure Databricks Üzembe helyezése az Azure-beli virtuális hálózaton (VNet-injektálás) után. Ezután konfigurálhatja az IP-tűzfalszabályokat az Azure Synpase-ben, hogy engedélyezze az alhálózatok és a Synapse-fiók közötti kapcsolatokat. Lásd az Azure Synapse Analytics IP-tűzfalszabályait.

Az Azure Databricks és a Synapse közötti kapcsolat konfigurálása az OAuth 2.0-val szolgáltatásnévvel

Az Azure Synapse Analytics szolgáltatásnévvel hitelesíthető az alapul szolgáló tárfiókhoz való hozzáféréssel. Az Azure-tárolófiókhoz való hozzáféréshez szükséges alkalmazáspéldányos hitelesítő adatok használatával kapcsolatos további információkért lásd: Csatlakozás az Azure Data Lake Storage Gen2 és Blob Storage tárolóhoz. A kapcsolatkonfigurációban az enableServicePrincipalAuth Azure Databricks Synapse-összekötő beállításainak hivatkozására kell beállítania a beállításttrue, hogy lehetővé tegye az összekötő számára a szolgáltatásnévvel való hitelesítést.

Az Azure Synapse Analytics-kapcsolathoz szükség esetén másik szolgáltatásnevet is használhat. Az alábbi példa a szolgáltatásnév hitelesítő adatait konfigurálja a tárfiókhoz, valamint a Synapse opcionális szolgáltatásnév-hitelesítő adatait:

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>")

Kötegelt írások támogatott mentési módjai

Az Azure Synapse-összekötő az alapértelmezett móddal támogatja ErrorIfExistsa , Ignoreés AppendOverwrite a mentési módokatErrorIfExists. Az Apache Spark támogatott mentési módjaival kapcsolatos további információkért tekintse meg a Spark SQL mentési módokat ismertető dokumentációját.

Az Azure Databricks Synapse-összekötő beállításainak referenciája

A OPTIONS Spark SQL-ben megadott beállítások a következő beállításokat támogatják:

Paraméter Kötelező Alapértelmezett Jegyzetek
dbTable Igen, hacsak nincs query megadva Nincs alapértelmezett Az Azure Synapse-ban létrehozni vagy olvasni kívánt táblázat. Erre a paraméterre akkor van szükség, ha adatokat ment vissza az Azure Synapse-ba.

Egy adott sémában lévő táblázatot is {SCHEMA NAME}.{TABLE NAME} elérheti. Ha nincs megadva sémanév, a rendszer a JDBC-felhasználóhoz társított alapértelmezett sémát használja.

A korábban támogatott dbtable változat elavult, és a jövőbeni kiadásokban figyelmen kívül lesz hagyva. Használja inkább a "teve eset" nevet.
query Igen, hacsak nincs dbTable megadva Nincs alapértelmezett Az Azure Synapse-ban beolvasandó lekérdezés.

A lekérdezésben hivatkozott táblák esetében az adott sémában lévő táblákhoz is {SCHEMA NAME}.{TABLE NAME} hozzáférhet. Ha nincs megadva sémanév, a rendszer a JDBC-felhasználóhoz társított alapértelmezett sémát használja.
user Nem Nincs alapértelmezett Az Azure Synapse felhasználóneve. A beállítással együtt password kell használni a tandemben. Csak akkor használható, ha a felhasználó és a jelszó nem szerepel az URL-címben. Ha mindkettőt átadja, az hibát fog eredményezni.
password Nem Nincs alapértelmezett Az Azure Synapse jelszava. A beállítással együtt user kell használni a tandemben. Csak akkor használható, ha a felhasználó és a jelszó nem szerepel az URL-címben. Ha mindkettőt átadja, az hibát fog eredményezni.
url Igen Nincs alapértelmezett Egy JDBC URL-cím, amely sqlserver alprotocolként van beállítva. Ajánlott az Azure Portal által biztosított kapcsolati sztring használni. Beállítás
encrypt=true erősen ajánlott, mert lehetővé teszi a JDBC-kapcsolat SSL-titkosítását. Ha user külön password van beállítva, akkor nem kell őket belefoglalnia az URL-címbe.
jdbcDriver Nem A JDBC URL-cím alprotocolja határozza meg A használni kívánt JDBC-illesztőprogram osztályneve. Ennek az osztálynak az osztályúton kell lennie. A legtöbb esetben nem szükséges megadni ezt a beállítást, mivel a JDBC URL-cím alprotocoljának automatikusan meg kell határoznia a megfelelő illesztőprogram-osztálynevet.

A korábban támogatott jdbc_driver változat elavult, és a jövőbeni kiadásokban figyelmen kívül lesz hagyva. Használja inkább a "teve eset" nevet.
tempDir Igen Nincs alapértelmezett Egy abfss URI. Javasoljuk, hogy egy dedikált Blob Storage-tárolót használjon az Azure Synapse-hoz.

A korábban támogatott tempdir változat elavult, és a jövőbeni kiadásokban figyelmen kívül lesz hagyva. Használja inkább a "teve eset" nevet.

A Unity Katalógusban meghatározott külső hely nem használható helykénttempDir.
tempCompression Nem SNAPPY A Spark és az Azure Synapse által ideiglenesen kódolandó/dekódolandó tömörítési algoritmus. A jelenleg támogatott értékek a következők: UNCOMPRESSEDés GZIPSNAPPY .
forwardSparkAzureStorageCredentials Nem false Ha truea tár automatikusan felderíti a Tárfiók hozzáférési kulcsának hitelesítő adatait, amelyeket a Spark használ a Blob Storage-tárolóhoz való csatlakozáshoz, és továbbítja ezeket a hitelesítő adatokat az Azure Synapse-nak a JDBC-n keresztül. Ezek a hitelesítő adatok a JDBC-lekérdezés részeként lesznek elküldve. Ezért erősen ajánlott engedélyezni a JDBC-kapcsolat SSL-titkosítását, amikor ezt a lehetőséget használja.

A tárolóhitelesítés konfigurálásakor pontosan az egyiket kell beállítaniauseAzureMSI.forwardSparkAzureStorageCredentials true Másik lehetőségként beállíthatja enableServicePrincipalAuth true és használhatja a szolgáltatásnevet a JDBC és a tárhitelesítés esetében is. Ez a forwardSparkAzureStorageCredentials beállítás nem támogatja a felügyelt szolgáltatásadentitás vagy szolgáltatásnév használatával történő tárolás hitelesítését. Csak a tárfiók hozzáférési kulcsa támogatott.

A korábban támogatott forward_spark_azure_storage_credentials változat elavult, és a jövőbeni kiadásokban figyelmen kívül lesz hagyva. Használja inkább a "teve eset" nevet.
useAzureMSI Nem false Ha true, akkor a kódtár megadja IDENTITY = 'Managed Service Identity' az adatbázis hatókörébe tartozó hitelesítő adatokat, és nemet SECRET .

A tárolóhitelesítés konfigurálásakor pontosan az egyiket kell beállítaniauseAzureMSI.forwardSparkAzureStorageCredentials true Másik lehetőségként beállíthatja enableServicePrincipalAuth true és használhatja a szolgáltatásnevet a JDBC és a tárhitelesítés esetében is.
enableServicePrincipalAuth Nem false Ha truea kódtár a megadott szolgáltatásnév hitelesítő adataival csatlakozik az Azure Storage-fiókhoz és az Azure Synapse Analyticshez JDBC-n keresztül.

Ha vagy be forward_spark_azure_storage_credentials useAzureMSI van állítva true, akkor ez a beállítás elsőbbséget élvez a szolgáltatásnévvel szemben a tárhitelesítésben.
tableOptions Nem CLUSTERED COLUMNSTORE INDEX, DISTRIBUTION = ROUND_ROBIN Az Azure Synapse táblakészletének dbTablelétrehozásakor a táblázatbeállítások megadására szolgáló sztring. Ezt a sztringet a rendszer szó szerint átadja az WITH CREATE TABLE Azure Synapse-nek kiadott SQL-utasítás záradékának.

A korábban támogatott table_options változat elavult, és a jövőbeni kiadásokban figyelmen kívül lesz hagyva. Használja inkább a "teve eset" nevet.
preActions Nem Nincs alapértelmezett (üres sztring) Az ; Azure Synapse-ban végrehajtandó SQL-parancsok külön listája, mielőtt adatokat ír az Azure Synapse-példányba. Ezeknek az SQL-parancsoknak az Azure Synapse által elfogadott érvényes parancsoknak kell lenniük.

Ha a parancsok bármelyike sikertelen, a rendszer hibaként kezeli, és az írási műveletet nem hajtja végre.
postActions Nem Nincs alapértelmezett (üres sztring) Az ; Azure Synapse-ban végrehajtandó SQL-parancsok külön listája, miután az összekötő sikeresen írt adatokat az Azure Synapse-példányba. Ezeknek az SQL-parancsoknak az Azure Synapse által elfogadott érvényes parancsoknak kell lenniük.

Ha a parancsok bármelyike sikertelen, a rendszer hibaként kezeli azokat, és kivételt fog kapni, miután az adatok sikeresen meg lettek írva az Azure Synapse-példányba.
maxStrLength Nem 256 StringType a Sparkban a rendszer az NVARCHAR(maxStrLength) Azure Synapse típusára van leképezve. A maxStrLength karakterlánc hosszát a névvel ellátott táblában lévő összes NVARCHAR(maxStrLength) típusoszlophoz beállíthatja
dbTable az Azure Synapse-ban.

A korábban támogatott maxstrlength változat elavult, és a jövőbeni kiadásokban figyelmen kívül lesz hagyva. Használja inkább a "teve eset" nevet.
applicationName Nem Databricks-User-Query A kapcsolat címkéje az egyes lekérdezésekhez. Ha nincs megadva, vagy az érték egy üres sztring, a címke alapértelmezett értéke hozzáadódik a JDBC URL-címéhez. Az alapértelmezett érték megakadályozza, hogy az Azure DB Monitorozási eszköz hamis SQL-injektálási riasztásokat gyűjtsön a lekérdezések ellen.
maxbinlength Nem Nincs alapértelmezett Az oszlopok hosszának szabályozása BinaryType . Ez a paraméter a következőképpen lesz lefordítva VARBINARY(maxbinlength): .
identityInsert Nem false A mód engedélyezése IDENTITY_INSERT beállítástrue, amely beszúr egy DataFrame által megadott értéket az Azure Synapse tábla identitásoszlopában.

Lásd: Értékek explicit beszúrása identitásoszlopba.
externalDataSource Nem Nincs alapértelmezett Előre kiépített külső adatforrás, amely adatokat olvas be az Azure Synapse-ból. Külső adatforrás csak a PolyBase-lel használható, és eltávolítja a CONTROL engedélykövetelményt, mivel az összekötőnek nem kell hatókörön belüli hitelesítő adatokat és külső adatforrást létrehoznia az adatok betöltéséhez.

Például a külső adatforrás használatakor szükséges engedélyek listája: A PolyBase-hez szükséges Azure Synapse-engedélyek a külső adatforrás beállításával.
maxErrors Nem 0 Az olvasások és írások során elutasítható sorok maximális száma a betöltési művelet megszakítása előtt. Az elutasított sorok figyelmen kívül lesznek hagyva. Ha például tíz rekordból kettő hibás, a rendszer csak nyolc rekordot dolgoz fel.

Tekintse meg REJECT_VALUE dokumentációt a CREATE EXTERNAL TABLE és a MAXERRORS dokumentációban a COPY alkalmazásban.
inferTimestampNTZType Nem false Ha trueaz Azure Synapse TIMESTAMP típusú értékek olvasás közben (időzóna nélküli időbélyegként) vannak értelmezve TimestampNTZType . Ellenkező esetben a rendszer az összes időbélyeget a mögöttes Azure Synapse-tábla típusától függetlenül értelmezi TimestampType .

Feljegyzés

  • tableOptions, preActions, postActionsés maxStrLength csak akkor releváns, ha adatokat ír az Azure Databricksből egy új táblába az Azure Synapse-ban.
  • Annak ellenére, hogy minden adatforrás-beállításnév megkülönbözteti a kis- és nagybetűket, javasoljuk, hogy az egyértelműség kedvéért "tevees esetben" adja meg őket.

Lekérdezésleküldés az Azure Synapse-be

Az Azure Synapse-összekötő optimalizálási szabályokat implementál a következő operátorok Azure Synapse-ba való leküldéséhez:

  • Filter
  • Project
  • Limit

Az Project és Filter az operátorok a következő kifejezéseket támogatják:

  • A legtöbb logikai logikai operátor
  • Összehasonlítások
  • Alapszintű aritmetikai műveletek
  • Numerikus és sztringes leadások

Az operátor esetében a Limit leküldés csak akkor támogatott, ha nincs megadva rendelés. Példa:

SELECT TOP(10) * FROM table, de nem SELECT TOP(10) * FROM table ORDER BY col.

Feljegyzés

Az Azure Synapse-összekötő nem küld le sztringeken, dátumokon vagy időbélyegeken működő kifejezéseket.

Az Azure Synapse-összekötővel létrehozott lekérdezésleküldés alapértelmezés szerint engedélyezve van. Letilthatja a következő beállítással spark.databricks.sqldw.pushdown false: .

Ideiglenes adatkezelés

Az Azure Synapse-összekötő nem törli az Azure Storage-tárolóban létrehozott ideiglenes fájlokat. A Databricks azt javasolja, hogy rendszeresen törölje az ideiglenes fájlokat a felhasználó által megadott tempDir helyen.

Az adattisztítás megkönnyítése érdekében az Azure Synapse-összekötő nem közvetlenül az alatt tárolja az adatfájlokat tempDir, hanem létrehoz egy alkönyvtárat az űrlapból: <tempDir>/<yyyy-MM-dd>/<HH-mm-ss-SSS>/<randomUUID>/. Rendszeres feladatokat állíthat be (az Azure Databricks-feladatok funkciójával vagy más módon) az adott küszöbértéknél (például 2 napnál) régebbi alkönyvtárak rekurzív törléséhez, azzal a feltételezéssel, hogy a Spark-feladatok nem futhatnak tovább ennél a küszöbértéknél.

Egyszerűbb megoldás, ha rendszeresen elveti a teljes tárolót, és létrehoz egy újat ugyanazzal a névvel. Ehhez egy dedikált tárolót kell használnia az Azure Synapse-összekötő által létrehozott ideiglenes adatokhoz, és meg kell találnia egy időablakot, amelyben garantálhatja, hogy az összekötőt érintő lekérdezések nem futnak.

Ideiglenes objektumkezelés

Az Azure Synapse-összekötő automatizálja az adatátvitelt egy Azure Databricks-fürt és egy Azure Synapse-példány között. Ha egy Azure Synapse-táblából olvas adatokat, vagy adatokat kérdez le vagy ír egy Azure Synapse-táblába, az Azure Synapse-összekötő ideiglenes objektumokat hoz létre, például DATABASE SCOPED CREDENTIAL, EXTERNAL DATA SOURCEés EXTERNAL FILE FORMATEXTERNAL TABLE a színfalak mögött. Ezek az objektumok csak a megfelelő Spark-feladat teljes időtartama alatt élnek, és automatikusan elvetik őket.

Ha egy fürt lekérdezést futtat az Azure Synapse-összekötővel, ha a Spark-illesztőprogram-folyamat összeomlik vagy erőteljesen újraindul, vagy ha a fürt erőteljesen leáll vagy újraindul, előfordulhat, hogy az ideiglenes objektumok nem lesznek elvetve. Ezeknek az objektumoknak az azonosításának és manuális törlésének megkönnyítése érdekében az Azure Synapse-összekötő előtagja az Azure Synapse-példányban létrehozott összes köztes ideiglenes objektum neve, az űrlap címkéjével: tmp_databricks_<yyyy_MM_dd_HH_mm_ss_SSS>_<randomUUID>_<internalObject>.

Javasoljuk, hogy rendszeresen keressen kiszivárogtatott objektumokat a következő lekérdezésekkel:

  • 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_%'