当前位置: 首页 > 知识库问答 >
问题:

在Azure数据库中创建外部表

空浩淼
2023-03-14

我是azure databricks的新手,正在尝试创建一个外部表,指向Azure Data Lake Storage(ADLS)Gen-2位置。

我尝试从数据库笔记本设置ADLS访问的火花配置。我仍然无法执行创建的DDL。

注意:一个适合我的解决方案是将ADLS帐户装载到集群,然后使用外部表的DDL中的装载位置。但我需要检查是否可以使用ADLS路径创建一个外部表DDL,而无需安装位置。

# Using Principal credentials
spark.conf.set("dfs.azure.account.auth.type", "OAuth")
spark.conf.set("dfs.azure.account.oauth.provider.type", "ClientCredential")
spark.conf.set("dfs.azure.account.oauth2.client.id", "client_id")
spark.conf.set("dfs.azure.account.oauth2.client.secret", "client_secret")
spark.conf.set("dfs.azure.account.oauth2.client.endpoint", 
"https://login.microsoftonline.com/tenant_id/oauth2/token")

数据链路

create external table test(
id string,
name string
)
partitioned by (pt_batch_id bigint, pt_file_id integer)
STORED as parquet
location 'abfss://container@account_name.dfs.core.windows.net/dev/data/employee

收到错误

Error in SQL statement: AnalysisException: org.apache.hadoop.hive.ql.metadata.HiveException: MetaException(message:Got exception: shaded.databricks.v20180920_b33d810.org.apache.hadoop.fs.azurebfs.contracts.exceptions.ConfigurationPropertyNotFoundException Configuration property account_name.dfs.core.windows.net not found.);

我需要帮助,知道这是否可以直接在DDL中引用ADLS位置?

谢了。

共有2个答案

冉丰茂
2023-03-14

如果您可以使用Python(或Scala)。

从建立连接开始:

TenantID = "blah"

def connectLake():
  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", dbutils.secrets.get(scope = "LIQUIX", key = "lake-sp"))
  spark.conf.set("fs.azure.account.oauth2.client.secret", dbutils.secrets.get(scope = "LIQUIX", key = "lake-key"))
  spark.conf.set("fs.azure.account.oauth2.client.endpoint", "https://login.microsoftonline.com/"+TenantID+"/oauth2/token")

connectLake()
lakePath = "abfss://liquix@mystorageaccount.dfs.core.windows.net/"

使用Python,您可以通过以下方式注册表:

spark.sql("CREATE TABLE DimDate USING PARQUET LOCATION '"+lakePath+"/PRESENTED/DIMDATE/V1'")

现在,如果您已经执行了connectLake()函数,就可以查询该表了,这在当前会话/笔记本中很好。

现在的问题是,如果一个新会话进来,他们尝试从该表中选择*,除非他们先运行ConnectLake()函数,否则它将失败。没有办法绕过这个限制,因为您必须证明凭据才能访问湖。

您可能需要考虑 ADLS 第 2 代凭据通过:https://docs.azuredatabricks.net/spark/latest/data-sources/azure/adls-passthrough.html

请注意,这需要使用高并发群集。

艾自强
2023-03-14

一旦配置了Azure数据湖存储,您就可以执行此操作。

如果您希望Databricks工作区中的所有用户都可以访问已装载的Azure Data Lake Storage Gen2帐户,您应该使用下面描述的方法创建一个装载点。用于访问Azure Data Lake Storage Gen2帐户的服务客户端应仅被授予对该Azure Data Lake Storage Gen2帐户的访问权限;不应授予它访问Azure中其他资源的权限。

一旦通过集群创建了装载点,该集群的用户就可以立即访问该装载点。要在另一个正在运行的集群中使用挂载点,用户必须在该正在运行的集群上运行dbutils.fs.refreshMounts(),以使新创建的挂载点可供使用。

从Databricks集群访问Azure Data Lake Storage Gen2有三种主要方式:

  1. 使用具有委派权限和OAuth 2.0的服务主体将Azure Data Lake Storage Gen2文件系统装载到DBFS。
  2. 直接使用服务主体
  3. 直接使用Azure Data Lake Storage Gen2存储帐户访问密钥

有关更多详细信息,请参考“Azure数据湖存储第二代”。

希望这有所帮助。

 类似资料:
  • 我想从我的Microsoft Azure Databricks笔记本连接到Microsoft Azure SQL Server和Microsoft Azure SQL数据库,并执行选择和插入操作。 假设我有一个名为的Microsoft SQL Server,可访问主机名为。 当我在笔记本中执行此操作时,我收到以下错误: SQL语句中的错误:IllegalArgumentException:要求失败

  • 问题内容: 我正在尝试使用SSMS在Azure SQL中创建范围凭证。 我不断遇到错误消息,指出“’cred-name’附近的语法不正确。预期为’=’。” 我不确定我的语法是不正确的,因为我过去已经成功完成了此确切命令,所以我不确定发生了什么变化。我以为可能只是intellisense搞砸了,所以我将SSMS实例从17.3更新到17.7,但是我仍然收到相同的错误消息。 有谁知道可能会发生什么变化?

  • 问题内容: 我正在使用,并且正在尝试运行一个简单的应用程序,尤其是运行在page中描述的应用程序。我的hibernate.cfg.xml文件是: 我(使用maven时)是: 我在链接中使用它: 但是,不可能获得应用程序的工作,即在数据库中hibernate创建表并插入值。无论尝试如何,我总是会收到相同的错误: 在线上的“关系部门不存在”: 我也没有完全相同的错误尝试过。为了抢占某些读者,请不要在数

  • 问题内容: 我有一个长度为m的n个向量的数组。例如,当 n = 3时 , m = 2 : 我想将每个向量的外积与自身相乘,然后将它们连接成形状为 (n,m,m) 的正方形矩阵的数组。所以对于以上我会得到 我可以像这样循环 是否有一个numpy表达式可以在没有Python循环的情况下执行此操作? 额外的问题:由于外部乘积是对称的,因此我不需要 mxm 乘法运算来计算它们。我可以从numpy获得这种对

  • 问题内容: 我正在使用http://code.google.com/p/sqlite- jdbc/wiki/Introduction中 的SQLite驱动程序。 上述文档中显示的示例显示了如何连接现有数据库。 在我的应用程序中,我需要创建一个SQLite数据库。怎么做?创建具有扩展名的文件是否足够?还有一个叫做的函数。如果可以,如何使用?我用谷歌搜索,没有人给出明确的答案。 问题答案: 如果文件不

  • 我为azure cosmos db使用java版本4 SDK。我想在azure cosmos db帐户中使用服务主体创建数据库,而不是使用主密钥。 根据该文档,我为服务主体分配了< code > document DB Account Contributor 和< code>Cosmos DB Operator内置角色定义: https://docs.microsoft.com/pl-pl/azu