Я нашел решение. Я потратил довольно много времени на это, и я никогда не сталкивался с кем-то с таким же вопросом.
Решение на самом деле простое, но вы должны знать. У меня есть Сервисный Принципал с доступом для чтения к моей учетной записи хранения.
Создайте базу данных следующим образом (не указывайте местоположение):
CREATE DATABASE IF NOT EXISTS datastore_panels
Создайте таблицу (используйте местоположение, но не устанавливайте свойства таблиц или разбиение: они будут считываться из метаданных дельта-таблицы):
CREATE TABLE IF NOT EXISTS datastore_panels.customer_data
USING delta
LOCATION '/mnt/readOnlyTraining/delta/customer-data/'
Для тех, кто хочет лучше понять вопрос, это то, что я пробовал раньше
%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'
)
Это не работает, потому что в конце концов spark будет только читать, но из-за указанных столбцов tblproperties и partitionedby spark должны регистрироваться в учетной записи хранения только с правами чтения, которые кто-то пытается изменить эти свойства. Этот шаг регистрации невозможен, поэтому он возвращает ошибку «нет разрешения».