Я использую 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()
Это не работает, и какова реальная причина, по которой я получаю эту ошибку?
Пожалуйста, помогите, я понятия не имею, почему это происходит.
Попытка исправить два типа ошибок при записи из pandas Dataframe() в таблицы в Snowflake.
Существует также состояние гонки, которое может возникнуть первым, поэтому нам нужно написать 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');
Возможно, попробуйте СОЗДАТЬ ВРЕМЕННУЮ ЭТАП, ЕСЛИ НЕ СУЩЕСТВУЕТ...