Introdução às Streamlit in Snowflake¶
Este tópico mostra como começar a usar o Streamlit in Snowflake.
Pré-requisitos para o uso do Streamlit in Snowflake¶
Para usar Streamlit in Snowflake, certifique-se de atender aos seguintes pré-requisitos:
Tenha os privilégios necessários para criar e usar um aplicativo Streamlit.
Confirme os Termos das ofertas externas. Para usar o Mapbox em Streamlit in Snowflake e os pacotes fornecidos pelo Anaconda, você deve confirmar os Termos de ofertas externas.
Consulte Como usar pacotes de terceiros do Anaconda para obter informações sobre como usar esses pacotes.
Certifique-se de que
*.snowflake.app
esteja na lista de permissões da sua rede e que o aplicativo seja capaz de se conectar ao Snowflake.Consulte Você não pode carregar o aplicativo Streamlit para obter mais informações.
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. Consulte Noções básicas sobre os direitos do proprietário e aplicativos Streamlit in Snowflake para obter mais detalhes.
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
Use o comando GRANT <privilégios> para conceder esses privilégios a uma função, conforme mostrado nos exemplos a seguir:
GRANT USAGE ON SCHEMA streamlit_db.streamlit_schema TO ROLE streamlit_creator; GRANT USAGE ON DATABASE streamlit_db 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. Adicionalmente, você deve usar uma função com o privilégio USAGE no seguinte:
Banco de dados que contém o aplicativo Streamlit.
Esquema que contém o aplicativo Streamlit.
O warehouse usado para executar o aplicativo Streamlit.
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 nos exemplos a seguir:
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 WAREHOUSE streamlit_wh TO ROLE streamlit_role;
GRANT USAGE ON STREAMLIT streamlit_db.streamlit_schema.streamlit_app 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.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.
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. Consulte o Canal Snowflake Anaconda para obter uma lista de pacotes suportados.
Consulte os tópicos a seguir para obter informações sobre como incluir um pacote compatível em seu aplicativo Streamlilt:
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 é executado e executa mais aplicativos, o cache do pacote é reconstruído e os aplicativos que conseguem aproveitar o cache terão melhor desempenho de carregamento de aplicativos.
Observe que o faturamento de crédito por segundo e a suspensão automática fornecem flexibilidade para 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. Consulte Alteração do warehouse de um aplicativo Streamlit para obter mais informações.
Uso de warehouses dedicados¶
Ao usar Streamlit in Snowflake, Snowflake recomenda usar warehouses dedicados para executar aplicativos Streamlit. Isso permite isolar os custos de execução de aplicativos Streamlit. Um warehouse dedicado também pode melhorar o tempo de carregamento do aplicativo, uma vez que o warehouse não precisa gerenciar outras cargas de trabalho.
Consulte Considerações sobre warehouses para obter mais informações.
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. Dessa forma, você pode executar o aplicativo usando um warehouse X-Small e consultas complexas usando um warehouse maior.
Você pode usar um warehouse separado para executar consultas em um aplicativo Streamlit da seguinte maneira:
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¶
Para criar seu primeiro aplicativo Streamlit in Snowflake:
Faça login no 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ê editará o aplicativo Streamlit que acabou de criar para acessar dados de uma tabela 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 com o seguinte exemplo:
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 occured: {e}") expander = st.expander("See 100 most recent records") with expander: st.dataframe(get_data(session))
Selecione Run para executar o aplicativo Streamlit.