Как устранить ошибку «Ошибка компиляции SQL: объект SNOWPARK_TEMP_STAGE_FLGVIWVUC уже существует». проблема в снежинке?

Я использую Snowflake для работы с машинным обучением. Я построил множественную линейную регрессию. Я пишу выходные данные в виде таблицы, используя session.write_pandas. Я получаю эту ошибку

'SQL compilation error: Object 'SNOWPARK_TEMP_STAGE_XXXXX' already exists.' 

в приложении «Снежинка» с подсветкой. Это произойдет, если я обновлю страницу. Но почему это происходит? Я не смог найти проблем, связанных с этим в Интернете.

Я получаю эту ошибку, только если пишу dataframe как pandas. Ниже приведен код, в котором я получаю эту ошибку.


from snowflake.snowpark.context import get_active_session
session = get_active_session()
session.write_pandas(df_final, "TEMPTABLE",database = "db",schema = "schema", auto_create_table=True, overwrite=True)

Я пытался очистить или удалить сцену каждый раз перед кодом write_pandas.

import uuid
    
# Drop the stage if it already exists
session.sql(f"DROP STAGE IF EXISTS {stage_name}").collect()

# Create a new temporary stage
session.sql(f"CREATE TEMPORARY STAGE {stage_name}").collect()

Это не работает, и какова реальная причина, по которой я получаю эту ошибку?

Пожалуйста, помогите, я понятия не имею, почему это происходит.

Возможно, попробуйте СОЗДАТЬ ВРЕМЕННУЮ ЭТАП, ЕСЛИ НЕ СУЩЕСТВУЕТ...

Teej 01.07.2024 06:11
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
1
103
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Попытка исправить два типа ошибок при записи из pandas Dataframe() в таблицы в Snowflake.

  1. SNOWPARK_TEMP_FILE_FORMAT_XXXX уже существует
  2. SNOWPARK_TEMP_STAGE_XXXX уже существует

Существует также состояние гонки, которое может возникнуть первым, поэтому нам нужно написать try-кроме внутри try-кроме, чтобы решить эту проблему.

Эта проблема наблюдается во всех инструментах, связанных с SNOWPARK, таких как Streamlit в Snowflake, Python-workbook, хранимых процедурах Python и т. д.

# EXAMPLE:
# Modify this fix to your own use accordingly ✅
# Snowflake may patch this BUG in the future.
# This BUG is really annoying. 

import re
from snowflake.snowpark.context import get_active_session
session = get_active_session()

def try_to_write_pd_to_table(my_session, my_df, my_tablename, my_db, my_sch):
    try:
        my_session.write_pandas(my_df, my_tablename, database=f"{my_db}", schema = "{my_sch}", auto_create_table=True, overwrite=True)
    except Exception as e1:
        try:
            tmp_file_format=re.findall('SNOWPARK_TEMP_FILE_FORMAT_[A-Z]{10}', str(e1))
            if (len(tmp_file_format)>0):
                my_session.sql(f'DROP FILE FORMAT IF EXISTS {my_db}.{my_sch}.{tmp_file_format[0]};').collect();
            tmp_stage=re.findall('SNOWPARK_TEMP_STAGE_[A-Z]{10}', str(e1))
            if (len(tmp_stage)>0):
                my_session.sql(f'DROP STAGE IF EXISTS {my_db}.{my_sch}.{tmp_stage[0]};').collect();
            my_session.write_pandas(my_df, my_tablename, database=f"{my_db}", schema = "{my_sch}", auto_create_table=True, overwrite=True)
        except Exception as e2:
            tmp_file_format=re.findall('SNOWPARK_TEMP_FILE_FORMAT_[A-Z]{10}', str(e2))
            if (len(tmp_file_format)>0):
                my_session.sql(f'DROP FILE FORMAT IF EXISTS {my_db}.{my_sch}.{tmp_file_format[0]};').collect();
            tmp_stage=re.findall('SNOWPARK_TEMP_STAGE_[A-Z]{10}', str(e2))
            if (len(tmp_stage)>0):
                my_session.sql(f'DROP STAGE IF EXISTS {my_db}.{my_sch}.{tmp_stage[0]};').collect();
            my_session.write_pandas(my_df, my_tablename, database=f"{my_db}", schema = "{my_sch}", auto_create_table=True, overwrite=True)

try_to_write_pd_to_table(session, df_final, "TEMPTABLE", 'LLM_DATABASE', 'ML_SCHEMA');

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