Introdução às Streamlit in Snowflake¶
Este tópico descreve como começar a usar o Streamlit in Snowflake.
Pré-requisitos para o uso do Streamlit in Snowflake¶
Para usar o Streamlit in Snowflake, certifique-se de que você atenda aos seguintes pré-requisitos:
Tenha os privilégios necessários para criar e usar um aplicativo Streamlit.
Para usar o Mapbox em Streamlit in Snowflake e os pacotes fornecidos pelo Anaconda, você deve confirmar os Termos de ofertas externas.
Para obter informações sobre o uso desses pacotes, consulte Como usar pacotes de terceiros do Anaconda.
Certifique-se de que o endereço
*.snowflake.app
esteja na lista de permissões da sua rede e que o aplicativo possa se conectar ao Snowflake.Para obter mais informações, consulte Você não pode carregar o aplicativo Streamlit.
Privilégios necessários para criar e usar um aplicativo Streamlit¶
Dentro de Streamlit in Snowflake, um aplicativo Streamlit é um objeto protegível que segue a estrutura de controle de acesso Snowflake. Os aplicativos Streamlit usam um modelo de permissão baseado nos direitos do proprietário. Para obter mais informações, consulte Noções básicas sobre os direitos do proprietário e aplicativos Streamlit in Snowflake.
Um editor de aplicativo e o proprietário do esquema que contém o aplicativo Streamlit podem determinar quais funções têm permissão para usar o aplicativo. Os usuários podem interagir com o aplicativo e ver qualquer coisa exibida pelo aplicativo Streamlit. Os usuários têm a mesma visão do aplicativo que o proprietário.
Para obter mais informações, consulte Compartilhamento de um aplicativo Streamlit.
Privilégios necessários para criar um aplicativo Streamlit¶
Os aplicativos Streamlit são objetos no nível do esquema.
Para criar e editar um aplicativo Streamlit usando Streamlit in Snowflake, você deve usar uma função que tenha o privilégio OWNERSHIP no esquema ou ambos os privilégios a seguir:
Concedido no bando de dados que contém o aplicativo Streamlit:
USAGE
Concedido no esquema que contém o aplicativo Streamlit:
USAGE
CREATE STREAMLIT
CREATE STAGE
Você também deve ter o privilégio USAGE no warehouse usado para executar o aplicativo Streamlit.
Use o comando GRANT <privilégios> para conceder esses privilégios a uma função, conforme mostrado neste exemplo:
GRANT USAGE ON SCHEMA streamlit_db.streamlit_schema TO ROLE streamlit_creator; GRANT USAGE ON DATABASE streamlit_db TO ROLE streamlit_creator; GRANT USAGE ON WAREHOUSE streamlit_wh TO ROLE streamlit_creator; GRANT CREATE STREAMLIT ON SCHEMA streamlit_db.streamlit_schema TO ROLE streamlit_creator; GRANT CREATE STAGE ON SCHEMA streamlit_db.streamlit_schema TO ROLE streamlit_creator;
Se uma concessão futura for definida no banco de dados ou esquema, certifique-se de que o usuário crie o aplicativo Streamlit usando a função definida na concessão futura.
Privilégios necessários para visualizar um aplicativo Streamlit¶
Para visualizar um aplicativo Streamlit, você deve ter uma conta Snowflake e estar conectado nela. Além disso, você deve usar uma função que tenha o privilégio USAGE nos seguintes objetos:
Banco de dados que contém o aplicativo Streamlit
Esquema que contém o aplicativo Streamlit
O aplicativo Streamlit
Na maioria dos casos, quando o proprietário do aplicativo compartilha um aplicativo Streamlit com outra função, o privilégio USAGE é concedido automaticamente à nova função. No entanto, se um aplicativo Streamlit for criado em um esquema com MANAGED ACCESS, o privilégio USAGE deverá ser concedido manualmente à nova função.
O proprietário do esquema ou um usuário com função com o privilégio MANAGE GRANTS deve conceder o privilégio USAGE usando o comando GRANT <privilégios>, conforme mostrado neste exemplo:
GRANT USAGE ON DATABASE streamlit_db TO ROLE streamlit_role;
GRANT USAGE ON SCHEMA streamlit_db.streamlit_schema TO ROLE streamlit_role;
GRANT USAGE ON STREAMLIT streamlit_db.streamlit_schema.streamlit_app TO ROLE streamlit_role;
O proprietário do esquema ou um usuário com a função com o privilégio MANAGE GRANTS pode conceder o privilégio USAGE para visualizar todos os futuros aplicativos Streamlit criados no esquema, conforme mostrado neste exemplo:
GRANT USAGE ON FUTURE STREAMLITS IN SCHEMA streamlit_db.streamlit_schema TO ROLE streamlit_role;
Versões suportadas da biblioteca Streamlit¶
Streamlit in Snowflake suporta as seguintes versões da biblioteca de código aberto Streamlit:
1.39.0 (atualmente em versão preliminar)
1.35.0
1.31.1
1.29.0
1.26.0
1.22.0
Para visualizar as notas de lançamento de cada versão, consulte o log de alterações da biblioteca Streamlit. Observe que alguns recursos da biblioteca Streamlit de código aberto não são compatíveis com Streamlit in Snowflake. Consulte Recursos Streamlit não suportados.
Seleção da versão da biblioteca Streamlit¶
Para cada aplicativo Streamlit in Snowflake, é possível selecionar a versão da biblioteca Streamlit em Snowsight ou fixar a versão no arquivo environment.yml
do aplicativo. Se você não fixar a versão, a versão mais recente disponível será usada.
A Snowflake recomenda fixar uma versão do Streamlit para evitar que o aplicativo seja atualizado quando uma nova versão do Streamlit estiver disponível no Snowflake Anaconda Channel.
Pacotes externos suportados¶
Por padrão, Streamlit in Snowflake inclui os pacotes python
, streamlit
e snowflake-snowpark-python
pré-instalados em seu ambiente. O ambiente também tem acesso às dependências exigidas por esses pacotes.
Os aplicativos Streamlit in Snowflake são executados em Python 3.8.
Você pode instalar pacotes adicionais em seu aplicativo Streamlit. Para obter uma lista dos pacotes compatíveis, consulte o site Snowflake Anaconda Channel.
Consulte os tópicos a seguir para obter informações sobre como incluir um pacote compatível em seu aplicativo Streamlit:
Diretrizes para selecionar um warehouse em Streamlit in Snowflake¶
Ao executar um aplicativo Streamlit em Streamlit in Snowflake, vários fatores podem afetar o desempenho, incluindo a complexidade do aplicativo Streamlit, a disponibilidade de warehouses, a latência e o custo. As seções a seguir fornecem diretrizes gerais para usar warehouses virtuais em Streamlit in Snowflake.
Uso de warehouses menores¶
Ao executar um aplicativo Streamlit em Streamlit in Snowflake, você deve selecionar o menor warehouse possível.
Durante a execução, um warehouse mantém um cache dos pacotes Python usados por um aplicativo Streamlit. O armazenamento em cache de pacotes Python melhora o desempenho para carregamentos posteriores de aplicativos usando a versão em cache de um pacote em vez de fazer download dos pacotes novamente. O cache é removido quando o warehouse é suspenso, o que pode resultar em um carregamento mais lento do aplicativo inicialmente após a retomada do warehouse. À medida que o warehouse retomado executa mais aplicativos, o cache de pacotes é reconstruído, e os aplicativos que podem aproveitar o cache terão um melhor desempenho de carregamento de aplicativos.
Observe que o faturamento de crédito por segundo e a suspensão automática dão a você a flexibilidade de começar com warehouses menores e, em seguida, ajustar o tamanho do warehouse para corresponder à carga de trabalho do aplicativo Streamlit. Você pode diminuir o tamanho de um warehouse a qualquer momento. Para obter mais informações, consulte Alteração do warehouse de um aplicativo Streamlit.
Uso de warehouses dedicados¶
Quando você usa o Streamlit in Snowflake, a Snowflake recomenda o uso de um warehouse dedicado para executar os aplicativos Streamlit. Isso permite que você isole os custos de execução de um aplicativo Streamlit. Um warehouse dedicado também pode melhorar o tempo de carregamento do aplicativo porque o warehouse não precisa gerenciar outras cargas de trabalho.
Para obter mais informações, consulte Considerações sobre warehouses.
Dica
Para evitar a suspensão do warehouse durante a inicialização, considere definir a suspensão automática para um mínimo de 30 segundos.
Uso de um warehouse separado para executar consultas¶
Os aplicativos Streamlit usam um warehouse virtual para executar o aplicativo e suas consultas. Aplicativos e casos de uso mais avançados podem envolver a execução de uma consulta complexa, o que requer um warehouse maior.
Streamlit in Snowflake oferece suporte ao comando USE WAREHOUSE que especifica um warehouse atual para a sessão. Com esse comando, você pode executar o aplicativo usando um warehouse X-Small e executar consultas complexas usando um warehouse maior.
Você pode usar um warehouse separado para executar consultas em um aplicativo Streamlit com esse código:
import streamlit as st
from snowflake.snowpark.context import get_active_session
# Get the current credentials
session = get_active_session()
warehouse_sql = f"USE WAREHOUSE LARGE_WH"
session.sql(warehouse_sql).collect()
# Execute the SQL using a different warehouse
sql = """SELECT * from MY_DB.INFORMATION_SCHEMA.PACKAGES limit 100"""
session.sql(sql).collect()
Nota
O warehouse é usado somente durante a consulta.
Criação de seu primeiro aplicativo Streamlit in Snowflake¶
Faça login na Snowsight.
No menu de navegação, selecione Projects » Streamlit.
Selecione + Streamlit App.
Insira um título para o aplicativo e escolha um banco de dados, esquema e warehouse.
Selecione Create.
Como acessar os dados do Snowflake no seu aplicativo Streamlit in Snowflake¶
Nesta seção, você edita o novo aplicativo Streamlit para acessar dados de uma tabela do Snowflake.
Crie uma tabela
BUG_REPORT_DATA
em seu banco de dados e esquema:CREATE OR REPLACE TABLE <your_database>.<your_schema>.BUG_REPORT_DATA ( AUTHOR VARCHAR(25), BUG_TYPE VARCHAR(25), COMMENT VARCHAR(100), DATE DATE, BUG_SEVERITY NUMBER(38,0) );
Adicione os dados de amostra na tabela
BUG_REPORT_DATA
:INSERT INTO <your_database>.<your_schema>.BUG_REPORT_DATA (AUTHOR, BUG_TYPE, COMMENT, DATE, BUG_SEVERITY) VALUES ('John Doe', 'UI', 'The button is not aligned properly', '2024-03-01', 3), ('Aisha Patel', 'Performance', 'Page load time is too long', '2024-03-02', 5), ('Bob Johnson', 'Functionality', 'Unable to submit the form', '2024-03-03', 4), ('Sophia Kim', 'Security', 'SQL injection vulnerability found', '2024-03-04', 8), ('Michael Lee', 'Compatibility', 'Does not work on Internet Explorer', '2024-03-05', 2), ('Tyrone Johnson', 'UI', 'Font size is too small', '2024-03-06', 3), ('David Martinez', 'Performance', 'Search feature is slow', '2024-03-07', 4), ('Fatima Abadi', 'Functionality', 'Logout button not working', '2024-03-08', 3), ('William Taylor', 'Security', 'Sensitive data exposed in logs', '2024-03-09', 7), ('Nikolai Petrov', 'Compatibility', 'Not compatible with Safari', '2024-03-10', 2);
Edite o código do aplicativo Streamlit:
import streamlit as st session = st.connection('snowflake').session() # Change the query to point to your table def get_data(_session): query = """ select * from <your_database>.<your_schema>.BUG_REPORT_DATA order by date desc limit 100 """ data = _session.sql(query).collect() return data # Change the query to point to your table def add_row_to_db(session, row): sql = f"""INSERT INTO <your_database>.<your_schema>.BUG_REPORT_DATA VALUES ('{row['author']}', '{row['bug_type']}', '{row['comment']}', '{row['date']}', '{row['bug_severity']}')""" session.sql(sql).collect() st.set_page_config(page_title="Bug report", layout="centered") st.title("Bug report demo!") st.sidebar.write( f"This app demos how to read and write data from a Snowflake Table" ) form = st.form(key="annotation", clear_on_submit=True) with form: cols = st.columns((1, 1)) author = cols[0].text_input("Report author:") bug_type = cols[1].selectbox( "Bug type:", ["Front-end", "Back-end", "Data related", "404"], index=2 ) comment = st.text_area("Comment:") cols = st.columns(2) date = cols[0].date_input("Bug date occurrence:") bug_severity = cols[1].slider("Bug priority :", 1, 5, 2) submitted = st.form_submit_button(label="Submit") if submitted: try: add_row_to_db( session, {'author':author, 'bug_type': bug_type, 'comment':comment, 'date':str(date), 'bug_severity':bug_severity }) st.success("Thanks! Your bug was recorded in the database.") st.balloons() except Exception as e: st.error(f"An error occurred: {e}") expander = st.expander("See 100 most recent records") with expander: st.dataframe(get_data(session))
Para executar o aplicativo Streamlit, selecione Run.