Axx*_*ion 2 databricks delta-lake
Databricks1 在 Databricks 中创建数据库(和表)并将其数据存储在存储帐户中。在Databricks2中我想读取数据:Databricks2只有读取权限。我可以直接读取原始增量文件,但我想创建一个在 Databricks UI 中可视化的数据库和表。我认为它会按以下方式工作:
CREATE DATABASE IF NOT EXISTS datastore_panels
LOCATION '/mnt/readOnlyTraining/tmp/panels/';
Run Code Online (Sandbox Code Playgroud)
但这会产生权限错误,尽管 tmp/panels 数据库已经就位。
有没有办法从增量之上的现有资源创建具有只读访问权限的数据库/表?
我已经找到了解决方案。我在这个问题上浪费了相当多的时间,但我从未遇到过有同样问题的人。
解决方法其实很简单,但是你需要知道。我有一个服务主体,可以读取我的存储帐户。
像这样创建数据库(不要提及位置):
CREATE DATABASE IF NOT EXISTS datastore_panels
Run Code Online (Sandbox Code Playgroud)
创建表(使用位置,但不设置表属性或分区:它将从增量表元数据中读取此表):
CREATE TABLE IF NOT EXISTS datastore_panels.customer_data
USING delta
LOCATION '/mnt/readOnlyTraining/delta/customer-data/'
Run Code Online (Sandbox Code Playgroud)
对于那些想更好地理解这个问题的人,这是我之前尝试过的
%sql
CREATE TABLE IF NOT EXISTS datastore_panels.production_bazeilles_press_shopfloor (
reg_id INT,
year INT,
timestamp_utc TIMESTAMP,
unit STRING,
value DECIMAL (18,8),
descr_total STRING,
descr01 STRING,
descr02 STRING,
descr03 STRING,
descr04 STRING,
descr05 STRING,
descr06 STRING,
descr07 STRING,
descr08 STRING,
descr09 STRING,
descr10 STRING
)
USING delta
PARTITIONED BY (year)
LOCATION '/mnt/blob/panels/production/bazeilles/press/shopfloor'
TBLPROPERTIES ('delta.deletedFileRetentionDuration' = "interval 60 days",
'delta.autoOptimize.optimizeWrite' = 'true'
)
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为 Spark 最终只会读取,但由于指定的列,tblproperties 和 Partitionedby Spark 需要以仅读取访问权限登录到有人尝试更改这些属性的存储帐户。此日志记录步骤是不可能的,因此它会返回“无权限”错误。
| 归档时间: |
|
| 查看次数: |
2636 次 |
| 最近记录: |