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


Adatlekérdezés az Azure Synapse Analyticsben

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:

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 SNAPPYGZIP .
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 enableServicePrincipalAuthtrue é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 enableServicePrincipalAuthtrue é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 WITHCREATE 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é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 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 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 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_%'