Невозможно создать дельта-таблицу в Databricks Premium. Нет проблем с созданием версии сообщества Delta Table Databricks

Я создал новый экземпляр Databricks Premium в Azure и попытаюсь ли я создать дельта-таблицу со следующим кодом PySpark:

if chkDir == 'False' or chkTbl == False:
  
  ent.setupDeltaTable(stageName,regName)

  #register data frame
  deltadf = DeltaTable.forName(spark,f"{stageName}{regName}")
else:
  #register data frame
  deltadf = DeltaTable.forName(spark,f"{stageName}{regName}")

Я получаю ошибку:

AnalysisException: `BASEsqlArea2`.`Country` is not a Delta table.

Полная ошибка выглядит следующим образом:

Честно говоря, я думаю, что проблема в f"{stageName}{regName}". По какой-то причине Databricks отделяет имя базы данных от имени таблицы точкой.

Я должен отметить, что у меня нет такой проблемы с Databricks Community Edition. Таким образом, это заставляет меня думать, что ситуация связана с DBR версии 12.2 LTS (включая Apache Spark 3.3.2, Scala 2.12).

Кроме того, я не знаю, связано ли это, но недавно создав новый экземпляр Azure Databricks, Databricks больше не создает базу данных в Hive_metastore по умолчанию? См. изображение. В последний раз, когда я создавал новый экземпляр Databricks (около 4 месяцев назад) и таблицу Delta, Databricks автоматически создавал базу данных и таблицы в Hive_metastore. Теперь кажется, что база данных и таблицы автоматически создаются под именем самого экземпляра Databricks. Внесли ли Databricks некоторые изменения в то, где создаются базы данных и таблицы?

Я только что выполнил код еще раз и в дополнение к вышеуказанной ошибке теперь получаю дополнительную ошибку:

[RequestId=64a0cd67-33fe-4c5f-9e99-xxxxxx ErrorClass=INVALID_PARAMETER_VALUE] GenerateTemporaryPathCredential uri /mnt/lake/BASE/CombinedClass/sqlArea2/data/Country/1 is not a valid URI. Error message: INVALID_PARAMETER_VALUE: Missing cloud file system scheme.

Такой ошибки я еще не видел. Опять же, я вообще не получаю этой ошибки при выполнении кода в Databricks Community Edition.

Я попробовал следующее предложение, чтобы решить эту проблему с помощью следующего кода: stageName = "BASEsqlArea2" regName = "Страна" chkDir = 'Ложь' chkTbl = Ложь если chkDir == 'False' или chkTbl == False: ent.setupDeltaTable(stageName,regName) deltadf = DeltaTable.forPath(spark, f"/FileStore/tables/delta/{stageName}/{regName}") deltadf.toDF().show()

Однако я получаю следующую ошибку:

BASEsqlArea2 - Database created
Warning: Unmapped Spark type 'ByteType()' encountered, defaulting to 'STRING'
Table creation failed
AnalysisException: `/FileStore/tables/delta/BASEsqlArea2/Country` is not a Delta table.

Должен отметить, что мой Каталог выглядит следующим образом:

Также мои stageName и regName выглядят следующим образом:

stageName = "BASEsqlArea2" regName = "Country" chkDir = 'False' chkTbl = False, если chkDir == 'False' или chkTbl == False: setupDeltaTable(stageName, regName) deltadf = DeltaTable.forPath(spark, f"/FileStore/ table/delta/{stageName}/{regName}") deltadf.toDF().show()

Dileep Raj Narayan Thumula 10.07.2024 11:06

Можете ли вы попробовать все вышеперечисленное и сообщить мне, помогло ли это вам?

Dileep Raj Narayan Thumula 10.07.2024 11:07

Привет @DileepRajNarayanThumula, спасибо, что обратились к нам. Сейчас попробую ваше предложение и дам вам знать

Patterson 10.07.2024 11:10

DeltaTable.forName(destMasterTable).as("t") ...попробуйте тоже это

Dileep Raj Narayan Thumula 10.07.2024 11:11

Привет @DileepRajNarayanThumula, я обновил вопрос, указав результаты вашего предложения. Я также добавил несколько примечаний, которые могут помочь в устранении неполадок. Спасибо

Patterson 10.07.2024 11:33

def setupDeltaTable(stageName, regName): путь = f"/FileStore/tables/delta/{stageName}/{regName}", если не DeltaTable.isDeltaTable(spark, path): data = [("Джеймс", "Смит") , ("Анна", "Роза")] df = spark.createDataFrame(data, ["имя", "фамилия"]) df.write.format("дельта").mode("перезаписать").save(путь ) print(f"Дельта-таблица создана по адресу {path}.") else: print(f"Дельта-таблица уже существует по адресу {path}.")

Dileep Raj Narayan Thumula 10.07.2024 11:35

stageName = "BASEsqlArea2" regName = "Country" chkDir = 'False' chkTbl = False, если chkDir == 'False' или chkTbl == False: setupDeltaTable(stageName, regName) deltadf = DeltaTable.forPath(spark, f"/FileStore/ table/delta/{stageName}/{regName}") deltadf.toDF().show()

Dileep Raj Narayan Thumula 10.07.2024 11:35

Можете ли вы попробовать сейчас?

Dileep Raj Narayan Thumula 10.07.2024 11:35

Сейчас попробую другие ваши предложения...

Patterson 10.07.2024 11:41

При вашем втором предложении я получаю сообщение об ошибке NameError: name 'DeltaTable' is not defined, и ошибка указывает на if not DeltaTable.isDeltaTable(spark, path): .

Patterson 10.07.2024 11:47

Я ответил полным кодом, который я пробовал до сих пор, можете ли вы проверить, помогает ли это вам, и дайте мне знать, пожалуйста

Dileep Raj Narayan Thumula 10.07.2024 11:59

Очень странно, что я получаю ошибку NameError для DeltaTable. Согласны ли вы, что мне не нужно определять «DeltaTable»?

Patterson 10.07.2024 12:01

о, я только что увидел, что ты ответил с полным кодом. Я проверю это сейчас.

Patterson 10.07.2024 12:02

да, пожалуйста, поскольку ОШИБКА предполагает, что BASEsqlArea2.Country не является дельта-таблицей. Поэтому я попытался создать дельта-таблицу и применил подход, который вы задали в вопросе.

Dileep Raj Narayan Thumula 10.07.2024 12:03
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
14
77
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда я попытался зарегистрировать таблицу Delta с помощью

deltadf = DeltaTable.forName(spark, f"{stageName}.{regName}")

Ошибка:

AnalysisException: `BASEsqlArea2`.`Country_users` is not a Delta table.

Когда я попытался создать таблицу Delta с помощью setupDeltaTable(stageName, regName)

AnalysisException: [RequestId=7df20209-dfa7-4e40-ba92-ed3162ba9dca ErrorClass=INVALID_PARAMETER_VALUE] GenerateTemporaryPathCredential uri /FileStore/tables/delta/BASEsqlArea2/Country_users is not a valid URI. 
Error message: INVALID_PARAMETER_VALUE: Missing cloud file system scheme.

Я попробовал следующий подход: В hive_metastore:

from pyspark.sql import SparkSession
from delta.tables import *
databaseName = "hive_metastore.BASEsqlArea2"
spark.sql(f"CREATE DATABASE IF NOT EXISTS {databaseName}")
spark.sql(f"USE {databaseName}")
data = [("James", "Smith"), ("Anna", "Rose")]
columns = ["firstname", "lastname"]
df = spark.createDataFrame(data, columns)
def setupDeltaTable(stageName, regName):
    fullTableName = f"{stageName}.{regName}"
    if not DeltaTable.isDeltaTable(spark, f"delta.`{fullTableName}`"):
        df.write.format("delta").mode("overwrite").saveAsTable(fullTableName)
        print(f"Delta table created as {fullTableName}.")
    else:
        print(f"Delta table {fullTableName} already exists.")
stageName = "hive_metastore.BASEsqlArea2"
regName = "Country"
setupDeltaTable(stageName, regName)
deltadf = spark.read.table(f"{stageName}.{regName}")
display(deltadf)

Полученные результаты:

Привет @Dileep, большое спасибо за это. Однако как я могу изменить этот код так, чтобы он создавал базу данных в Hive_metastore со сценическим именем «BASEsqlArea2» и таблицей с regName «Country». ?

Patterson 10.07.2024 12:47

@Позвольте мне попробовать и обновить решение для вас.

Dileep Raj Narayan Thumula 10.07.2024 12:55

@Patterson Я обновил решение. дайте мне знать, помогло ли это вам.

Dileep Raj Narayan Thumula 10.07.2024 13:36

Ух ты! @Dileep, это был успех. Спасибо ооооооооооооооооо

Patterson 10.07.2024 13:47

Другие вопросы по теме