Dotazy na data ve službě Azure Synapse Analytics

K Azure Synapse můžete přistupovat z Azure Databricks pomocí konektoru Azure Synapse, který pomocí COPY příkazu v Azure Synapse efektivně přenáší velké objemy dat mezi clusterem Azure Databricks a instancí Azure Synapse pomocí účtu úložiště Azure Data Lake Storage Gen2 pro dočasnou přípravu.

Poznámka:

Možná dáváte přednost službě Lakehouse Federation pro správu dotazů na data Azure Synapse nebo Azure Data Warehouse. Podívejte se , co je Federace Lakehouse.

Azure Synapse Analytics je cloudový podnikový datový sklad, který využívá rozsáhlé paralelní zpracování (MPP) k rychlému spouštění složitých dotazů napříč petabajty dat.

Důležité

Tento konektor se používá pouze s instancemi vyhrazeného fondu Synapse a není kompatibilní s ostatními komponentami Synapse.

Poznámka:

COPY je k dispozici pouze v instancích Azure Data Lake Storage Gen2. Pokud hledáte podrobnosti o práci s PolyBase, přečtěte si informace o Připojení Azure Databricks a Azure Synapse s PolyBase (starší verze).

Příklad syntaxe pro Synapse

Synapse můžete dotazovat v jazyce Scala, Python, SQL a R. Následující příklady kódu používají klíče účtu úložiště a předávají přihlašovací údaje úložiště z Azure Databricks do Synapse.

Poznámka:

Použijte připojovací řetězec poskytovaný webem Azure Portal, který umožňuje šifrování SSL (Secure Sockets Layer) pro všechna data odesílaná mezi ovladačem Spark a instancí Azure Synapse prostřednictvím připojení JDBC. Pokud chcete ověřit, že je povolené šifrování SSL, můžete hledat encrypt=true v připojovací řetězec.

Důležité

Externí umístění definovaná v katalogu Unity nejsou podporována jako tempDir umístění.

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>")

Jak funguje ověřování mezi Azure Databricks a Synapse?

Konektor Azure Synapse používá tři typy síťových připojení:

  • Ovladač Sparku k Azure Synapse
  • Cluster Spark do účtu úložiště Azure
  • Účet Azure Synapse k Azure Storage

Konfigurace přístupu ke službě Azure Storage

Azure Databricks i Synapse potřebují privilegovaný přístup k účtu úložiště Azure, který se má použít pro dočasné úložiště dat.

Azure Synapse nepodporuje použití SAS pro přístup k účtu úložiště. Přístup pro obě služby můžete nakonfigurovat jedním z následujících způsobů:

Požadovaná oprávnění Azure Synapse

Vzhledem k tomu, že se používá COPY na pozadí, konektor Azure Synapse vyžaduje, aby měl uživatel připojení JDBC oprávnění ke spuštění následujících příkazů v připojené instanci Azure Synapse:

Pokud cílová tabulka v Azure Synapse neexistuje, vyžaduje se kromě výše uvedeného příkazu také oprávnění ke spuštění následujícího příkazu:

Následující tabulka shrnuje oprávnění požadovaná pro zápisy pomocí COPY:

Oprávnění (vložení do stávající tabulky) Oprávnění (vložení do nové tabulky)
HROMADNÉ OPERACE PRO SPRÁVU DATABÁZÍ

INSERT
HROMADNÉ OPERACE PRO SPRÁVU DATABÁZÍ

INSERT

CREATE TABLE

ALTER ON SCHEMA :: dbo

Konfigurace sítí

Pokud nakonfigurujete bránu firewall ve službě Azure Synapse, musíte nakonfigurovat nastavení sítě tak, aby služba Azure Databricks umožňovala přístup ke službě Azure Synapse. Nejprve se ujistěte, že je váš pracovní prostor Azure Databricks nasazený ve vaší vlastní virtuální síti, a to po nasazení Azure Databricks ve virtuální síti Azure (injektáž virtuální sítě). Pak můžete nakonfigurovat pravidla firewallu protokolu IP v Azure Synpase tak, aby povolovali připojení z vašich podsítí k vašemu účtu Synapse. Viz pravidla brány firewall protokolu IP služby Azure Synapse Analytics.

Konfigurace připojení z Azure Databricks k Synapse pomocí OAuth 2.0 s instančním objektem

Ve službě Azure Synapse Analytics se můžete ověřit pomocí instančního objektu s přístupem k podkladovému účtu úložiště. Další informace o použití přihlašovacích údajů instančního objektu pro přístup k účtu úložiště Azure najdete v tématu Připojení k Azure Data Lake Storage Gen2 a Blob Storage. Pokud chcete konektoru povolit ověření pomocí instančního objektu, musíte nastavit enableServicePrincipalAuth možnost v referenčním odkazu na true možnosti konektoru konfigurace připojení Azure Databricks Synapse.

Volitelně můžete pro připojení Azure Synapse Analytics použít jiný instanční objekt. Následující příklad nakonfiguruje přihlašovací údaje instančního objektu pro účet úložiště a volitelné přihlašovací údaje instančního objektu pro Synapse:

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>")

Podporované režimy ukládání pro dávkové zápisy

Konektor Azure Synapse podporuje ErrorIfExistsrežimy ukládání AppendIgnoreOverwrite s výchozím režimem ErrorIfExists. Další informace o podporovaných režimech ukládání v Apache Sparku najdete v dokumentaci Spark SQL k režimu ukládání.

Referenční informace o možnostech konektoru Synapse v Azure Databricks

Prostředí OPTIONS Spark SQL podporuje následující nastavení:

Parametr Požaduje se Výchozí Notes
dbTable Ano, pokud query není zadáno Bez výchozího nastavení Tabulka, ze které se má vytvořit nebo číst v Azure Synapse. Tento parametr se vyžaduje při ukládání dat zpět do Azure Synapse.

Můžete také použít {SCHEMA NAME}.{TABLE NAME} přístup k tabulce v daném schématu. Pokud není zadán název schématu, použije se výchozí schéma přidružené k uživateli JDBC.

Dříve podporovaná dbtable varianta je zastaralá a bude ignorována v budoucích verzích. Místo toho použijte název "camel case".
query Ano, pokud dbTable není zadáno Bez výchozího nastavení Dotaz, ze který se má číst v Azure Synapse.

U tabulek uvedených v dotazu můžete také použít {SCHEMA NAME}.{TABLE NAME} přístup k tabulce v daném schématu. Pokud není zadán název schématu, použije se výchozí schéma přidružené k uživateli JDBC.
user No Bez výchozího nastavení Uživatelské jméno Azure Synapse. Musí se používat společně s password možností. Lze použít pouze v případě, že uživatel a heslo nejsou předány v adrese URL. Předáním obou výsledků dojde k chybě.
password No Bez výchozího nastavení Heslo Azure Synapse. Musí se používat společně s user možností. Lze použít pouze v případě, že uživatel a heslo nejsou předány v adrese URL. Předáním obou výsledků dojde k chybě.
url Ano Bez výchozího nastavení Adresa URL JDBC s sqlserver nastavenou jako subprotocol. Doporučujeme použít připojovací řetězec poskytovanou webem Azure Portal. Nastavení
encrypt=true důrazně se doporučuje, protože umožňuje šifrování SSL připojení JDBC. Pokud user a password jsou nastavené samostatně, nemusíte je do adresy URL zahrnout.
jdbcDriver No Určeno subprotokolem adresy URL JDBC Název třídy ovladače JDBC, který se má použít. Tato třída musí být v cestě k třídě. Ve většině případů by nemělo být nutné tuto možnost zadat, protože název příslušné třídy ovladače by měl být automaticky určen subprotokolem adresy URL JDBC.

Dříve podporovaná jdbc_driver varianta je zastaralá a bude ignorována v budoucích verzích. Místo toho použijte název "camel case".
tempDir Ano Bez výchozího nastavení Identifikátor abfss URI. Pro Azure Synapse doporučujeme použít vyhrazený kontejner úložiště objektů blob.

Dříve podporovaná tempdir varianta je zastaralá a bude ignorována v budoucích verzích. Místo toho použijte název "camel case".

Jako umístění nelze použít externí umístění definované v katalogutempDir Unity.
tempCompression No SNAPPY Algoritmus komprese, který se má použít ke kódování a dekódování dočasných funkcí Sparku i Azure Synapse. Aktuálně podporované hodnoty jsou: UNCOMPRESSEDSNAPPY a GZIP.
forwardSparkAzureStorageCredentials No false (nepravda) Pokud trueknihovna automaticky zjistí přihlašovací údaje k přístupovým klíčům účtu úložiště, které Spark používá pro připojení ke kontejneru Blob Storage, a předá tyto přihlašovací údaje do Azure Synapse přes JDBC. Tyto přihlašovací údaje se odesílají jako součást dotazu JDBC. Proto důrazně doporučujeme povolit šifrování SSL připojení JDBC při použití této možnosti.

Při konfiguraci ověřování úložiště musíte nastavit přesně jeden z useAzureMSI a forwardSparkAzureStorageCredentials na true. Případně můžete nastavit enableServicePrincipalAuthtrue a použít instanční objekt pro ověřování JDBC i úložiště. Tato forwardSparkAzureStorageCredentials možnost nepodporuje ověřování úložiště pomocí identity spravované služby nebo instančního objektu. Podporuje se pouze přístupový klíč účtu úložiště.

Dříve podporovaná forward_spark_azure_storage_credentials varianta je zastaralá a bude ignorována v budoucích verzích. Místo toho použijte název "camel case".
useAzureMSI No false (nepravda) Pokud true, knihovna zadá IDENTITY = 'Managed Service Identity' a ne SECRET pro přihlašovací údaje v oboru databáze, které vytvoří.

Při konfiguraci ověřování úložiště musíte nastavit přesně jeden z useAzureMSI a forwardSparkAzureStorageCredentials na true. Případně můžete nastavit enableServicePrincipalAuthtrue a použít instanční objekt pro ověřování JDBC i úložiště.
enableServicePrincipalAuth No false (nepravda) Pokud true, knihovna použije zadané přihlašovací údaje instančního objektu pro připojení k účtu úložiště Azure a Azure Synapse Analytics přes JDBC.

forward_spark_azure_storage_credentials Pokud je tato možnost nastavená nebo useAzureMSI nastavenátrue, bude mít tato možnost přednost před instančním objektem při ověřování úložiště.
tableOptions No CLUSTERED COLUMNSTORE INDEX, DISTRIBUTION = ROUND_ROBIN Řetězec použitý k určení možností tabulky při vytváření tabulky Azure Synapse nastavené prostřednictvím dbTable. Tento řetězec se předá doslova WITH klauzuli příkazu SQL vydaného CREATE TABLE pro Azure Synapse.

Dříve podporovaná table_options varianta je zastaralá a bude ignorována v budoucích verzích. Místo toho použijte název "camel case".
preActions No Bez výchozího nastavení (prázdný řetězec) Oddělený ; seznam příkazů SQL, které se mají spustit v Azure Synapse před zápisem dat do instance Azure Synapse. Tyto příkazy SQL musí být platné příkazy přijaté službou Azure Synapse.

Pokud některý z těchto příkazů selže, považuje se za chybu a operace zápisu se nespustí.
postActions No Bez výchozího nastavení (prázdný řetězec) ; Oddělený seznam příkazů SQL, které se mají spustit v Azure Synapse po úspěšném zápisu dat do instance Azure Synapse. Tyto příkazy SQL musí být platné příkazy přijaté službou Azure Synapse.

Pokud některý z těchto příkazů selže, považuje se za chybu a po úspěšném zápisu dat do instance Azure Synapse se zobrazí výjimka.
maxStrLength No 256 StringType Ve Sparku se mapuje na NVARCHAR(maxStrLength) typ v Azure Synapse. Můžete použít maxStrLength k nastavení délky řetězce pro všechny NVARCHAR(maxStrLength) sloupce typu, které jsou v tabulce s názvem.
dbTable v Azure Synapse.

Dříve podporovaná maxstrlength varianta je zastaralá a bude ignorována v budoucích verzích. Místo toho použijte název "camel case".
applicationName No Databricks-User-Query Značka připojení pro každý dotaz. Pokud není zadána nebo hodnota je prázdný řetězec, přidá se výchozí hodnota značky adresu URL JDBC. Výchozí hodnota brání nástroji pro monitorování Služby Azure DB v vyvolání upozornění injektáže SQL na dotazy.
maxbinlength No Bez výchozího nastavení Určuje délku BinaryType sloupce. Tento parametr je přeložen jako VARBINARY(maxbinlength).
identityInsert No false (nepravda) Nastavení pro true povolení IDENTITY_INSERT režimu, který vloží zadanou hodnotu datového rámce do sloupce identity v tabulce Azure Synapse.

Viz Explicitní vkládání hodnot do sloupce IDENTITY.
externalDataSource No Bez výchozího nastavení Předem zřízený externí zdroj dat pro čtení dat z Azure Synapse. Externí zdroj dat lze použít pouze s PolyBase a odebere požadavek na oprávnění CONTROL, protože konektor k načtení dat nemusí vytvořit vymezené přihlašovací údaje a externí zdroj dat.

Příklad použití a seznamu oprávnění vyžadovaných při použití externího zdroje dat najdete v tématu Požadovaná oprávnění Azure Synapse pro PolyBase s možností externího zdroje dat.
maxErrors No 0 Maximální počet řádků, které lze odmítnout během čtení a zápisu před zrušením operace načítání. Odmítnuté řádky budou ignorovány. Pokud například dva z deseti záznamů obsahují chyby, zpracuje se pouze osm záznamů.

Viz dokumentace REJECT_VALUE v dokumentaci CREATE EXTERNAL TABLE a MAXERRORS v COPY.
inferTimestampNTZType No false (nepravda) Pokud truese hodnoty typu Azure Synapse TIMESTAMP interpretují jako TimestampNTZType (časové razítko bez časového pásma) během čtení. Jinak se všechna časová razítka interpretují TimestampType bez ohledu na typ v podkladové tabulce Azure Synapse.

Poznámka:

  • tableOptions, preActionspostActionsa maxStrLength jsou relevantní pouze při zápisu dat z Azure Databricks do nové tabulky v Azure Synapse.
  • I když jsou všechny názvy možností zdroje dat nerozlišující velká a malá písmena, doporučujeme je zadat v "camel case" (velbloudím případě).

Odeslání dotazu do Azure Synapse

Konektor Azure Synapse implementuje sadu pravidel optimalizace pro nabízení následujících operátorů do Azure Synapse:

  • Filter
  • Project
  • Limit

Operátory Project podporují Filter následující výrazy:

  • Většina logických operátorů logiky
  • Porovnání
  • Základní aritmetické operace
  • Přetypování čísel a řetězců

U operátoru Limit je nabízení podporováno pouze v případě, že není zadáno žádné řazení. Příklad:

SELECT TOP(10) * FROM table, ale ne SELECT TOP(10) * FROM table ORDER BY col.

Poznámka:

Konektor Azure Synapse nenasdílí výrazy provozující řetězce, kalendářní data nebo časová razítka.

Ve výchozím nastavení je povolený odsdílení dotazů vytvořený pomocí konektoru Azure Synapse. Můžete ho zakázat nastavením spark.databricks.sqldw.pushdown na false.

Dočasná správa dat

Konektor Azure Synapse neodstraní dočasné soubory, které vytvoří v kontejneru úložiště Azure. Databricks doporučuje pravidelně odstraňovat dočasné soubory v umístění zadaném tempDir uživatelem.

Pro usnadnění čištění dat konektor Azure Synapse neukládá datové soubory přímo pod tempDir, ale místo toho vytvoří podadresář formuláře: <tempDir>/<yyyy-MM-dd>/<HH-mm-ss-SSS>/<randomUUID>/. Můžete nastavit pravidelné úlohy (pomocí funkce úloh Azure Databricks nebo jinak) a rekurzivně odstranit všechny podadresáře, které jsou starší než daná prahová hodnota (například 2 dny), s předpokladem, že úlohy Sparku neběží déle, než je tato prahová hodnota.

Jednodušší alternativou je pravidelné vyřazení celého kontejneru a vytvoření nového kontejneru se stejným názvem. To vyžaduje použití vyhrazeného kontejneru pro dočasná data vytvořená konektorem Azure Synapse a že můžete najít časové období, ve kterém můžete zaručit, že nejsou spuštěné žádné dotazy týkající se konektoru.

Dočasná správa objektů

Konektor Azure Synapse automatizuje přenos dat mezi clusterem Azure Databricks a instancí Azure Synapse. Pro čtení dat z tabulky Azure Synapse nebo dotazování nebo zápisu dat do tabulky Azure Synapse vytvoří konektor Azure Synapse dočasné objekty, včetně DATABASE SCOPED CREDENTIALEXTERNAL DATA SOURCEEXTERNAL FILE FORMAT, , a EXTERNAL TABLE na pozadí. Tyto objekty jsou aktivní pouze po celou dobu trvání odpovídající úlohy Sparku a automaticky se zahodí.

Pokud cluster spouští dotaz pomocí konektoru Azure Synapse, pokud dojde k chybě nebo dojde k vynuceném restartování procesu ovladače Spark nebo pokud je cluster vynuceně ukončen nebo restartován, nemusí se dočasné objekty vynechat. Aby bylo možné usnadnit identifikaci a ruční odstranění těchto objektů, předpony konektoru Azure Synapse názvy všech dočasných objektů vytvořených v instanci Azure Synapse značkou formuláře: tmp_databricks_<yyyy_MM_dd_HH_mm_ss_SSS>_<randomUUID>_<internalObject>

Doporučujeme pravidelně hledat nevracené objekty pomocí dotazů, jako jsou například následující:

  • 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_%'