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.
Feljegyzés
Az Azure Synapse-beli vagy az Azure Data Warehouse-adatok lekérdezéseinek kezeléséhez a Lakehouse Federationt érdemes előnyben részesíteni. Lásd : Mi az a Lakehouse Federation.
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, tekintse meg az Azure Databricks és az Azure Synapse PolyBase-lel való Csatlakozás (örökölt) használatát.
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:
- Használja a tárfiók fiókkulcsát és titkos kulcsát, és állítsa be
forwardSparkAzureStorageCredentials
a következőretrue
: . 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 Gen2-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-val szolgáltatásnévvel. - Konfigurálja az Azure Synapse-példányt úgy, hogy felügyeltszolgáltatás-identitással rendelkezzen, és állítsa a következőre
useAzureMSI
true
: .
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. A szolgáltatásnév hitelesítő adatainak azure-tárfiókhoz való elérésére vonatkozó további információkért lásd az Azure Data Lake Storage Gen2 és a Blob Storage Csatlakozás. 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 ErrorIfExists
a , Ignore
és Append
Overwrite
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ásencrypt=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ént tempDir . |
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 GZIP SNAPPY . |
forwardSparkAzureStorageCredentials |
Nem | false | Ha true a 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ítania useAzureMSI .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ítania useAzureMSI .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 true a 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 dbTable lé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íthatjadbTable 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 true az 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
é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 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 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 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_%'