连接数据砖和Azure突触与混合基(遗留)

重要的

这个文档已经退休了,可能不会被更新。产品、服务或技术中提到的这些内容不再支持。看到在Azure突触分析查询数据

砖建议使用默认值复制功能与Azure数据存储Gen2湖Azure突触连接。本文包括遗留文档在混合基和blob存储。

Azure突触分析(原SQL数据仓库)是一个基于云计算的企业数据仓库,利用大规模并行处理(MPP)快速运行复杂的查询在pb的数据。使用Azure作为大数据解决方案的一个关键组成部分。大数据导入到Azure和简单混合基t - sql查询,或复制声明中,然后使用MPP高性能运行分析的力量。整合和分析,数据仓库将成为真理的单一版本您的业务可以依靠的见解。

您可以访问Azure从砖使用Azure突触的突触连接器,Apache火花,它使用一个数据源的实现Azure Blob存储、混合基或复制声明Azure突触传递大量数据高效砖集群和Azure突触之间的实例。

砖集群和Azure突触实例访问常见Blob存储容器这两个系统之间交换数据。在砖,Apache火花工作引发的Azure突触连接器读和写数据到数据Blob存储容器。在Azure突触端,数据加载和卸载操作由混合基由Azure引发突触通过JDBC连接器。在砖运行时的7.0及以上,复制默认情况下用于数据加载到Azure Azure突触的突触通过JDBC连接器。

请注意

复制只有在Azure突触Gen2实例,提供吗更好的性能。如果您的数据库仍然使用Gen1实例,我们建议您将数据库迁移到代。

Azure突触连接器比交互式查询更适合ETL,因为每个查询执行可以提取Blob存储大量的数据。如果你计划来执行多个查询相同的Azure突触表,我们建议您保存拼花等提取的数据的格式。

需求

一个Azure突触数据库的主键

身份验证

Azure突触连接器使用三种类型的网络连接:

  • 引发司机Azure突触

  • 火花司机和执行人Azure存储账户

  • Azure突触Azure存储账户

┌─────────┐┌─────────────────────────>存储││<────────────────────────┐│存储acc键/││帐户存储acc键/││管理服务ID /└─────────┘OAuth 2.0 /│││││││││存储acc键/│││OAuth 2.0 /││││v v┌──────v────┐┌──────────┐┌──────────┐│┌──────────┴┐突触│││火花│││火花│││分析<────────────────────>││司机<───────────────>│执行人│└──────────┘JDBC与└──────────┘配置└───────────┘用户名&密码/火花

以下部分描述每个连接的身份验证配置选项。

引发司机Azure突触

火花驱动程序可以连接到Azure突触与用户名和密码使用JDBC或OAuth 2.0服务主体进行身份验证。

用户名和密码

我们建议您使用Azure门户提供的连接字符串为身份验证类型,这使安全套接字层(SSL)加密所有数据发送火花司机和Azure突触之间通过JDBC连接实例。启用了SSL加密验证,你可以搜索加密= true在连接字符串。

允许火花司机到Azure突触,我们建议您设置允许Azure服务和资源来访问这个工作区网络面板下安全的Azure突触通过Azure门户工作区。此设置允许通信从所有Azure Azure IP地址和子网,它允许火花司机到Azure突触实例。

OAuth 2.0服务主体

你可以验证Azure突触分析使用一个服务主体与访问底层存储账户。使用的更多信息服务主体的凭证访问一个Azure存储账户,明白了连接到数据存储Gen2湖和Blob存储Azure。你必须设置enableServicePrincipalAuth选项真正的在连接配置参数使连接器与一个服务主体进行身份验证。

您可以选择使用不同的服务主体的Azure突触连接的分析。一个示例,该示例配置服务主体的凭证存储账户和可选的服务主体为突触凭证:

;定义服务主体的凭证Azure存储账户fs.azure.account.auth。OAuth类型fs.azure.account.oauth.provider。类型org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProviderfs.azure.account.oauth2.client。id <应用程序id >fs.azure.account.oauth2.client。秘密< service-credential >fs.azure.account.oauth2.client。端点https://login.microsoftonline.com/ < directory-id > / oauth2 /令牌;定义一个单独的服务主体的凭证Azure突触分析(如果没有定义,连接器将使用Azure存储帐户凭据)spark.databricks.sqldw.jdbc.service.principal.client。id <应用程序id >spark.databricks.sqldw.jdbc.service.principal.client。秘密< service-credential >
/ /定义服务主体的凭证Azure存储账户火花相依(“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”,“<应用程序id >”)火花相依(“fs.azure.account.oauth2.client.secret”,“< service-credential >”)火花相依(“fs.azure.account.oauth2.client.endpoint”,“https://login.microsoftonline.com/ < directory-id > / oauth2 /令牌”)/ /定义一个单独的服务主体的凭证Azure突触分析(如果没有定义,连接器将使用Azure存储帐户凭据)火花相依(“spark.databricks.sqldw.jdbc.service.principal.client.id”,“<应用程序id >”)火花相依(“spark.databricks.sqldw.jdbc.service.principal.client.secret”,“< service-credential >”)
#定义服务主体的凭证Azure存储账户火花相依(“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”,“<应用程序id >”)火花相依(“fs.azure.account.oauth2.client.secret”,“< service-credential >”)火花相依(“fs.azure.account.oauth2.client.endpoint”,“https://login.microsoftonline.com/ < directory-id > / oauth2 /令牌”)#定义一套独立的服务主体的凭证Azure突触分析(如果没有定义,连接器将使用Azure存储帐户凭据)火花相依(“spark.databricks.sqldw.jdbc.service.principal.client.id”,“<应用程序id >”)火花相依(“spark.databricks.sqldw.jdbc.service.principal.client.secret”,“< service-credential >”)
#负载SparkR图书馆(SparkR)相依< -sparkR.callJMethod(sparkR.session(),“配置”)#定义服务主体的凭证Azure存储账户sparkR.callJMethod(相依,“设置”,“fs.azure.account.auth.type”,“OAuth”)sparkR.callJMethod(相依,“设置”,“fs.azure.account.oauth.provider.type”,“org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider”)sparkR.callJMethod(相依,“设置”,“fs.azure.account.oauth2.client.id”,“<应用程序id >”)sparkR.callJMethod(相依,“设置”,“fs.azure.account.oauth2.client.secret”,“< service-credential >”)sparkR.callJMethod(相依,“设置”,“fs.azure.account.oauth2.client.endpoint”,“https://login.microsoftonline.com/ < directory-id > / oauth2 /令牌”)#定义一套独立的服务主体的凭证Azure突触分析(如果没有定义,连接器将使用Azure存储帐户凭据)sparkR.callJMethod(相依,“设置”,“spark.databricks.sqldw.jdbc.service.principal.client.id”,“<应用程序id >”)sparkR.callJMethod(相依,“设置”,“spark.databricks.sqldw.jdbc.service.principal.client.secret”,“< service-credential >”)

火花司机和执行人Azure存储账户

Azure存储容器充当中介时存储大量数据读取或写入Azure突触。火花连接到ADLS Gen2或Blob存储使用abfss司机。

以下身份验证选项可用:

下面的例子说明了这两种方法使用存储帐户访问键的方法。这同样适用于OAuth 2.0配置。

笔记本会话配置(首选)

使用这种方法,该帐户访问密钥在会话中设置配置的笔记本运行命令。这个配置不影响其他笔记本连接到相同的集群。火花SparkSession对象提供的笔记本。

火花相依(“fs.azure.account.key < your-storage-account-name > .dfs.core.windows.net”。,“< your-storage-account-access-key >”)

全球Hadoop配置

这种方法更新全球Hadoop相关配置SparkContext对象由所有笔记本共享。

schadoopConfiguration(“fs.azure.account.key < your-storage-account-name > .dfs.core.windows.net”。,“< your-storage-account-access-key >”)

hadoopConfiguration不暴露在所有版本的PySpark。虽然下面的命令依靠一些火花内部,它应该与所有PySpark版本和在未来不太可能打破或改变:

sc_jschadoopConfiguration()(“fs.azure.account.key < your-storage-account-name > .dfs.core.windows.net”。,“< your-storage-account-access-key >”)

Azure突触Azure存储账户

Azure突触也连接到一个存储账户在装卸的临时数据。

如果你建立了一个账户的关键和秘密存储账户,您可以设置forwardSparkAzureStorageCredentials真正的,在这种情况下,Azure突触连接器自动发现账户访问关键设置笔记本会话配置或全球Hadoop配置和转发存储帐户访问关键Azure突触连接实例通过创建一个临时Azure数据库的作用域凭据

另外,如果你使用OAuth 2.0认证或ADLS Gen2 Azure突触实例配置有管理服务(通常与身份VNet +服务端点设置),您必须设置useAzureMSI真正的。在这种情况下,连接器将指定身份=的管理服务身份的数据库的作用域凭据,没有秘密

流媒体支持

Azure突触连接器提供高效和可扩展的结构化流写支持Azure突触与批处理写提供一致的用户体验,并使用混合基或复制对于大型砖集群之间的数据传输和Azure突触实例。类似于批写道,流是ETL设计在很大程度上,从而提供更高的延迟,可能不适合实时数据处理在某些情况下。

容错语义

默认情况下,Azure突触流提供了端到端仅一次保证写数据到Azure突触表可靠地跟踪进度查询的使用检查点位置DBFS、检查点表在Azure突触,和锁定机制,以确保流可以处理任何类型的失败,重试,和查询将重新启动。可选地,您可以选择限制较少“至少一次”语义Azure突触流设置spark.databricks.sqldw.streaming.exactlyOnce.enabled选项,在这种情况下,数据重复的事件可能发生间歇性连接失败Azure突触查询或意外终止。

使用(批处理)

你可以使用这个连接器通过数据源API在Scala中,Python, SQL和R笔记本。

/ /否则,设置Blob存储帐户访问关键会话配置在笔记本上。火花相依(“fs.azure.account.key < your-storage-account-name > .dfs.core.windows.net”。,“< your-storage-account-access-key >”)/ /从Azure突触表得到一些数据。瓦尔df:DataFrame=火花格式(“com.databricks.spark.sqldw”)选项(“url”," jdbc::状态"置疑" / / < the-rest-of-the-connection-string >”)选项(“tempDir”,“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”)选项(“forwardSparkAzureStorageCredentials”,“真正的”)选项(“数据表”,“< your-table-name >”)负载()/ /加载数据从Azure突触查询。瓦尔df:DataFrame=火花格式(“com.databricks.spark.sqldw”)选项(“url”," jdbc::状态"置疑" / / < the-rest-of-the-connection-string >”)选项(“tempDir”,“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”)选项(“forwardSparkAzureStorageCredentials”,“真正的”)选项(“查询”,“选择x, count(*)从表group by x”问)负载()/ /应用一些转换数据,然后使用/ /数据源API来编写数据返回到另一个表在Azure突触。df格式(“com.databricks.spark.sqldw”)选项(“url”," jdbc::状态"置疑" / / < the-rest-of-the-connection-string >”)选项(“forwardSparkAzureStorageCredentials”,“真正的”)选项(“数据表”,“< your-table-name >”)选项(“tempDir”,“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”)保存()
#否则,设置Blob存储帐户访问关键会话配置在笔记本上。火花相依(“fs.azure.account.key < your-storage-account-name > .dfs.core.windows.net”。,“< your-storage-account-access-key >”)#从Azure突触表得到一些数据。df=火花\格式(“com.databricks.spark.sqldw”)\选项(“url”," jdbc::状态"置疑" / / < the-rest-of-the-connection-string >”)\选项(“tempDir”,“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”)\选项(“forwardSparkAzureStorageCredentials”,“真正的”)\选项(“数据表”,“< your-table-name >”)\负载()#加载数据从Azure突触查询。df=火花\格式(“com.databricks.spark.sqldw”)\选项(“url”," jdbc::状态"置疑" / / < the-rest-of-the-connection-string >”)\选项(“tempDir”,“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”)\选项(“forwardSparkAzureStorageCredentials”,“真正的”)\选项(“查询”,“选择x, count(*)从表group by x”问)\负载()#应用一些转换数据,然后使用#数据源API来编写数据返回到另一个表在Azure突触。df\格式(“com.databricks.spark.sqldw”)\选项(“url”," jdbc::状态"置疑" / / < the-rest-of-the-connection-string >”)\选项(“forwardSparkAzureStorageCredentials”,“真正的”)\选项(“数据表”,“< your-table-name >”)\选项(“tempDir”,“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”)\保存()
——否则,设置Blob存储帐户访问关键会话配置在笔记本上。fsazure账户关键<你的- - - - - -存储- - - - - -账户- - - - - -的名字>dfs核心窗户= <你的- - - - - -存储- - - - - -账户- - - - - -访问- - - - - -关键>;——使用SQL读取数据。创建example_table_in_spark_read使用com火花sqldw选项(url“jdbc::状态"置疑" / / < the-rest-of-the-connection-string >”,forwardSparkAzureStorageCredentials“真正的”,数据表“< your-table-name >”,tempDir“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”);——写入数据使用SQL。——创建一个新表,抛出错误如果具有相同名称的表已经存在:创建example_table_in_spark_write使用com火花sqldw选项(url“jdbc::状态"置疑" / / < the-rest-of-the-connection-string >”,forwardSparkAzureStorageCredentials“真正的”,数据表“< your-table-name >”,tempDir“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”)作为选择*table_to_save_in_spark;
#负载SparkR图书馆(SparkR)#否则,设置Blob存储帐户访问关键会话配置在笔记本上。相依< -sparkR.callJMethod(sparkR.session(),“配置”)sparkR.callJMethod(相依,“设置”,“fs.azure.account.key < your-storage-account-name > .dfs.core.windows.net”。,“< your-storage-account-access-key >”)#从Azure突触表得到一些数据。df< -read.df(=“com.databricks.spark.sqldw”,url=" jdbc::状态"置疑" / / < the-rest-of-the-connection-string >”,forward_spark_azure_storage_credentials=“真正的”,数据表=“< your-table-name >”,tempDir=“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”)#加载数据从Azure突触查询。df< -read.df(=“com.databricks.spark.sqldw”,url=" jdbc::状态"置疑" / / < the-rest-of-the-connection-string >”,forward_spark_azure_storage_credentials=“真正的”,查询=“选择x, count(*)从表group by x”问,tempDir=“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”)#应用一些转换数据,然后使用#数据源API来编写数据返回到另一个表在Azure突触。write.df(df,=“com.databricks.spark.sqldw”,url=" jdbc::状态"置疑" / / < the-rest-of-the-connection-string >”,forward_spark_azure_storage_credentials=“真正的”,数据表=“< your-table-name >”,tempDir=“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”)

使用(流)

您可以使用Scala中的结构化流写入数据和Python笔记本。

/ /设置Blob存储帐户访问关键会话配置在笔记本上。火花相依(“fs.azure.account.key < your-storage-account-name > .dfs.core.windows.net”。,“< your-storage-account-access-key >”)/ /准备流源;这可能是卡夫卡或一个简单的流率。瓦尔df:DataFrame=火花readStream格式(“速度”)选项(“rowsPerSecond”,“100000”)选项(“numPartitions”,“16”)负载()/ /应用一些转换到数据然后使用/ /结构化流API,不断将数据写入一个表在Azure突触。dfwriteStream格式(“com.databricks.spark.sqldw”)选项(“url”," jdbc::状态"置疑" / / < the-rest-of-the-connection-string >”)选项(“tempDir”,“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”)选项(“forwardSparkAzureStorageCredentials”,“真正的”)选项(“数据表”,“< your-table-name >”)选项(“checkpointLocation”,“/ tmp_checkpoint_location”)开始()
#设置Blob存储帐户访问关键会话配置在笔记本上。火花相依(“fs.azure.account.key < your-storage-account-name > .dfs.core.windows.net”。,“< your-storage-account-access-key >”)#准备流源;这可能是卡夫卡或一个简单的流率。df=火花readStream\格式(“速度”)\选项(“rowsPerSecond”,“100000”)\选项(“numPartitions”,“16”)\负载()然后使用#应用一些转换数据#结构化流API,不断用Azure突触写数据表。dfwriteStream\格式(“com.databricks.spark.sqldw”)\选项(“url”," jdbc::状态"置疑" / / < the-rest-of-the-connection-string >”)\选项(“tempDir”,“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”)\选项(“forwardSparkAzureStorageCredentials”,“真正的”)\选项(“数据表”,“< your-table-name >”)\选项(“checkpointLocation”,“/ tmp_checkpoint_location”)\开始()

配置

本节描述如何配置为连接器编写语义,所需的权限,和各种各样的配置参数。

支持保存模式批写道

Azure突触连接器支持ErrorIfExists,忽略,附加,覆盖默认模式是保存模式ErrorIfExists。有关支持的更多信息模式保存在Apache火花,明白了火花SQL文档保存模式

支持输出模式为流写道

Azure突触连接器支持附加完整的输出模式记录附加和聚合。为更多的细节在输出模式和兼容性矩阵,看到结构化流导

编写语义

请注意

复制有砖运行时7.0及以上。

除了混合基,Azure突触连接器支持复制声明。的复制声明提供了一个更加方便的方式加载数据到Azure的突触,而不需要创建一个外部表,需要更少的权限加载数据,提高数据摄取到Azure突触的性能。

默认情况下,连接器自动发现最好的写语义(复制当针对一个Azure突触Gen2实例,否则混合基)。您还可以指定编写语义使用以下配置:

/ /配置为Azure突触连接器在笔记本上写语义会话相依。火花相依(“spark.databricks.sqldw.writeSemantics”,“< write-semantics >”)
#配置为Azure突触连接器在笔记本上写语义会话相依。火花相依(“spark.databricks.sqldw.writeSemantics”,“< write-semantics >”)
——配置写语义Azure突触连接器会话配置在笔记本上。火花sqldwwriteSemantics= <- - - - - -语义>;
#负载SparkR图书馆(SparkR)#配置为Azure突触连接器在笔记本上写语义会话相依。相依< -sparkR.callJMethod(sparkR.session(),“配置”)sparkR.callJMethod(相依,“设置”,“spark.databricks.sqldw.writeSemantics”,“< write-semantics >”)

在哪里< write-semantics >要么是混合基使用混合基,或复制使用复制声明。

需要Azure突触混合基的权限

当你使用混合基,Azure突触连接器需要JDBC连接用户有权限在Azure突触连接实例中运行以下命令:

作为第一个命令的先决条件,连接器预计,数据库已经存在主密钥指定Azure突触实例。如果没有,您可以创建一个键使用创建主键命令。

此外,阅读Azure突触的餐桌上数据表中提到或表查询JDBC用户必须有权限访问需要Azure突触表。写数据到一个Azure突触的餐桌上数据表JDBC,用户必须写入该Azure突触的权限表。

下表总结了与混合基所有操作所需要的权限:

操作

权限

当使用权限外部数据源

批处理写

控制

看到批处理写

流写

控制

看到流写

控制

看到

需要Azure突触权限混合基与外部数据源的选择

请注意

在砖运行时8.4及以上。

您可以使用预定义的外部数据源的混合基。看到externalDataSource参数参数为更多的信息。

使用混合基与预定义的外部数据源,Azure突触连接器需要JDBC连接用户有权限在Azure突触连接实例中运行以下命令:

要创建一个外部数据源,您应该首先创建一个数据库作用域凭据。下面的链接描述如何创建一个作用域凭据为服务主体和外部数据源的沛富位置:

请注意

外部数据源的位置必须指向一个容器。连接器不工作如果是一个目录的位置在一个容器中。

下表总结了混合基写操作的权限与外部数据源选择:

操作

权限(插入到现有表)

权限(插入一个新表)

批处理写

管理数据库批量操作

插入

创建表

改变任何模式

改变任何外部数据源

改变任何外部文件格式

管理数据库批量操作

插入

创建表

改变任何模式

改变任何外部数据源

改变任何外部文件格式

流写

管理数据库批量操作

插入

创建表

改变任何模式

改变任何外部数据源

改变任何外部文件格式

管理数据库批量操作

插入

创建表

改变任何模式

改变任何外部数据源

改变任何外部文件格式

下表总结了混合基与外部数据源读取操作的权限选项:

操作

权限

创建表

改变任何模式

改变任何外部数据源

改变任何外部文件格式

你可以使用这个连接器读通过数据源API在Scala中,Python, SQL和R笔记本。

/ /从Azure突触表得到一些数据。瓦尔df:DataFrame=火花格式(“com.databricks.spark.sqldw”)选项(“url”," jdbc::状态"置疑" / / < the-rest-of-the-connection-string >”)选项(“tempDir”,“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”)选项(“externalDataSource”,“< your-pre-provisioned-data-source >”)选项(“数据表”,“< your-table-name >”)负载()
#从Azure突触表得到一些数据。df=火花\格式(“com.databricks.spark.sqldw”)\选项(“url”," jdbc::状态"置疑" / / < the-rest-of-the-connection-string >”)\选项(“tempDir”,“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”)\选项(“externalDataSource”,“< your-pre-provisioned-data-source >”)\选项(“数据表”,“< your-table-name >”)\负载()
——使用SQL读取数据。创建example_table_in_spark_read使用com火花sqldw选项(url“jdbc::状态"置疑" / / < the-rest-of-the-connection-string >”,forwardSparkAzureStorageCredentials“真正的”,数据表“< your-table-name >”,tempDir“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”,externalDataSource“< your-pre-provisioned-data-source >”);
#从Azure突触表得到一些数据。df< -read.df(=“com.databricks.spark.sqldw”,url=" jdbc::状态"置疑" / / < the-rest-of-the-connection-string >”,forward_spark_azure_storage_credentials=“真正的”,数据表=“< your-table-name >”,tempDir=“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”externalDataSource=“< your-pre-provisioned-data-source >”)

Azure突触的权限要求复制声明

当你使用复制声明,Azure突触连接器需要JDBC连接用户有权限在Azure突触连接实例中运行以下命令:

如果目标表不存在在Azure突触,许可需要运行以下命令除了上面的命令:

下面的表总结了批处理和流媒体写的权限复制:

操作

权限(插入到现有表)

权限(插入一个新表)

批处理写

管理数据库批量操作

插入

管理数据库批量操作

插入

创建表

改变模式::dbo

流写

管理数据库批量操作

插入

管理数据库批量操作

插入

创建表

改变模式::dbo

参数

参数映射或选项提供火花SQL支持以下设置:

参数

要求

默认的

笔记

数据表

是的,除非查询指定

没有默认的

表创建或从Azure突触。这个参数时需要保存数据回Azure突触。

您还可以使用{模式名称},{表名称}访问一个表在一个给定的模式。如果不提供模式名称,默认模式与用户使用JDBC。

以前的支持数据表变异是弃用,将在未来的版本中被忽略。使用“驼峰式大小写”的名字。

查询

是的,除非数据表指定

没有默认的

查询阅读从Azure突触。

表查询中引用,您还可以使用{模式名称},{表名称}访问一个表在一个给定的模式。如果不提供模式名称,默认模式与用户使用JDBC。

用户

没有

没有默认的

Azure的突触用户名。必须配合使用密码选择。只能使用,如果用户名和密码并不是通过在URL中。通过将导致一个错误。

密码

没有

没有默认的

Azure突触密码。必须配合使用用户选择。只能使用,如果用户名和密码并不是通过在URL中。通过将导致一个错误。

url

是的

没有默认的

一个JDBC URLsqlserver设置为subprotocol。推荐使用Azure门户提供的连接字符串。设置加密= true是强烈推荐的,因为它使SSL加密的JDBC连接。如果用户密码分别设置,您不需要包含URL。

jdbcDriver

没有

由JDBC URL的subprotocol决定

要使用JDBC驱动程序的类名。这个类必须在类路径中。在大多数情况下,它应该不需要指定这个选项,当适当的驱动程序类名应该自动由JDBC URL的subprotocol。

以前的支持jdbc_driver变异是弃用,将在未来的版本中被忽略。使用“驼峰式大小写”的名字。

tempDir

是的

没有默认的

一个abfssURI。我们建议你使用一个专用的Blob存储Azure突触的容器。

以前的支持tempdir变异是弃用,将在未来的版本中被忽略。使用“驼峰式大小写”的名字。

tempFormat

没有

拼花

保存临时文件的格式写作时blob存储Azure突触。默认为拼花;现在不允许其他值。

tempCompression

没有

时髦的

要使用的压缩算法编码/解码临时火花和Azure突触。目前支持的值是:未压缩的,时髦的GZIP

forwardSparkAzureStorageCredentials

没有

如果真正的,图书馆自动发现火花的凭证是用来连接到Blob存储容器和将这些凭证转发到Azure突触在JDBC。这些凭据发送JDBC查询的一部分。因此强烈建议您启用SSL加密的JDBC连接时使用此选项。

当前版本的Azure突触连接器需要(完全)之一forwardSparkAzureStorageCredentials,enableServicePrincipalAuth,或useAzureMSI要显式地设置真正的

以前的支持forward_spark_azure_storage_credentials变异是弃用,将在未来的版本中被忽略。使用“驼峰式大小写”的名字。

useAzureMSI

没有

如果真正的,图书馆将指定身份=的管理服务身份的也没有秘密它创建数据库的作用域凭据。

当前版本的Azure突触连接器需要(完全)之一forwardSparkAzureStorageCredentials,enableServicePrincipalAuth,或useAzureMSI要显式地设置真正的

enableServicePrincipalAuth

没有

如果真正的,图书馆将使用提供的服务主体的凭证连接到Azure存储账户和Azure突触分析/ JDBC。

当前版本的Azure突触连接器需要(完全)之一forwardSparkAzureStorageCredentials,enableServicePrincipalAuth,或useAzureMSI要显式地设置真正的

tableOptions

没有

集群COLUMNSTORE指数,分布=ROUND_ROBIN

用于指定字符串表选项当创建Azure突触的餐桌上数据表。这个字符串传递的条款的创建对Azure突触发出的SQL语句。

以前的支持table_options变异是弃用,将在未来的版本中被忽略。使用“驼峰式大小写”的名字。

预作用

没有

没有默认的(空字符串)

一个;分离的执行SQL命令列表Azure突触前写数据到Azure突触实例。这些SQL命令必须是有效的命令接受Azure突触。

如果这些命令失败,它被视为一个错误和不执行写操作。

postActions

没有

没有默认的(空字符串)

一个;分离的执行SQL命令列表Azure突触后连接器成功写数据到Azure突触实例。这些SQL命令必须是有效的命令接受Azure突触。

如果这些命令失败,它被视为一个错误后,你会得到一个异常数据成功地写入到Azure突触实例。

maxStrLength

没有

256年

StringType在火花是映射到NVARCHAR (maxStrLength)在Azure突触类型。您可以使用maxStrLength设置字符串长度NVARCHAR (maxStrLength)类型列在表的名字数据表在Azure突触。

以前的支持maxstrlength变异是弃用,将在未来的版本中被忽略。使用“驼峰式大小写”的名字。

checkpointLocation

是的

没有默认的

位置DBFS,将使用结构化流写元数据和检查点的信息。看到从故障中恢复检查点在结构化流编程指南。

numStreamingTempDirsToKeep

没有

0

表明有多少(最新)临时目录保持定期清理流微批次。当设置为0目录删除后立即触发微批提交,另有规定的最新微批量保存和删除目录。使用1禁用定期清理。

applicationName

没有

Databricks-User-Query

连接的标签为每个查询。如果未指定或值是空字符串,默认值的标签添加JDBC URL。默认值可以防止Azure数据库监控工具提高寄生对查询的SQL注入警报。

maxbinlength

没有

没有默认的

控制列的长度BinaryType列。这个参数是翻译成VARBINARY (maxbinlength)

identityInsert

没有

设置为真正的使IDENTITY_INSERT模式,插入一个DataFrame提供价值的标识列Azure突触表。

看到显式值插入一个标识列

externalDataSource

没有

没有默认的

一个预定义的外部数据源读取数据从Azure突触。外部数据源只能使用混合基和消除了控制许可要求因为连接器不需要创建一个作用域凭据和外部数据源加载数据。

例如使用和所需的权限列表使用外部数据源时,看到的需要Azure突触权限混合基与外部数据源的选择

maxErrors

没有

0

的最大行数,可以拒绝在装货前的读和写操作(混合基或副本)取消了。拒绝行将被忽略。例如,如果两个的记录有错误,只有8条记录会被处理。

看到REJECT_VALUE文档创建外部表MAXERRORS文档中复制

请注意

  • tableOptions,预作用,postActions,maxStrLength只有当写作相关数据从砖在Azure突触一个新表。

  • externalDataSource从Azure突触相关只有当读取数据并从砖写数据到一个新表在Azure突触混合基语义。你不应该在使用指定其他存储身份验证类型externalDataSourceforwardSparkAzureStorageCredentialsuseAzureMSI

  • checkpointLocationnumStreamingTempDirsToKeep只有相关的流媒体写道砖在Azure突触一个新表。

  • 即使所有数据源选择名称不区分大小写的,我们建议您指定在“驼峰式大小写”清晰。

查询下推到Azure突触

Azure突触连接器实现了一组优化规则,推动以下运营商分成Azure突触:

  • 过滤器

  • 项目

  • 限制

项目过滤器运营商支持以下表达式:

  • 大多数布尔逻辑运算符

  • 比较

  • 基本的算术运算

  • 数字和字符串类型转换

限制支持运营商叠加只有当没有指定命令。例如:

选择(10)*,但不选择(10)*订单通过上校

请注意

Azure突触连接器不压低表达式操作字符串,日期或时间戳。

查询下推了Azure突触连接器是默认启用。你可以通过设置禁用它spark.databricks.sqldw.pushdown

临时数据管理

Azure突触连接器删除临时文件,它创造了Blob存储容器。因此我们建议您定期删除临时文件根据用户提供的tempDir的位置。

为了便于数据清理,Azure突触连接器并不直接存储数据文件tempDir,而是创建了一个目录的形式:< tempDir > / < yyyy-MM-dd > / < HH-mm-ss-SSS > / < randomUUID > /。您可以设置(使用砖周期性工作工作特性或其他)递归删除超过给定阈值的任何子目录(例如,2天),假设不可能有火花工作运行超过这个门槛。

一个简单的替代方法是定期删除整个容器,并使用相同的名称创建一个新的。这要求您使用专用容器Azure突触连接器产生的临时数据,你可以找到一个时间窗口,你可以保证没有涉及连接器正在运行的查询。

临时对象管理

Azure突触连接器自动化数据传输数据砖集群和Azure突触之间的实例。从Azure突触读取数据表或查询或写数据到Azure突触表,Azure突触连接器创建临时对象,包括数据库作用域凭证,外部数据,外部文件格式,外部在幕后。这些对象只在相应的火花的时间工作,应该自动被删除。

当集群是运行一个查询使用Azure突触连接器,如果火花司机进程崩溃或强行重新启动,或如果强行终止或重新启动集群,临时对象可能不会下降。为了便于识别和手动删除这些对象,Azure突触连接器前缀的名字中间Azure突触实例中创建临时对象的标记形式:tmp_databricks_ < yyyy_MM_dd_HH_mm_ss_SSS > _ < randomUUID > _ < internalObject >

我们建议您定期使用查询寻找泄漏对象如以下:

  • 选择*sys.database_scoped_credentials在哪里的名字就像“tmp_databricks_ %”

  • 选择*sys.external_data_sources在哪里的名字就像“tmp_databricks_ %”

  • 选择*sys.external_file_formats在哪里的名字就像“tmp_databricks_ %”

  • 选择*sys.external_tables在哪里的名字就像“tmp_databricks_ %”

流检查点表管理

Azure突触连接器删除流检查点表时创建新的流媒体查询开始。这种行为是一致的checkpointLocationDBFS。因此我们建议您定期删除检查点表在同一时间作为查询删除检查点位置DBFS不会运行在未来或已经检查点位置删除。

默认情况下,所有检查点表名称<前缀> _ < query-id >,在那里<前缀>是一个可配置的前缀与默认值databricks_streaming_checkpointquery_id是一个流媒体查询ID_角色删除。寻找过期或删除所有检查点表流查询,运行查询:

选择*sys在哪里的名字就像“databricks_streaming_checkpoint %”

您可以配置前缀与火花SQL配置选项spark.databricks.sqldw.streaming.exactlyOnce.checkpointTableNamePrefix

常见问题(FAQ)

我收到一个错误而使用Azure突触连接器。我怎么能知道这个错误从Azure突触或砖吗?

帮助你调试错误,通过特定的代码抛出的任何异常Azure突触连接器扩展包在一个异常SqlDWException特征。例外也使以下区别:

  • SqlDWConnectorException代表一个错误抛出的Azure突触连接器

  • SqlDWSideException代表一个错误抛出的Azure突触连接实例

我该怎么办如果我查询失败与错误“没有访问关键发现会话配置或全球Hadoop相依”?

这个错误意味着Azure突触连接找不到存储帐户访问键在笔记本上会话配置或全球Hadoop配置存储中指定账户tempDir。看到使用(批处理)对于如何配置存储帐户访问适当的例子。如果创建一个火花表使用Azure突触连接器,您还必须提供存储帐户访问凭据以读或写火花表。

我可以使用一个共享访问签名(SAS)访问指定的Blob存储容器tempDir吗?

Azure突触不支持使用情景应用程序访问Blob存储。因此,Azure突触连接器不支持情景应用程序访问指定的Blob存储容器tempDir

我创建了一个火花表使用Azure突触连接器数据表这个火花表选项,写了一些数据,然后这个火花表下降。在Azure突触端创建的表会下降吗?

不。Azure突触被认为是外部数据源。Azure突触表的名字数据表火花表被删除时不下降。

当写DataFrame Azure突触,为什么我需要说.option(“数据表”,表).save ()而不是仅仅.saveAsTable(表)吗?

这是因为我们想要明确以下区别:.option(“数据表”,表名)指的是数据库(也就是说,Azure突触)表,而.saveAsTable(表)指的是火花表。事实上,你甚至可以把这两个:df.write。.option(“数据表”,tableNameDW) .saveAsTable (tableNameSpark)创建一个表在Azure突触叫什么tableNameDW和一个外部表的火花tableNameSpark这是由Azure突触表。

警告

谨防以下区别.save ().saveAsTable ():

  • df.write。.option(“数据表”,tableNameDW) .mode(写模式).save (),写方式作用于Azure突触表,如预期。

  • df.write。.option(“数据表”,tableNameDW) .mode(写模式).saveAsTable (tableNameSpark),写方式作用于火花表,而tableNameDW是静静地覆盖如果它已经存在于Azure突触。

这种行为没有写作不同于其他数据源。这只是一个警告的火花DataFrameWriter API