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.
Důležité
Konfigurace popsané v tomto článku jsou experimentální. Experimentální funkce jsou poskytovány tak, jak jsou, a Databricks je nepodporuje prostřednictvím technické podpory zákazníků. Pokud chcete získat plnou podporu federace dotazů, měli byste místo toho použít Lakehouse Federation, která uživatelům Azure Databricks umožňuje využívat syntaxi katalogu Unity a nástroje zásad správného řízení dat.
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 téma 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í.
Databricks doporučuje používat nejbezpečnější dostupný tok ověřování. Tok ověřování popsaný v tomto příkladu nese rizika, která nejsou přítomna v jiných tocích. Tento tok byste měli použít jenom v případě, že jiné bezpečnější toky, jako jsou spravované identity, nejsou přijatelné.
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ů:
- Použijte klíč účtu a tajný klíč pro účet úložiště a nastavte
forwardSparkAzureStorageCredentials
natrue
hodnotu . Viz Nastavení vlastností Sparku pro konfiguraci přihlašovacích údajů Azure pro přístup k úložišti Azure. - Použití Azure Data Lake Storage Gen2 s ověřováním OAuth 2.0 a nastaveným
enableServicePrincipalAuth
natrue
. Viz Konfigurace připojení z Azure Databricks k Synapse pomocí OAuth 2.0 s instančním objektem. - Nakonfigurujte instanci Azure Synapse tak, aby měla identitu spravované služby a byla nastavena
useAzureMSI
natrue
hodnotu .
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ě. Více informací o používání přihlašovacích údajů instančního objektu k přístupu k účtu úložiště Azure najdete v části 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 ErrorIfExists
režimy ukládání Ignore
Append
Overwrite
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 katalogu tempDir 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: UNCOMPRESSED SNAPPY a GZIP . |
forwardSparkAzureStorageCredentials |
No | false (nepravda) | Pokud true knihovna 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 enableServicePrincipalAuth true 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 enableServicePrincipalAuth true 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 true se 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
,preActions
postActions
amaxStrLength
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 CREDENTIAL
EXTERNAL DATA SOURCE
EXTERNAL 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_%'