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:
- 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. 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 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_%'