连接数据砖和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认证。OAuth 2.0和服务主体的更多信息,见访问存储Azure的Active Directory。
下面的例子说明了这两种方法使用存储帐户访问键的方法。这同样适用于OAuth 2.0配置。
笔记本会话配置(首选)
使用这种方法,该帐户访问密钥在会话中设置配置的笔记本运行命令。这个配置不影响其他笔记本连接到相同的集群。火花
是SparkSession
对象提供的笔记本。
火花。相依。集(“fs.azure.account.key < your-storage-account-name > .dfs.core.windows.net”。,“< your-storage-account-access-key >”)
全球Hadoop配置
这种方法更新全球Hadoop相关配置SparkContext
对象由所有笔记本共享。
sc。hadoopConfiguration。集(“fs.azure.account.key < your-storage-account-name > .dfs.core.windows.net”。,“< your-storage-account-access-key >”)
hadoopConfiguration
不暴露在所有版本的PySpark。虽然下面的命令依靠一些火花内部,它应该与所有PySpark版本和在未来不太可能打破或改变:
sc。_jsc。hadoopConfiguration()。集(“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设计在很大程度上,从而提供更高的延迟,可能不适合实时数据处理在某些情况下。
使用(批处理)
你可以使用这个连接器通过数据源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存储帐户访问关键会话配置在笔记本上。集fs。azure。账户。关键。<你的- - - - - -存储- - - - - -账户- - - - - -的名字>。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突触。df。writeStream。格式(“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突触写数据表。df。writeStream\。格式(“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突触连接器会话配置在笔记本上。集火花。砖。sqldw。writeSemantics= <写- - - - - -语义>;
#负载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突触的权限要求复制
声明
请注意
在砖运行时7.0及以上。
当你使用复制
声明,Azure突触连接器需要JDBC连接用户有权限在Azure突触连接实例中运行以下命令:
如果目标表不存在在Azure突触,许可需要运行以下命令除了上面的命令:
下面的表总结了批处理和流媒体写的权限复制
:
操作 |
权限(插入到现有表) |
权限(插入一个新表) |
---|---|---|
批处理写 |
管理数据库批量操作 插入 |
管理数据库批量操作 插入 创建表 改变模式::dbo |
流写 |
管理数据库批量操作 插入 |
管理数据库批量操作 插入 创建表 改变模式::dbo |
参数
参数映射或选项
提供火花SQL支持以下设置:
参数 |
要求 |
默认的 |
笔记 |
---|---|---|---|
|
是的,除非 |
没有默认的 |
表创建或从Azure突触。这个参数时需要保存数据回Azure突触。 您还可以使用 以前的支持 |
|
是的,除非 |
没有默认的 |
查询阅读从Azure突触。 表查询中引用,您还可以使用 |
|
没有 |
没有默认的 |
Azure的突触用户名。必须配合使用 |
|
没有 |
没有默认的 |
Azure突触密码。必须配合使用 |
|
是的 |
没有默认的 |
一个JDBC URL |
|
没有 |
由JDBC URL的subprotocol决定 |
要使用JDBC驱动程序的类名。这个类必须在类路径中。在大多数情况下,它应该不需要指定这个选项,当适当的驱动程序类名应该自动由JDBC URL的subprotocol。 以前的支持 |
|
是的 |
没有默认的 |
一个 以前的支持 |
|
没有 |
|
保存临时文件的格式写作时blob存储Azure突触。默认为 |
|
没有 |
|
要使用的压缩算法编码/解码临时火花和Azure突触。目前支持的值是: |
|
没有 |
假 |
如果 当前版本的Azure突触连接器需要(完全)之一 以前的支持 |
|
没有 |
假 |
如果 当前版本的Azure突触连接器需要(完全)之一 |
|
没有 |
假 |
如果 当前版本的Azure突触连接器需要(完全)之一 |
|
没有 |
|
用于指定字符串表选项当创建Azure突触的餐桌上 以前的支持 |
|
没有 |
没有默认的(空字符串) |
一个 如果这些命令失败,它被视为一个错误和不执行写操作。 |
|
没有 |
没有默认的(空字符串) |
一个 如果这些命令失败,它被视为一个错误后,你会得到一个异常数据成功地写入到Azure突触实例。 |
|
没有 |
256年 |
以前的支持 |
|
是的 |
没有默认的 |
位置DBFS,将使用结构化流写元数据和检查点的信息。看到从故障中恢复检查点在结构化流编程指南。 |
|
没有 |
0 |
表明有多少(最新)临时目录保持定期清理流微批次。当设置为 |
|
没有 |
|
连接的标签为每个查询。如果未指定或值是空字符串,默认值的标签添加JDBC URL。默认值可以防止Azure数据库监控工具提高寄生对查询的SQL注入警报。 |
|
没有 |
没有默认的 |
控制列的长度 |
|
没有 |
假 |
设置为 看到显式值插入一个标识列。 |
|
没有 |
没有默认的 |
一个预定义的外部数据源读取数据从Azure突触。外部数据源只能使用混合基和消除了控制许可要求因为连接器不需要创建一个作用域凭据和外部数据源加载数据。 例如使用和所需的权限列表使用外部数据源时,看到的需要Azure突触权限混合基与外部数据源的选择。 |
|
没有 |
0 |
的最大行数,可以拒绝在装货前的读和写操作(混合基或副本)取消了。拒绝行将被忽略。例如,如果两个的记录有错误,只有8条记录会被处理。 |
请注意
tableOptions
,预作用
,postActions
,maxStrLength
只有当写作相关数据从砖在Azure突触一个新表。externalDataSource
从Azure突触相关只有当读取数据并从砖写数据到一个新表在Azure突触混合基语义。你不应该在使用指定其他存储身份验证类型externalDataSource
如forwardSparkAzureStorageCredentials
或useAzureMSI
。checkpointLocation
和numStreamingTempDirsToKeep
只有相关的流媒体写道砖在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突触连接器不删除流检查点表时创建新的流媒体查询开始。这种行为是一致的checkpointLocation
DBFS。因此我们建议您定期删除检查点表在同一时间作为查询删除检查点位置DBFS不会运行在未来或已经检查点位置删除。
默认情况下,所有检查点表名称<前缀> _ < query-id >
,在那里<前缀>
是一个可配置的前缀与默认值databricks_streaming_checkpoint
和query_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。