在Azure突触分析查询数据
您可以访问Azure从砖使用Azure突触的突触连接器,它使用复制
声明在Azure突触砖之间有效地传输大量数据集群和Azure突触实例使用Azure数据存储Gen2存储湖占临时登台。
Azure突触分析是一个基于云计算的企业数据仓库,利用大规模并行处理(MPP)快速运行复杂的查询在pb的数据。
重要的
这个连接器使用突触专用池实例,并与其他突触不兼容组件。
请注意
复制
只有在Azure湖代实例存储的数据。如果你正在寻找细节处理混合基时,看到的连接数据砖和Azure突触与混合基(遗留)。
例如语法突触
您可以查询突触在Scala中,Python, SQL和r .下面的代码示例使用存储账户键和转发存储凭证从砖到突触。
请注意
使用Azure门户提供的连接字符串,使安全套接字层(SSL)加密所有数据发送火花司机和Azure突触之间通过JDBC连接实例。启用了SSL加密验证,你可以搜索加密= true
在连接字符串。
/ /设置存储帐户访问关键会话配置在笔记本上。火花。相依。集(“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 >”)。保存()
#设置存储帐户访问关键会话配置在笔记本上。火花。相依。集(“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 >”)\。保存()
——设置存储帐户访问关键会话配置在笔记本上。集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)#设置存储帐户访问关键会话配置在笔记本上。相依< -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 >”)
配置访问Azure存储
砖和突触需要获取一个Azure存储的特权帐户用于临时数据存储。
Azure突触不支持使用SAS存储帐户访问。您可以配置为服务的访问通过下列之一:
使用帐户存储账户和设置的关键和秘密
forwardSparkAzureStorageCredentials
来真正的
。看到设置火花属性配置访问Azure存储Azure凭证。使用Azure数据存储Gen2湖OAuth 2.0认证。
配置您的Azure突触实例托管服务身份。
Azure突触需要权限
因为它使用复制
在后台,Azure突触连接器需要JDBC连接用户有权限在Azure突触连接实例中运行以下命令:
如果目标表不存在在Azure突触,许可需要运行以下命令除了上面的命令:
下表总结了写所需的权限复制
:
权限(插入到现有表) |
权限(插入一个新表) |
---|---|
管理数据库批量操作 插入 |
管理数据库批量操作 插入 创建表 改变模式::dbo |
网络配置
如果您配置防火墙在Azure突触,您必须配置网络设置允许砖到Azure的突触。首先,确保你的砖工作区部署在自己的虚拟网络_。你可以上配置IP防火墙规则Azure Synpase允许从你的子网连接你的Synpase账户。看到Azure突触分析IP防火墙规则。
配置连接从砖到突触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突触连接器支持ErrorIfExists
,忽略
,附加
,覆盖
默认模式是保存模式ErrorIfExists
。有关支持的更多信息模式保存在Apache火花,明白了火花SQL文档保存模式。
砖突触连接器的选择参考
的选项
提供火花SQL支持以下设置:
参数 |
要求 |
默认的 |
笔记 |
---|---|---|---|
|
是的,除非 |
没有默认的 |
表创建或从Azure突触。这个参数时需要保存数据回Azure突触。 您还可以使用 以前的支持 |
|
是的,除非 |
没有默认的 |
查询阅读从Azure突触。 表查询中引用,您还可以使用 |
|
没有 |
没有默认的 |
Azure的突触用户名。必须配合使用 |
|
没有 |
没有默认的 |
Azure突触密码。必须配合使用 |
|
是的 |
没有默认的 |
一个JDBC URL |
|
没有 |
由JDBC URL的subprotocol决定 |
要使用JDBC驱动程序的类名。这个类必须在类路径中。在大多数情况下,它应该不需要指定这个选项,当适当的驱动程序类名应该自动由JDBC URL的subprotocol。 以前的支持 |
|
是的 |
没有默认的 |
一个 以前的支持 |
|
没有 |
|
要使用的压缩算法编码/解码临时火花和Azure突触。目前支持的值是: |
|
没有 |
假 |
如果 配置存储身份验证时,您必须设置一个 以前的支持 |
|
没有 |
假 |
如果 配置存储身份验证时,您必须设置一个 |
|
没有 |
假 |
如果 如果任何一 |
|
没有 |
|
用于指定字符串表选项当创建Azure突触的餐桌上 以前的支持 |
|
没有 |
没有默认的(空字符串) |
一个 如果这些命令失败,它被视为一个错误和不执行写操作。 |
|
没有 |
没有默认的(空字符串) |
一个 如果这些命令失败,它被视为一个错误后,你会得到一个异常数据成功地写入到Azure突触实例。 |
|
没有 |
256年 |
以前的支持 |
|
没有 |
|
连接的标签为每个查询。如果未指定或值是空字符串,默认值的标签添加JDBC URL。默认值可以防止Azure数据库监控工具提高寄生对查询的SQL注入警报。 |
|
没有 |
没有默认的 |
控制列的长度 |
|
没有 |
假 |
设置为 看到显式值插入一个标识列。 |
|
没有 |
没有默认的 |
一个预定义的外部数据源读取数据从Azure突触。外部数据源只能使用混合基和消除了控制许可要求因为连接器不需要创建一个作用域凭据和外部数据源加载数据。 例如使用和所需的权限列表使用外部数据源时,看到的需要Azure突触权限混合基与外部数据源的选择。 |
|
没有 |
0 |
的最大行数可以在装运之前拒绝了在读写操作取消。拒绝行将被忽略。例如,如果两个的记录有错误,只有8条记录会被处理。 |
|
没有 |
假 |
如果 |
请注意
tableOptions
,预作用
,postActions
,maxStrLength
只有当写作相关数据从砖在Azure突触一个新表。即使所有数据源选择名称不区分大小写的,我们建议您指定在“驼峰式大小写”清晰。
查询下推到Azure突触
Azure突触连接器实现了一组优化规则,推动以下运营商分成Azure突触:
过滤器
项目
限制
的项目
和过滤器
运营商支持以下表达式:
大多数布尔逻辑运算符
比较
基本的算术运算
数字和字符串类型转换
为限制
支持运营商叠加只有当没有指定命令。例如:
选择(10)*从表
,但不选择(10)*从表订单通过上校
。
请注意
Azure突触连接器不压低表达式操作字符串,日期或时间戳。
查询下推了Azure突触连接器是默认启用。你可以通过设置禁用它spark.databricks.sqldw.pushdown
来假
。
临时数据管理
Azure突触连接器不删除临时文件,它会创建在Azure存储容器。砖建议您定期删除临时文件根据用户提供的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_ %”