Wykonywanie zapytań dotyczących danych w usłudze Azure Synapse Analytics
Mo można uzyskać dostęp do usługi Azure Synapse bezpośrednio z Azure Databricks, korzystając z łącznika Azure Synapse, który używa instrukcji COPY
w Azure Synapse, aby wydajnie przesyłać duże volumes danych między klastrem Azure Databricks a instancją Azure Synapse, wykorzystując konto magazynu Azure Data Lake Storage Gen2 do tymczasowego składowania.
Ważne
Konfiguracje opisane w tym artykule są eksperymentalne. Funkcje eksperymentalne są udostępniane zgodnie z oczekiwaniami i nie są obsługiwane przez usługę Databricks za pośrednictwem pomocy technicznej klienta. Aby get pełnej obsługi federacji zapytań, należy zamiast tego użyć Lakehouse Federation, co umożliwia użytkownikom usługi Azure Databricks korzystanie z narzędzi do zarządzania Catalog składnią i danymi aparatu Unity.
Usługa Azure Synapse Analytics to oparty na chmurze magazyn danych przedsiębiorstwa, który wykorzystuje masowe przetwarzanie równoległe (MPP) do szybkiego uruchamiania złożonych zapytań w petabajtach danych.
Ważne
Ten łącznik jest używany tylko z wystąpieniami dedykowanej puli usługi Synapse i nie jest zgodny z innymi składnikami usługi Synapse.
Uwaga
COPY
jest dostępny tylko w wystąpieniach usługi Azure Data Lake Storage Gen2. Jeśli szukasz szczegółowych informacji na temat pracy z programem Polybase, zobacz Connecting Azure Databricks and Azure Synapse with PolyBase (legacy) (Łączenie usług Azure Databricks i Azure Synapse z technologią PolyBase (starsza wersja).
Przykładowa składnia usługi Synapse
Zapytania dotyczące usługi Synapse można wykonywać w językach Scala, Python, SQL i R. W poniższych przykładach kodowych użyto kluczy konta magazynu i przekazywany jest magazyn credentials z usługi Azure Databricks do usługi Synapse.
Uwaga
Użyj parametry połączenia udostępnionej przez witrynę Azure Portal, która umożliwia szyfrowanie Secure Sockets Layer (SSL) dla wszystkich danych wysyłanych między sterownikiem Spark a wystąpieniem usługi Azure Synapse za pośrednictwem połączenia JDBC. Aby sprawdzić, czy szyfrowanie SSL jest włączone, możesz wyszukać encrypt=true
w parametry połączenia.
Ważne
Lokalizacje zewnętrzne zdefiniowane w Unity Catalog nie są obsługiwane jako lokalizacje tempDir
.
Usługa Databricks zaleca korzystanie z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Przepływ uwierzytelniania opisany w tym przykładzie niesie ze sobą ryzyko, które nie są obecne w innych przepływach. Tego przepływu należy używać tylko wtedy, gdy inne bezpieczniejsze przepływy, takie jak tożsamości zarządzane, nie są opłacalne.
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 działa uwierzytelnianie między usługą Azure Databricks i usługą Synapse?
Łącznik usługi Azure Synapse używa trzech typów sieci connections.
- Sterownik platformy Spark do usługi Azure Synapse
- Klaster Spark na konto usługi Azure Storage
- Usługa Azure Synapse do konta usługi Azure Storage
Konfigurowanie dostępu do usługi Azure Storage
Zarówno usługi Azure Databricks, jak i Synapse wymagają uprzywilejowanego dostępu do konta usługi Azure Storage, które ma być używane na potrzeby tymczasowego magazynu danych.
Usługa Azure Synapse nie obsługuje używania sygnatury dostępu współdzielonego na potrzeby dostępu do konta magazynu. Dostęp dla obu usług można skonfigurować, wykonując jedną z następujących czynności:
- Użyj klucza konta i tajemnicy dla konta magazynu oraz set
forwardSparkAzureStorageCredentials
dotrue
. Zobacz Set właściwości Spark, aby skonfigurować Azure credentials i uzyskać dostęp do pamięci masowej Azure. - Użyj usługi Azure Data Lake Storage Gen2 z uwierzytelnianiem OAuth 2.0 i set
enableServicePrincipalAuth
, abytrue
. Zobacz Konfigurowanie połączenia z usługi Azure Databricks do usługi Synapse przy użyciu protokołu OAuth 2.0 z jednostką usługi. - Skonfiguruj wystąpienie usługi Azure Synapse, aby miało Tożsamość Usługi Zarządzanej i set
useAzureMSI
dotrue
.
Wymagane uprawnienia usługi Azure Synapse
Ponieważ używa COPY
go w tle, łącznik usługi Azure Synapse wymaga od użytkownika połączenia JDBC uprawnienia do uruchamiania następujących poleceń w połączonym wystąpieniu usługi Azure Synapse:
Jeśli docelowa table nie istnieje w usłudze Azure Synapse, oprócz powyższego polecenia wymagane jest uprawnienie do uruchomienia następującego polecenia:
Poniższy table podsumowuje uprawnienia wymagane do zapisu przy użyciu COPY
:
Uprawnienia (insert do istniejącego table) | Uprawnienia (insert do nowego table) |
---|---|
ADMINISTER DATABASE BULK OPERATIONS (ADMINISTROWANIE ZBIORCZYMI OPERACJAMI BAZY DANYCH) INSERT |
ADMINISTER DATABASE BULK OPERATIONS (ADMINISTROWANIE ZBIORCZYMI OPERACJAMI BAZY DANYCH) INSERT CREATE TABLE ALTER ON SCHEMA :: dbo |
Konfiguracje sieci
Jeśli skonfigurujesz zaporę w usłudze Azure Synapse, musisz skonfigurować ustawienia sieci, aby umożliwić usłudze Azure Databricks dotarcie do usługi Azure Synapse. Najpierw upewnij się, że obszar roboczy usługi Azure Databricks został wdrożony we własnej sieci wirtualnej, a następnie wdróż usługę Azure Databricks w sieci wirtualnej platformy Azure (iniekcja sieci wirtualnej).Najpierw upewnij się, że obszar roboczy usługi Azure Databricks jest wdrożony we własnej sieci wirtualnej. Następnie można skonfigurować reguły zapory IP w usłudze Azure Synapse, aby zezwolić connections z Twoich podsieci do Twojego konta Synapse. Zobacz Reguły zapory adresów IP usługi Azure Synapse Analytics.
Konfigurowanie połączenia z usługi Azure Databricks do usługi Synapse przy użyciu protokołu OAuth 2.0 z jednostką usługi
Możesz uwierzytelnić się w usłudze Azure Synapse Analytics przy użyciu jednostki usługi z dostępem do bazowego konta magazynu. Aby uzyskać więcej informacji na temat używania jednostki usługi credentials do uzyskania dostępu do konta usługi Azure Storage, zobacz Jak połączyć się z Azure Data Lake Storage Gen2 i Blob Storage. Musisz set opcję enableServicePrincipalAuth
true
w konfiguracji połączenia do łącznika Synapse Azure Databricks według odniesienia do opcji, aby umożliwić łącznikowi uwierzytelnienie za pomocą podmiotu usługi.
Opcjonalnie możesz użyć innej jednostki usługi dla połączenia usługi Azure Synapse Analytics. Poniższy przykład konfiguruje jednostkę usługi credentials dla konta przechowywania oraz opcjonalnie jednostkę usługi credentials dla konta 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>")
Obsługiwane tryby zapisywania dla zapisów wsadowych
Łącznik usługi Azure Synapse obsługuje ErrorIfExists
tryby , Ignore
, Append
i Overwrite
zapisywania z domyślnym trybem to ErrorIfExists
. Aby uzyskać więcej informacji na temat obsługiwanych trybów zapisywania na platformie Apache Spark, zobacz dokumentację spark SQL dotyczącą trybów zapisywania.
Dokumentacja opcji łącznika usługi Synapse usługi Azure Databricks
Dostępne OPTIONS
w usłudze Spark SQL obsługują następujące ustawienia:
Parametr | Wymagania | Wartość domyślna | Uwagi |
---|---|---|---|
dbTable |
Tak, chyba że query określono |
Brak wartości domyślnej |
table do utworzenia lub odczytania w usłudze Azure Synapse. Ten parametr jest wymagany podczas zapisywania danych z powrotem do usługi Azure Synapse. Możesz również użyć {SCHEMA NAME}.{TABLE NAME} , aby uzyskać dostęp do table w danym schema. Jeśli nie podano nazwy schema, zostanie użyta domyślna schema skojarzona z użytkownikiem JDBC.Wcześniej obsługiwany dbtable wariant jest przestarzały i zostanie zignorowany w przyszłych wersjach. Zamiast tego użyj nazwy "camel case". |
query |
Tak, chyba że dbTable określono |
Brak wartości domyślnej | Zapytanie do odczytu w usłudze Azure Synapse. Dla tables, o którym mowa w zapytaniu, można również użyć {SCHEMA NAME}.{TABLE NAME} , aby uzyskać dostęp do table w danym schema. Jeśli nie podano nazwy schema, zostanie użyta domyślna schema skojarzona z użytkownikiem JDBC. |
user |
Nie. | Brak wartości domyślnej | Nazwa użytkownika usługi Azure Synapse. Należy używać razem z opcją password . Można go używać tylko wtedy, gdy użytkownik i hasło nie zostaną przekazane w adresie URL. Przekazanie obu spowoduje wystąpienie błędu. |
password |
Nie. | Brak wartości domyślnej | Hasło usługi Azure Synapse. Należy używać razem z opcją user . Można go używać tylko wtedy, gdy użytkownik i hasło nie zostaną przekazane w adresie URL. Przekazanie obu spowoduje wystąpienie błędu. |
url |
Tak | Brak wartości domyślnej | Adres URL JDBC z sqlserver set jako podprotocol. Zaleca się używanie parametry połączenia udostępnianych przez witrynę Azure Portal. Ustawienie encrypt=true jest zdecydowanie zalecane, ponieważ umożliwia szyfrowanie SSL połączenia JDBC. Jeśli user i password są set oddzielnie, nie musisz dołączać ich do adresu URL. |
jdbcDriver |
Nie. | Określony przez podprotocol adresu URL JDBC | Nazwa klasy sterownika JDBC do użycia. Ta klasa musi znajdować się na ścieżce klasy. W większości przypadków nie należy określać tej opcji, ponieważ odpowiednia nazwa klasy sterownika powinna być automatycznie określana przez podprotocol adresu URL JDBC. Wcześniej obsługiwany jdbc_driver wariant jest przestarzały i zostanie zignorowany w przyszłych wersjach. Zamiast tego użyj nazwy "camel case". |
tempDir |
Tak | Brak wartości domyślnej | Identyfikator abfss URI. Zalecamy użycie dedykowanego kontenera usługi Blob Storage dla usługi Azure Synapse.Wcześniej obsługiwany tempdir wariant jest przestarzały i zostanie zignorowany w przyszłych wersjach. Zamiast tego użyj nazwy "camel case".Nie można użyć lokalizacji zewnętrznej zdefiniowanej w Unity Catalog jako lokalizacji tempDir . |
tempCompression |
Nie. | SNAPPY |
Algorytm kompresji, który ma być używany do kodowania/dekodowania tymczasowego zarówno przez platformę Spark, jak i usługę Azure Synapse. Obecnie obsługiwane values to: UNCOMPRESSED , SNAPPY i GZIP . |
forwardSparkAzureStorageCredentials |
Nie. | fałsz | Jeśli true , biblioteka automatycznie odnajduje klucz dostępu konta magazynu credentials, którego platforma Spark używa do nawiązywania połączenia z kontenerem usługi Blob Storage i przekazuje te credentials do usługi Azure Synapse za pośrednictwem JDBC. Te credentials są wysyłane w ramach zapytania JDBC. Dlatego zdecydowanie zaleca się włączenie szyfrowania SSL połączenia JDBC podczas korzystania z tej opcji.Podczas konfigurowania uwierzytelniania magazynu należy set dokładnie jedną z useAzureMSI i forwardSparkAzureStorageCredentials , aby true . Alternatywnie można setenableServicePrincipalAuth do true i używać usługi głównej zarówno do uwierzytelniania JDBC, jak i magazynu. Opcja forwardSparkAzureStorageCredentials nie obsługuje uwierzytelniania w magazynie przy użyciu tożsamości usługi zarządzanej lub jednostki usługi. Obsługiwany jest tylko klucz dostępu do konta magazynu.Wcześniej obsługiwany forward_spark_azure_storage_credentials wariant jest przestarzały i zostanie zignorowany w przyszłych wersjach. Zamiast tego użyj nazwy "camel case". |
useAzureMSI |
Nie. | fałsz | Jeśli true , biblioteka określi IDENTITY = 'Managed Service Identity' i nie określi SECRET dla bazy danych o nazwie credentials, którą utworzy.Podczas konfigurowania uwierzytelniania magazynu należy set dokładnie jedną z useAzureMSI i forwardSparkAzureStorageCredentials , aby true . Możesz także setenableServicePrincipalAuth do true i używać głównej aplikacji usługi do uwierzytelniania zarówno JDBC, jak i magazynu. |
enableServicePrincipalAuth |
Nie. | fałsz | Jeśli true , biblioteka będzie używać podanej jednostki usługi credentials do nawiązywania połączenia z kontem usługi Azure Storage i usługą Azure Synapse Analytics za pośrednictwem JDBC.Jeśli forward_spark_azure_storage_credentials lub useAzureMSI jest związane z true poprzez set, ta opcja ma pierwszeństwo przed jednostką usługi podczas uwierzytelniania magazynu. |
tableOptions |
Nie. |
CLUSTERED COLUMNSTORE INDEX , DISTRIBUTION = ROUND_ROBIN |
Ciąg służący do określania opcji table podczas tworzenia tableset usługi Azure Synapse za pośrednictwem dbTable . Ten ciąg jest przekazywany dosłownie do WITH klauzuli instrukcji SQL wydanej CREATE TABLE dla usługi Azure Synapse.Wcześniej obsługiwany table_options wariant jest przestarzały i zostanie zignorowany w przyszłych wersjach. Zamiast tego użyj nazwy "camel case". |
preActions |
Nie. | Brak wartości domyślnej (pusty ciąg) |
; rozdzielone list poleceń SQL, które mają zostać wykonane w Azure Synapse przed zapisaniem danych w instancji tej usługi. Te polecenia SQL muszą być prawidłowymi poleceniami akceptowanymi przez usługę Azure Synapse.Jeśli którykolwiek z tych poleceń zakończy się niepowodzeniem, jest traktowany jako błąd, a operacja zapisu nie jest wykonywana. |
postActions |
Nie. | Brak wartości domyślnej (pusty ciąg) |
; rozdzielone list komend SQL do wykonania w Azure Synapse po tym, jak łącznik pomyślnie zapisze dane w wystąpieniu Azure Synapse. Te polecenia SQL muszą być prawidłowymi poleceniami akceptowanymi przez usługę Azure Synapse.Jeśli którykolwiek z tych poleceń zakończy się niepowodzeniem, zostanie on traktowany jako błąd i get wyjątek po pomyślnym zapisaniu danych w wystąpieniu usługi Azure Synapse. |
maxStrLength |
Nie. | 256 |
StringType na platformie Spark jest mapowany na NVARCHAR(maxStrLength) typ w usłudze Azure Synapse. Możesz użyć maxStrLength , aby set długość ciągu dla wszystkich elementów typu NVARCHAR(maxStrLength) columns, które znajdują się w table o nazwie dbTable w ramach usługi Azure Synapse.Wcześniej obsługiwany maxstrlength wariant jest przestarzały i zostanie zignorowany w przyszłych wersjach. Zamiast tego użyj nazwy "camel case". |
applicationName |
Nie. | Databricks-User-Query |
Tag połączenia dla każdego zapytania. Jeśli nie zostanie określona lub wartość jest pustym ciągiem, domyślnie dodawany jest adres URL JDBC. Wartość domyślna uniemożliwia narzędziu do monitorowania usługi Azure DB zgłaszanie fałszywych alertów iniekcji SQL względem zapytań. |
maxbinlength |
Nie. | Brak wartości domyślnej | Kontroluj długość column dla BinaryType columns. Ten parametr jest tłumaczony jako VARBINARY(maxbinlength) . |
identityInsert |
Nie. | fałsz | Ustawienie true włącza tryb IDENTITY_INSERT , który wstawia wartość Ramki Danych w identyfikatorze column Azure Synapse table.Zobacz Jawne wstawianie values do columnIDENTITY. |
externalDataSource |
Nie. | Brak wartości domyślnej | Wstępnie aprowizowane zewnętrzne źródło danych do odczytu danych z usługi Azure Synapse. Zewnętrzne źródło danych może być używane tylko z technologią PolyBase i usuwa wymaganie uprawnień CONTROL, ponieważ łącznik nie musi tworzyć poświadczeń o określonym zakresie i zewnętrznego źródła danych w celu załadowania danych. Na przykład użycie i list uprawnień wymaganych podczas korzystania z zewnętrznego źródła danych zobacz Wymagane uprawnienia usługi Azure Synapse dla programu PolyBase z opcją zewnętrznego źródła danych. |
maxErrors |
Nie. | 0 | Maksymalna liczba wierszy, które można odrzucić podczas operacji odczytu i zapisu przed anulowaniem operacji ładowania. Odrzucone wiersze zostaną zignorowane. Jeśli na przykład dwa z dziesięciu rekordów zawierają błędy, zostaną przetworzone tylko osiem rekordów. Zapoznaj się z dokumentacją REJECT_VALUE w CREATE EXTERNAL TABLE oraz dokumentacją MAXERRORS w COPY. |
inferTimestampNTZType |
Nie. | fałsz | Jeśli true , values typu Azure Synapse TIMESTAMP są interpretowane jako TimestampNTZType (znacznik czasu bez strefy czasowej) podczas operacji odczytu. W przeciwnym razie wszystkie znaczniki czasu są interpretowane jako TimestampType , niezależnie od typu danych w podstawowym module tableusługi Azure Synapse. |
Uwaga
-
tableOptions
,preActions
,postActions
imaxStrLength
są istotne tylko podczas zapisywania danych z usługi Azure Databricks do nowego table w usłudze Azure Synapse. - Mimo że wszystkie nazwy opcji źródła danych są bez uwzględniania wielkości liter, zalecamy określenie ich w przypadku "camel case" w celu uzyskania jasności.
Wypychanie zapytań do usługi Azure Synapse
Łącznik usługi Azure Synapse implementuje set reguł optymalizacji, aby przenieść następujące operatory do usługi Azure Synapse.
Filter
Project
Limit
Operatory Project
i Filter
obsługują następujące wyrażenia:
- Większość operatorów logicznych
- Porównania
- Podstawowe operacje arytmetyczne
- Rzutowanie liczbowe i ciągowe
Limit
W przypadku operatora wypychanie jest obsługiwane tylko wtedy, gdy nie określono kolejności. Na przykład:
SELECT TOP(10) * FROM table
, ale nie SELECT TOP(10) * FROM table ORDER BY col
.
Uwaga
Łącznik usługi Azure Synapse nie wypycha wyrażeń działających na ciągach, datach lub znacznikach czasu.
Wypychanie zapytań utworzone za pomocą łącznika usługi Azure Synapse jest domyślnie włączone. Można ją wyłączyć, ustawiając wartość spark.databricks.sqldw.pushdown
false
.
Tymczasowe zarządzanie danymi
Łącznik usługi Azure Synapse nie usuwa plików tymczasowych tworzonych w kontenerze usługi Azure Storage. Usługa Databricks zaleca okresowe usuwanie plików tymczasowych w lokalizacji dostarczonej tempDir
przez użytkownika.
Aby ułatwić oczyszczanie danych, łącznik usługi Azure Synapse nie przechowuje plików danych bezpośrednio w obszarze tempDir
, ale zamiast tego tworzy podkatalog formularza: <tempDir>/<yyyy-MM-dd>/<HH-mm-ss-SSS>/<randomUUID>/
. Można set okresowe zadania (przy użyciu funkcji zadań usługi Azure Databricks lub w inny sposób), aby rekursywnie usuwać wszystkie podkatalogi starsze niż określony próg (na przykład 2 dni), przy założeniu, że nie będzie zadań platformy Spark uruchomionych dłużej niż ten próg.
Prostszą alternatywą jest okresowe usunięcie całego kontenera i utworzenie nowego o tej samej nazwie. Wymaga to użycia dedykowanego kontenera dla danych tymczasowych utworzonych przez łącznik usługi Azure Synapse i że można znaleźć czas window, w którym można zagwarantować, że żadne zapytania dotyczące łącznika nie są uruchomione.
Tymczasowe zarządzanie obiektami
Łącznik usługi Azure Synapse automatyzuje transfer danych między klastrem usługi Azure Databricks i wystąpieniem usługi Azure Synapse. Do odczytywania danych z usługi Azure Synapse table lub wykonywania zapytań lub zapisywania danych w usłudze Azure Synapse tablełącznik usługi Azure Synapse tworzy obiekty tymczasowe, w tym DATABASE SCOPED CREDENTIAL
, EXTERNAL DATA SOURCE
, EXTERNAL FILE FORMAT
i EXTERNAL TABLE
w tle. Te obiekty są aktywne tylko przez cały czas trwania odpowiedniego zadania platformy Spark i są automatycznie porzucane.
Jeśli klaster uruchamia zapytanie przy użyciu łącznika usługi Azure Synapse, jeśli proces sterownika spark ulegnie awarii lub zostanie wymuszono ponownie uruchomiony lub jeśli klaster zostanie wymuszono zakończony lub ponownie uruchomiony, obiekty tymczasowe mogą nie zostać usunięte. Aby ułatwić identyfikację i ręczne usuwanie tych obiektów, łącznik usługi Azure Synapse prefiksuje nazwy wszystkich pośrednich obiektów tymczasowych utworzonych w wystąpieniu usługi Azure Synapse z tagiem formularza: tmp_databricks_<yyyy_MM_dd_HH_mm_ss_SSS>_<randomUUID>_<internalObject>
.
Zalecamy okresowe wyszukiwanie ujawnionych obiektów przy użyciu zapytań, takich jak:
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_%'