我想通过 Python API 获取我的 dbt 项目的所有模型中的活动或非活动用户列表。这可能吗?
我尝试列出模型,但无法获取用户信息,如用户名、项目、 以及上次活动或上次登录。
不幸的是,dbt 本身并不跟踪你所寻找的用户活动数据(最后登录、活跃用户等)。dbt 的主要功能是转换数据,而不是管理用户访问和监控活动。
要实现你的目标,你需要结合其他工具和数据源:
-
用户身份验证和授权平台: 你需要一个系统来管理用户访问你的数据平台。这可能是像 Okta、Auth0 这样的专用身份提供商,也可能是你的数据仓库提供的内置身份验证系统(例如 Snowflake、BigQuery)。
-
审计日志: 大多数数据仓库会记录用户活动,包括查询历史、登录时间等等。你可以从这些审计日志中提取相关信息。每个平台的日志结构和访问方式都不一样,你需要参考其文档。
-
Python 脚本与 API: 你可以编写 Python 脚本来连接你的身份验证平台和数据仓库,并使用其 API 来检索必要的数据。
以下是一个可能的实现步骤:
-
确定用户身份验证系统: 确定你使用的是哪个身份验证系统,并找到其 API 文档。
-
检索用户列表: 使用身份验证系统的 API 获取所有用户的列表,包括用户名、用户 ID 等信息。
-
连接到数据仓库: 使用 Python 库(例如
snowflake-connector-python
或google-cloud-bigquery
)连接到你的数据仓库。 -
查询审计日志: 根据你的数据仓库的日志结构,编写 SQL 查询语句来提取每个用户的最后活动时间。例如:
Snowflake:
sql
SELECT
USER_NAME,
MAX(START_TIME) AS LAST_ACTIVITY_TIME
FROM SNOWFLAKE.ACCOUNT_USAGE.ACCESS_HISTORY
GROUP BY USER_NAME;
BigQuery:
sql
SELECT
protopayload_auditlog.authenticationInfo.principalEmail AS USER_NAME,
MAX(timestamp) AS LAST_ACTIVITY_TIME
FROM `region-us`.cloudaudit.googleapis.com/data_access
WHERE protopayload_auditlog.serviceName = 'bigquery.googleapis.com'
GROUP BY USER_NAME;
-
合并数据: 使用 Python 脚本将用户列表和最后活动时间合并在一起。
-
定义活动用户标准: 根据你的需求,定义一个时间阈值来判断用户是否活跃。例如,如果用户在过去 30 天内没有活动,则将其视为非活跃用户。
-
生成报告: 根据你的分析结果,生成包含活跃用户和非活跃用户列表的报告。
请注意,以上步骤只是一个示例框架,具体的实现方式会根据你使用的工具和具体需求而有所不同。
标签:python,python-3.x,python-2.7,snowflake-cloud-data-platform,dbt From: 78784903