사용자 정보로 Streamlit 앱 개인 설정

|st.user|_API를 사용하면 |sis| 앱이 현재 앱을 보고 있는 사용자에 대한 정보에 액세스할 수 있습니다. 이를 사용하여 개인 설정 인사말을 표시하거나, 사용자별로 데이터를 필터링하거나, 작업을 수행한 사용자를 추적할 수 있습니다.

Streamlit in Snowflake 에서 st.user가 제공하는 기능

Streamlit in Snowflake 에서 :code:`st.user`는 현재 뷰어에 대해 다음 두 가지 특성을 제공합니다.

  • st.user.user_name – 뷰어의 Snowflake 사용자 이름입니다.

  • st.user.email – 뷰어의 이메일 주소입니다.

다음 예제에서는 Snowflake 사용자 이름으로 뷰어에게 인사합니다.

import streamlit as st

st.write(f"Hello, {st.user.user_name}!")

뷰어의 표시 이름 조회(선택 사항)

st.user.user_name`은 Snowflake 사용자 이름(예: ``JSMITH`)을 반환합니다. 더 친숙한 이름을 표시하기 위해 :doc:`DESCRIBE USER </sql-reference/sql/desc-user>`를 사용하여 사용자의 표시 이름을 조회할 수 있습니다. 이를 위해서는 상승된 권한이 필요합니다. 앱 소유자의 역할에 사용자 오브젝트에 대한 MONITOR 권한이 있거나 계정 관리자여야 합니다.

다음 예제에서는 해당 표시 이름으로 뷰어에게 인사합니다.

import streamlit as st

conn = st.connection("snowflake")
session = conn.session()

user_info = session.sql(
    f"DESCRIBE USER {st.user.user_name}"
).collect()
display_name = st.user.user_name
for row in user_info:
    if row["property"] == "DISPLAY_NAME":
        display_name = row["value"]
        break

st.write(f"Hello, {display_name}!")

데이터 쿼리 개인 설정

각 뷰어가 자신의 데이터만 볼 수 있도록 쿼리 결과를 필터링합니다. 이 예제에서는 쿼리가 캐시된 결과를 반환하는 대신 재실행할 때마다 새로 실행되도록 conn.query() 대신 ``session.sql()``을 사용합니다.

import streamlit as st

conn = st.connection("snowflake")
session = conn.session()
data = session.sql(
    "SELECT * FROM my_table WHERE owner = ?",
    params=[st.user.user_name],
).to_pandas()
st.dataframe(data)

작업을 수행한 사용자 추적

Snowflake에 데이터를 다시 쓸 때 뷰어의 ID를 포함합니다.

import streamlit as st

conn = st.connection("snowflake")
session = conn.session()

with st.form("entry_form"):
    value = st.text_input("Enter a value")
    submitted = st.form_submit_button("Save")

if submitted:
    session.sql(
        "INSERT INTO my_table (created_by, value) VALUES (?, ?)",
        params=[st.user.user_name, value],
    ).collect()
    st.success("Saved!")

CURRENT_USER와의 관계

SQL 함수 CURRENT_USER()는 세션 소유자의 Snowflake 사용자 이름을 반환합니다. 소유자 권한을 사용하는 Streamlit in Snowflake 앱에서, 이는 뷰어가 아닌 Streamlit 오브젝트의 소유자입니다. Python 코드에서 뷰어를 식별하려면 :code:`st.user`를 대신 사용합니다.

SQL 쿼리에 뷰어의 ID가 필요한 경우 제한된 호출자 권한(미리 보기)을 사용해 보세요. 호출자 권한이 제한된 경우 쿼리는 뷰어로 실행되므로 CURRENT_USER()는 뷰어의 ID를 반환합니다. 자세한 내용은 제한된 호출자의 권한 및 Streamlit in Snowflake 섹션을 참조하십시오.

런타임 차이점

:code:`st.user`는 Container Runtime 및 Warehouse Runtime 모두에서 사용할 수 있습니다. 동작은 두 환경에서 동일합니다. 즉, Streamlit 오브젝트의 소유자가 아닌 앱을 보는 사용자의 ID를 반환합니다.