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:

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 ErrorIfExistsa , Ignoreés AppendOverwrite a mentési módokatErrorIfExists. Az Apache Spark támogatott mentési módjaival kapcsolatos további információkért tekintse meg a Spark SQL mentési módokat ismertető dokumentációját.

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

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

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

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

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

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

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

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

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

A tárolóhitelesítés konfigurálásakor pontosan az egyiket kell beállítaniauseAzureMSI.forwardSparkAzureStorageCredentialstrue 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 "teve eset" nevet.
useAzureMSI Nem false Ha true, akkor a kódtár megadja IDENTITY = 'Managed Service Identity' az adatbázis hatókörébe tartozó hitelesítő adatokat, és nemet SECRET .

A tárolóhitelesítés konfigurálásakor pontosan az egyiket kell beállítaniauseAzureMSI.forwardSparkAzureStorageCredentialstrue 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 false Ha truea kódtár a megadott szolgáltatásnév hitelesítő adataival csatlakozik az Azure Storage-fiókhoz és az Azure Synapse Analyticshez JDBC-n keresztül.

Ha vagy be forward_spark_azure_storage_credentialsuseAzureMSI van állítva true, akkor ez a beállítás elsőbbséget élvez a szolgáltatásnévvel szemben a tárhitelesítésben.
tableOptions Nem CLUSTERED COLUMNSTORE INDEX, DISTRIBUTION = ROUND_ROBIN Az Azure Synapse táblakészletének dbTablelétrehozásakor a táblázatbeállítások megadására szolgáló sztring. Ezt a sztringet a rendszer szó szerint átadja az 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 "teve eset" nevet.
preActions Nem Nincs alapértelmezett (üres sztring) Az ; Azure Synapse-ban végrehajtandó SQL-parancsok külön listája, mielőtt adatokat ír az Azure Synapse-példányba. Ezeknek az SQL-parancsoknak az Azure Synapse által elfogadott érvényes parancsoknak kell lenniük.

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

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

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

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

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

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

Feljegyzés

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

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

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

  • Filter
  • Project
  • Limit

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

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

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

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

Feljegyzés

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

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

Ideiglenes adatkezelés

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

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

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

Ideiglenes objektumkezelés

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

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

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

  • SELECT * FROM sys.database_scoped_credentials WHERE name LIKE 'tmp_databricks_%'
  • SELECT * FROM sys.external_data_sources WHERE name LIKE 'tmp_databricks_%'
  • SELECT * FROM sys.external_file_formats WHERE name LIKE 'tmp_databricks_%'
  • SELECT * FROM sys.external_tables WHERE name LIKE 'tmp_databricks_%'