Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az Azure Synapse az Azure Synapse-összekötővel érhető el az Azure Databricksből, 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-tárfiók használatával az átmeneti tároláshoz.
Fontos
A régi lekérdezés-összevonási dokumentáció el lett távolítva, és valószínűleg nem kerül frissítésre. A tartalomban említett konfigurációkat a Databricks hivatalosan nem támogatja vagy teszteli. Ha a Lakehouse Federation támogatja a forrásadatbázist, a Databricks inkább ezt javasolja.
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.
Megjegyzés:
COPY
csak Azure Data Lake Storage-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.
Megjegyzés:
Használja az Azure Portal által biztosított kapcsolati sztringet, 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 keresse meg encrypt=true
a kapcsolati sztringben.
Fontos
Unity Catalog- definiált külső helyek nem támogatottak tempDir
helyként.
A Databricks a rendelkezésre álló legbiztonságosabb hitelesítési folyamatot javasolja. Az ebben a példában ismertetett hitelesítési folyamat olyan kockázatokat hordoz, amelyek más folyamatokban nem jelennek meg. Ezt a folyamatot csak akkor érdemes használni, ha más biztonságosabb folyamatok, például a felügyelt identitások nem életképesek.
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()
Piton
# 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áromféle hálózati kapcsolatot használ:
- Spark-illesztő az Azure Synapse-hoz
- Spark-fürt Azure Storage-fiókhoz
- Azure Synapse és Azure Storage-fiók közötti kapcsolat
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:
- Használja a tárfiókhoz tartozó kulcsokat, és állítsa be
forwardSparkAzureStorageCredentials
értékéttrue
értékre. Tekintse meg a Spark-tulajdonságok beállítását az Azure Storage eléréséhez szükséges Azure-hitelesítő adatok konfigurálásához. - Használja az Azure Data Lake Storage-t OAuth 2.0-hitelesítéssel, és állítsa a következőre
enableServicePrincipalAuth
true
: . Lásd: Az Azure Databricks és a Synapse közötti kapcsolat konfigurálása az OAuth 2.0 használatával és egy szolgáltatásazonosítóval. - Konfigurálja az Azure Synapse példányt úgy, hogy Felügyelt Szolgáltatás Identitással rendelkezzen, és állítsa be
useAzureMSI
értékéttrue
-re.
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 összefoglalja az COPY
-vel történő íráshoz szükséges engedélyeket.
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 VÉGREHAJTÁSA INSERT |
ADATBÁZIS TÖMEGES MŰVELETEINEK VÉGREHAJTÁSA INSERT CREATE TABLE MÓDOSÍTÁS 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ülete saját virtuális hálózatában van üzembe helyezve a „Azure Databricks üzembe helyezése a saját Azure virtuális hálózatában (VNet injection)” útmutatás szerint. 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.
Kapcsolat konfigurálása az Azure Databricks és a Synapse között OAuth 2.0-val, szolgáltatási főnévvel
Az Azure Synapse Analytics-hez szolgáltatási főszereplővel hitelesíthet, amely hozzáféréssel rendelkezik az alapul szolgáló tárfiókhoz. További információkért arról, hogyan használhatók a szolgáltatásnévvel történő hitelesítések egy Azure-tárfiókhoz való hozzáféréshez, lásd: Csatlakozás az Azure Data Lake Storage-hoz és a Blob Storage-hoz. Az enableServicePrincipalAuth
opciót true
értékre kell állítania a kapcsolat konfigurációban az Azure Databricks Synapse-összekötő beállításainak hivatkozása szerint, 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ásközpontos azonosító hitelesítő adatait konfigurálja a tárfiókhoz, valamint a Synapse opcionális szolgáltatásközpontos azonosítójának 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>")
Piton
# 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ő a ErrorIfExists
, Ignore
, Append
és Overwrite
mentési módokat támogatja, az alapértelmezett mód a ErrorIfExists
. 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 "camel case" formátum nevet. |
query |
Igen, hacsak nincs dbTable megadva |
Nincs alapértelmezett | Az Azure Synapse-ban beolvasásra kerülő lekérdezés. A lekérdezésben hivatkozott táblák esetében az adott séma tábláinak elérésére is használhatja a {SCHEMA NAME}.{TABLE NAME} -t. 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. Az password opcióval együtt kell használni. Csak akkor használható, ha a felhasználó és a jelszó nem szerepel az URL-címben. Ha mindkettőt végrehajtja, az hibát fog eredményezni. |
password |
Nem | Nincs alapértelmezett | Az Azure Synapse jelszava. Az user opcióval együtt kell használni. Csak akkor használható, ha a felhasználó és a jelszó nem szerepel az URL-címben. Ha mindkettőt végrehajtja, 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 a Azure Portal által biztosított kapcsolati karakterláncot használni. A encrypt=true beállítása erősen ajánlott, mert lehetővé teszi a JDBC-kapcsolat SSL-titkosítását. Ha a user és a password külön vannak 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útvonalon 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 "camel case" formátum 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 "camel case" formátum nevet.A Unity katalógusban definiált külső hely nem használható tempDir helyként. |
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 SNAPPY GZIP . |
forwardSparkAzureStorageCredentials |
Nem | hamis | Ha true , a könyvtár automatikusan felderíti a Tárfiók hozzáférési kulcs hitelesítő adatait, amelyeket a Spark a Blob tárolóhoz való csatlakozáskor használ, és továbbítja ezeket a hitelesítő adatokat az Azure Synapse felé 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 a useAzureMSI és forwardSparkAzureStorageCredentials közül true értékűre kell beállítania. 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 "camel case" formátum nevet. |
useAzureMSI |
Nem | hamis | Ha true , akkor a könyvtár megadja a(z) IDENTITY = 'Managed Service Identity' , és nem ad meg SECRET az adatbázis hatókörébe tartozó hitelesítő adatokhoz, amelyeket létrehoz.A tárolóhitelesítés konfigurálásakor pontosan az egyiket a useAzureMSI és forwardSparkAzureStorageCredentials közül true értékűre kell beállítania. 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 | hamis | Ha a true , a könyvtár a megadott szolgáltatási főazonosító hitelesítő adatait használja az Azure Storage-fiókhoz és az Azure Synapse Analyticshez való csatlakozáshoz JDBC-n keresztül.Amennyiben a forward_spark_azure_storage_credentials vagy a useAzureMSI be van állítva true -re, ez a beállítás elsőbbséget élvezne a storage hitelesítésnél a szolgáltatási szabályzóval szemben. |
tableOptions |
Nem |
CLUSTERED COLUMNSTORE INDEX , DISTRIBUTION = ROUND_ROBIN |
Az Azure Synapse táblakészlet létrehozásakor használt táblázatbeállításokat megadó 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 "camel case" formátum 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 az NVARCHAR(maxStrLength) típusra van leképezve az Azure Synapse-ban. A maxStrLength használatával beállíthatja a sztringhosszt az Azure Synapse-ben NVARCHAR(maxStrLength) nevű táblában szereplő összes dbTable típusú oszlophoz.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 "camel case" formátum 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 | Szabályozza a BinaryType oszlopok hosszát. Ez a paraméter a következőképpen lesz lefordítva VARBINARY(maxbinlength) : . |
identityInsert |
Nem | hamis | A true beállítása engedélyezi a IDENTITY_INSERT módot, amely egy DataFrame által megadott értéket szúr be az Azure Synapse tábla identitásoszlopába.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 a REJECT_VALUE dokumentációját a CREATE EXTERNAL TABLE-ben és a MAXERRORS dokumentációját a COPY-ben. |
inferTimestampNTZType |
Nem | hamis | Ha a(z) true Azure Synapse TIMESTAMP típusú értékeket olvasás közben TimestampNTZType (időzóna nélküli időbélyegként) értelmezik. 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 . |
Megjegyzés:
-
tableOptions
,preActions
,postActions
ésmaxStrLength
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 nem tesz különbséget a kis- és nagybetűk között, javasoljuk, hogy az egyértelműség kedvéért "camel case"-ben adja meg őket.
Lekérdezés továbbítása az Azure Synapse-ba
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 operátor
- Összehasonlítások
- Alapszintű aritmetikai műveletek
- Numerikus és karakterlánc típuskonverziók
Az Limit
operátor esetében a leküldés csak akkor van támogatott, ha nincs megadva sorrend. Például:
SELECT TOP(10) * FROM table
, de nem SELECT TOP(10) * FROM table ORDER BY col
.
Megjegyzés:
Az Azure Synapse-összekötő nem küld le karakterláncokon, 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, ha a spark.databricks.sqldw.pushdown
értékét false
-re állítja be.
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 (a Lakeflow-feladatok funkció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 küszöbértéknél hosszabb Spark-feladatok nem futnak.
Egyszerűbb megoldás, ha rendszeresen törli 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 FORMAT
EXTERNAL 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 az Azure Synapse csatlakozóval futtat lekérdezést, és ha a Spark-vezérlőfolyamat összeomlik vagy erőteljesen újraindul, vagy ha a fürt erőteljesen leáll vagy újraindul, előfordulhat, hogy az ideiglenes objektumok nem kerülnek eltávolításra. Az objektumok azonosításának és manuális törlésének megkönnyítése érdekében az Azure Synapse-összekötő az összes köztes ideiglenes objektum nevét az Azure Synapse-példányban egy tmp_databricks_<yyyy_MM_dd_HH_mm_ss_SSS>_<randomUUID>_<internalObject>
formátumú címkével látja el.
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_%'