首页 > 解决方案 > Snowflake Python 连接器:复制命令状态和错误处理

问题描述

根据 Snowflake docs,当用户执行复制命令时,它将返回 3 个状态值中的 1 个:

我的问题是,如果我使用 Python Snowflake 连接器(请参见下面的示例代码)执行复制命令,如果返回的状态为加载失败或部分加载,是否会引发异常?

谢谢!

copy_dml = 'copy into database.schema.table ' \
'from @fully_qualified_stage pattern = \'.*'+ table_name +'.*[.]json\' ' \
'file_format = (format_name = fully_qualified_json_format) ' \
'force = true;'

 try:
        import snowflake.connector
#-------------------------------------------------------------------------------------------------------------------------------  
        #snowflake variables
        snowflake_warehouse = credentials.iloc[0]['snowflake_warehouse']
        snowflake_account = credentials.iloc[0]['snowflake_account']
        snowflake_role = credentials.iloc[0]['snowflake_role']
        snowflake_username = credentials.iloc[0]['Username']
        snowflake_password = credentials.iloc[0]['Password']
        snowflake_connection = ''
        cs = ''#snowflake connection cursor
        exec_copy_dml = ''
        copy_result_field_metadata = ''
        copy_result = ''
        snowflake_copy_result_df = ''
#-------------------------------------------------------------------------------------------------------------------------------
        # load JSON file(s) into Snowflake 
        snowflake_connection = snowflake.connector.connect(
        user = snowflake_username,
        password = snowflake_password,
        account = snowflake_account,
        warehouse = snowflake_warehouse,
        role = snowflake_role)
        cs = snowflake_connection.cursor()
        exec_copy_dml = cs.execute(copy_dml)
        copy_result =  exec_copy_dml.fetchall()
        copy_result_field_metadata = cs.description
        snowflake_copy_result_df = snowflake_results_df(copy_result_field_metadata,copy_result)
    except snowflake.connector.errors.ProgrammingError as copy_error:
        copy_exception_message = "There was a problem loading JSON files to Snowflake," + \
        "a snowflake.connector.errors.ProgrammingError exception was raised."
        print(copy_exception_message)
        raise
    except Exception as error_message:
        raise 
    finally:
        snowflake_connection.close()

标签: snowflake-cloud-data-platform

解决方案


我相信它不会引发负载状态异常,您必须检查负载状态并在需要时采取必要的措施。


推荐阅读