how does query processing happen in snowflake